Отключение оформления заказа в определенный промежуток времени

ferz
Сообщения: 2
Зарегистрирован: 23.01.2024
Поблагодарил: 2 раз

Отключение оформления заказа в определенный промежуток времени

Непрочитанное сообщение ferz »

Коллеги, всем привет! Решил поделиться решением по отключению оформления заказа в определенной промежуток времени.

От заказчика(ресторан с доставкой блюд) поступила задача по отключению возможности оформления заказа с 22:00 до 10:00. 
Сайт использует Nginx, поэтому было решено добавить дополнительные настройки в файла хоста, чем менять код сайта.

На сайте была создана страница (Статья) по времени приёма заказов. Эта страница используется в качестве цели редиректа со страницы оформления заказа.

Nginx не поддерживает арифметические операции и вложенные операторы IF.
Ниже представлен конфиг. 
Буду признателен за замечания и пожелания!
 

Код: Выделить всё

  # создаём переменную часа со значением по умолчанию
  set $local_hour "00";
  #set $time_iso8601_test "2024-09-07T03:26:53+07:00";
  if ($time_iso8601 ~ "^\d{4}-[01]\d-[0-3]\dT([0-2]\d):[0-5]\d:[0-5]\d") {
    set $local_hour $1;
  }

  set $order_redirect "off";
  set $order_page_redirect "redirectOff";

  # проверяем чтобы час был <10 или >=22
  # <10
  if ($local_hour ~ "0[0-9]"){
    set $order_redirect "on";
    set $order_page_redirect "redirectOn";
  }

  # >=22
  if ($local_hour ~ "2[23]"){
    set $order_redirect "on";
    set $order_page_redirect "redirectOn";
  }

  # т.к. в Nginx отсутствуют операции вложенных IF, воспользуемся хитростью
  # "Групповые/вложенные условия в nginx через переменные":https://itnots.ru/nginx/gruppovye-vlozhennye-usloviya-v-nginx-cherez-peremennye/

  # проверяем что это страница оформления заказа
  if ($query_string ~ route=checkout/simplecheckout) {  
    set $order_page_redirect  "${order_page_redirect}Yes";
  }

  # если есть редирект и страница заказа, то делаем переадресацию
  if ($order_page_redirect = "redirectOnYes" ){
    return 301 https://site.ru/priyom-zakazov;
  }

  add_header X-order-redirect "$order_redirect";
  add_header X-local-hour "$local_hour";
  #add_header X-time-local "$time_local";
  add_header X-time-iso "$time_iso8601";
Аватара пользователя
liveopencart
liveopencart.ru
Сообщения: 264
Зарегистрирован: 10.03.2022
Мои дополнения: 19th19th
Поблагодарил: 74 раз
Спасибо: 121 раз
Контактная информация:

Re: Отключение оформления заказа в определенный промежуток времени

Непрочитанное сообщение liveopencart »

Если что можно также воспользоваться модулем FilterIt.
Вложения
photo_2024-09-09_09-39-40.jpg
photo_2024-09-09_09-39-40.jpg (89 КБ) 9273 просмотра
ferz
Сообщения: 2
Зарегистрирован: 23.01.2024
Поблагодарил: 2 раз

Re: Отключение оформления заказа в определенный промежуток времени

Непрочитанное сообщение ferz »

liveopencart писал(а): 09 сен 2024, 07:40 Если что можно также воспользоваться модулем FilterIt.

Понял, спасибо.
А время в модуле FilterIt определяется на стороне клиента или сервера? И можно в нём делать редирект?
Аватара пользователя
liveopencart
liveopencart.ru
Сообщения: 264
Зарегистрирован: 10.03.2022
Мои дополнения: 19th19th
Поблагодарил: 74 раз
Спасибо: 121 раз
Контактная информация:

Re: Отключение оформления заказа в определенный промежуток времени

Непрочитанное сообщение liveopencart »

ferz писал(а): 09 сен 2024, 08:20
liveopencart писал(а): 09 сен 2024, 07:40 Если что можно также воспользоваться модулем FilterIt.
А время в модуле FilterIt определяется на стороне клиента или сервера? И можно в нём делать редирект?
"Внимание! При проверке используется дата и время сервера, на котором расположен сайт!"
Редиректа в коробке, мне кажется, нет, но возможно можно сделать какой-то скрипт. По-умолчанию можно выводить заглушку или отдельный вариант доставки (оплаты).
 
Ответить