Идеей для написания этой заметки послужил вопрос о том, как при помощи 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.