Ограничение заказов по времени на Тильде

С помощью данной модификации, вы сможете ограничить приём заказав для своего кафе, ресторана или магазина в определённые часы и дни. Например, вы не принимаете и не доставляете заказы ночью, с помощью данной модификации вы можете настроить прием заказов только в ваше рабочее время
Studio Headphones
SKU: 700.954.29
100
р.
When we first checked out our new headphones, we noticed the box said “improved bass”. We had to wonder if this was marketing jargon or the real thing? But it only took a moment to realize that bass was not kidding.
А уже всё, не принимаем заказы в это время :(
Подготовка:
  1. Создайте Zero Block. Он будет отображаться вместо корзины в те часы и дни, когда вы не сможете обработать заказы. Например, данный Zero Block может содержать уведомление о том, что вы не принимаете заказы.
  2. Добавьте блок T1093 и с помощью модификации свяжите его с Zero Block из первого шага.
  3. Разместите код на странице в блоке T123
  4. Замените в коде id блока на ваш «ID блока T1093»
Условия показа
  1. «С какого времени принимать заказы»выберите время, когда вы можете обрабатывать заказы.
  2. «По какое время принимать заказы»выберите время, когда вы перестаете обрабатывать заказы.
  3. «Часовой пояс»укажите тот часовой пояс, в котором вы работаете.
  4. Последний шаг в настройке условий работы — это выбор дней недели.
<!-- Ограничиваем заказы по времени | https://mixadev.ru -->

<script id="disable-order-by-time">
  (() => {
    "use strict";

    const config = {
      blockId: "#rec000000000",
      startTime: "12",
      endTime: "21.59",
      timeZone: "+1",
      monday: true,
      tuesday: true,
      wednesday: true,
      thursday: true,
      friday: true,
      saturday: true,
      sunday: true,
    };

    const { blockId, endTime, startTime, timeZone } = config;
    const daysOfWeek = ["sunday", "monday", "tuesday", "wednesday", "thursday", "friday", "saturday"];
    const activeDays = [config.sunday, config.monday, config.tuesday, config.wednesday, config.thursday, config.friday, config.saturday];
    const enabledDays = daysOfWeek.map((day, index) => (activeDays[index] ? day : undefined));

    const getBlockTooltip = (selector) => {
      const block = $(selector);
      return $("[data-tooltip-hook]", block).attr("data-tooltip-hook");
    };

    const simulateClick = (url) => {
      const link = $("<a>", {
        href: url,
        click: function (event) {
          event.preventDefault();
          $(this).remove();
        },
      });
      link.appendTo(".t706");
      link[0].click();
    };

    const isOrderAllowed = ({ blockId, startHour, endHour, timeZone, days }) => {
      if ($(blockId).length) {
        const now = new Date();
        const currentTime = now.getTime();
        const timezoneOffset = 6e4 * now.getTimezoneOffset();
        const adjustedTime = currentTime + 60 * timeZone * 60 * 1e3;
        const localTime = new Date(adjustedTime + timezoneOffset);
        const currentHour = localTime.getHours();
        let isAllowed = true;
        let isActiveDay = false;

        days.forEach((day, index) => {
          if (daysOfWeek.includes(day) && index === localTime.getDay()) {
            isActiveDay = true;
          }
        });

        if (isActiveDay) {
          if (startHour < endHour) {
            isAllowed = !(currentHour >= startHour && currentHour <= endHour);
          } else {
            isAllowed = !(currentHour >= startHour || currentHour <= endHour);
          }
        }

        return isAllowed;
      }
    };

    t_onFuncLoad("tcart__openCartSidebar", () => {
      const originalOpenCartSidebar = window.tcart__openCartSidebar;
      window.tcart__openCartSidebar = function () {
        if (isOrderAllowed({
          blockId,
          startHour: startTime,
          endHour: endTime,
          timeZone: Number(timeZone),
          days: enabledDays,
        })) {
          simulateClick(getBlockTooltip(blockId));
        } else {
          originalOpenCartSidebar(...arguments);
        }
      };
    });

    t_onFuncLoad("tcart__openCart", () => {
      const originalOpenCart = window.tcart__openCart;
      window.tcart__openCart = function () {
        if (isOrderAllowed({
          blockId,
          startHour: startTime,
          endHour: endTime,
          timeZone: Number(timeZone),
          days: enabledDays,
        })) {
          simulateClick(getBlockTooltip(blockId));
        } else {
          originalOpenCart(...arguments);
        }
      };
    });
  })();
</script>
Вам помогла эта модификация?