Вывод сообщения в зависимости от времени просмотра веб-сайта для Grav CMS

 

Grav CMSTwigразработкасниппет

Идеей для написания этой заметки послужил вопрос о том, как при помощи Grav CMS реализовать вывод сообщения посетителю веб-сайта организации в зависимости от времени посещения и рабочего режима организации.

Этот вопрос имеет актуальность, так как вывод сообщений на страницах веб-сайта в зависимости от времени его просмотра является распространённым требованием заказчиков. На практике такая возможность может быть полезна для веб-сайта предприятия сферы услуг, магазина и прочих случаях, в которых требуется оповестить посетителя о чём-либо в зависимости от текущего времени.

В общем виде решение задачи сводится к выполнению проверки вхождения текущей временной метки в заданный временной интервал с выполнением требуемого действия в зависимости от результата проверки.

В качестве конкретного примера предлагаю рассмотреть вариант реализации вывода сообщения о текущем статусе работы выставочного зала, открытого для посетителей ежедневно с 10 до 20 часов.

Прежде всего необходимо задать границы временного интервала, определяющего режим работы выставочного зала. Для этого в пользовательский конфигурационный файл веб-сайта /user/config/site.yaml, или в заголовок файла страницы, следует добавить время начала и время завершения работы. При этом может быть использован любой допустимый формат времени.

working_time:
  start: '10:00'
  end: '20:00'

Логика вывода сообщения реализуется в шаблоне оформления Twig:

{% set current_time = date() %}
{% set start_time = date(site.working_time.start) %}
{% set end_time = date(site.working_time.end) %}
{% if (current_time >= start_time and current_time < end_time) %}
  Мы открыты и ждём Вас сегодня до {{ site.working_time.end }}!
{% else %}
  {% set when = (current_time|date('G') > start_time|date('G')) ? 'завтра' : 'сегодня' %}
  Сейчас мы закрыты. Ждём Вас {{ when }} с {{ site.working_time.start }} до {{ site.working_time.end }}!
{% endif %}

В результате выполнения кода, если посетитель зашёл на веб-сайт в рабочее время выставочного зала, ему будет показано сообщение:

Мы открыты и ждём Вас сегодня до 20:00!

После окончания работы выставочного зала, но до наступления следующего дня, посетителю будет показано сообщение:

Сейчас мы закрыты. Ждём Вас завтра с 10:00 до 20:00!

Начиная с 0 часов до начала рабочего времени выставочного зала, посетителю будет показано сообщение:

Сейчас мы закрыты. Ждём Вас сегодня с 10:00 до 20:00!

В приведённом коде время начала и завершения работы заданы в конфигурационном файле /user/config/site.yaml. Однако при их задании в заголовке страницы код должен быть изменён для использования page.header.working_time вместо site.working_time.

При усложнении условий задачи, например, при существовании перерывов в работе, различной продолжительности рабочего дня, выходных дней и т.п., код может быть изменён путём введения дополнительных проверок временных интервалов, текущей даты, дня недели, месяца и т.д.

Следует иметь в виду, что приведённый код выполняется на стороне сервера, поэтому для получения корректного результата необходимо отключить или правильно настроить интервал кэширования страниц веб-сайта, либо использовать, добавленный в Grav CMS 1.1.13, параметр настройки системы never_cache_twig.

Если использование кэширования принципиально, то рассмотренная возможность должна быть реализована на стороне клиента с использованием JavaScript.