3.2.5. Hooks
K4 позволяет программисту выполнять требуемую функциональность до или после нужных событий в системе. Например можно удалять файл картинки с жёсткого диска при удалении записи о картинке из базы данных. Данная возможность реализована через механизм, называемый «hooks».
Hook - это событие (event), которое будет выполняться до или после того события, с которым он связан по средством ключа в массиве Hooks, находящегося в unit config файле. Количество hooks на одно и то же событие не ограничено. Условные обозначения, использованные в данной статье:
текущий unit config - это тот unit config, в котором описывается сам hook
главное событие - событие, которое приводит к вызову hook
Правила хорошего тона
hook должен работать с данными того unit config, в котором он объявлен или с данными главного события
hook и то, событие, с которым он связан не должны находиться в одном обработчике событий (т.е. чтобы значение ключей HookToPrefix и DoPrefix не совпадало)
Доступ к главному событию из тела hook производиться через конструкцию
$master_event =& $event->MasterEvent;
Добавление hook
Hook можно добавить использую приведённый ниже код:
'Hooks' => Array (
Array (
'Mode' => hAFTER,
'Conditional' => false,
'HookToPrefix' => '#PARENT#',
'HookToSpecial' => '*',
'HookToEvent' => Array ('OnAfterItemDelete'),
'DoPrefix' => '',
'DoSpecial' => '',
'DoEvent' => 'OnDeleteForeignRelations',
),
),
Все указанные выше ключи (при объявлении hook) обязательны. Если требуется на время выключить hook, то надо
закомментировать его объявление полностью, а не только ключ DoEvent к примеру. Все ключи
начинающиеся с HookTo относятся к заданию главного события, а ключи, начинающиеся с Do описывают
какое событие будет вызываться.
название опции |
описание опции |
|---|---|
| Mode (int) | Когда будет выполняться hook относительно главного события (к которому он привязан):
|
| Conditional (boolean) | |
| HookToPrefix (string) | Префикс, для которого создан hook. |
| HookToSpecial (string) | Special при котором будет срабатывать hook. |
| HookToEvent (array) | Список событий с которыми данный hook будет связан (будет выполняться до или после них). |
| DoPrefix (string) | Префикс того unit config, у которого будет выполняться hook (т.е. где он определён). |
| DoSpecial (string) | Special, с которым вызывать событие из опции DoEvent. |
| DoEvent (string) | Событие, которое должно выполняться когда сработает hook. |
Специальные значения опций
Для более гибкого (flexible) определения hook рекомендуется применять следующие специальные значения для опций при его объявлении:
HookToPrefix = '#PARENT#'- использовать значение ключа ParentPrefix текущего unit config;HookToSpecial = '*'- надо вызывать данный hook при любом Special у главного события;DoPrefix = ''- событие изDoEventключа находится в обработчике событий заданном в текущем unit config;DoSpecial = '*'- использовать тот Special, с которым вызвано главное событие.
Добавлено в версии 5.0.0.
HookToPrefix = '*'- любой префикс (т.е. выполняться для всех, зарегистрированных в системе префиксов);