In-Portal Developers Guide

This is a wiki-based Developers Guide for In-Portal Open Source CMS. The purpose of this guide is to provide advanced users, web developers and programmers with documentation on how to expand, customize and improve the functionality and the code the In-Portal software. Please consider contributing to our documentation writing effort.

K4:Regular Events

From In-Portal Developers Guide

Jump to: navigation, search
Unit Configs Unit Configs
Статьи в этой категории

В K4 существует механизм, позволяющий выполнять требуемые события в системе на регулярной основе. Т.е. вызывать указанное событие раз в N секунд. Есть 2 способа вызова (когда их вызывает система) данных событий:

  • из скрипта "tools/cron.php";
  • до или после показывания содержания страницы пользователю.

У каждого из этих способов есть свои плюсы и минусы, зная которые можно вернее принять решение о том, какой из них использовать. Переключаться можно способом вызова регулярных событий можно используя опцию UseCronForRegularEvent в конфигурации сайта.

С использованием cron

Неоспоримым плюсом при использовании cron является то, что пользователи, заходящие на сайт не будут ждать выполнения долгих регулярных событий. Этот способ хорошо подходит для случаев, когда результат работы регулярного события не сразу можно увидеть на сайте. Хорошим примером этому может служить регулярное событие, которое обновляет рейтинг пользователей. Пользователей на сайте может быть много, а пересчёт их рейтинга при заходе других пользователей на сайт может занять значительное время. В результате увеличится время, требуемое для показывания странички пользователю и он просто может уйти с сайта не дождавшись результата. Если для обработки регулярных событий использовать cron, то этой проблемы не будет.

Длй настройки cron на сайте требуется добавить следующую команду в файл crontab (используя команду "crontab -e") текущего пользователя:

wget http://server_address/tools/cron.php -O /dev/null > /dev/null 2>&1
  • server_address - это путь, который используется для захода на сайт из браузера (напр. "alex.prod.intechnic.lv/test_project").

В этом случае регулярные события не будут выполняться при заходе на сайт, а будут выполняться при вызове файла "tools/cron.php" (брать из In-Portal).

Без использования cron

Если cron не используется или его не представляется возможным включить на сайте, то можно воспользоваться способом вызова регулярных событий по умолчанию. Данных способ сильно уступает ранее описанному, но не требует никакой дополнительной настройки сайта и доступен каждому. В более поздних версия K4 можно ставить after hook на события:

  • adm:OnStartup - для выполнения событий до показывания страницы (с версии 4.0.0);
  • adm:OnBeforeShutdown - для выполнения событий после показывания страницы (с версии 4.2.1).

Если требуется, чтобы событие выполнялось всегда (в случае с регулярными событиями оно выполняется раз в N секунд), то рекомендуется использовать этот подход.

Пример

Для того, чтобы добавить новое регулярное событие его надо сначала написать, а потом в его unit config в опции RegularEvents добавить новый ключ:

'RegularEvents' => Array (
	'membership_expiration' => Array ('EventName' => 'OnCheckExpiredMembership', 'RunInterval' => 1800, 'Type' => reAFTER),
),

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

название опции описание опции
EventName (string) Название события в текущем unit config.
RunInterval (int) Интервал, с которым данное событие должно вызываться (в секундах).
Type (int, const) Определяет когда вызывать данное событие относительно показывания страницы:
  • reBEFORE - до показывания страницы;
  • reAFTER - после показывания страницы.