|
1 | 1 | Hooks
|
2 | 2 | =====
|
3 | 3 | `Data Source`_
|
| 4 | +`Eng Data Source`_ |
4 | 5 |
|
5 |
| -... |
| 6 | +K4 позволяет программисту выполнять требуемую функциональность до или после нужных :doc:`событий </events>` |
| 7 | +в системе. Например можно удалять файл картинки с жёсткого диска при удалении записи о картинке из базы |
| 8 | +данных. Данная возможность реализована через механизм, называемый "hooks". |
| 9 | + |
| 10 | +Hook - это событие (event), которое будет выполняться до или после того события, с которым он связан по |
| 11 | +средством ключа **в массиве Hooks**, находящегося в |
| 12 | +:doc:`unit config </components/unit_configs/configuration_files>` файле. Количество hooks на одно и то же |
| 13 | +событие не ограничено. Условные обозначения, использованные в данной статье: |
| 14 | + |
| 15 | +- **текущий unit config** - это тот unit config, в котором описывается сам hook |
| 16 | +- **главное событие** - событие, которое приводит к вызову hook |
| 17 | + |
| 18 | +Правила хорошего тона |
| 19 | +--------------------- |
| 20 | + |
| 21 | +- hook должен работать с данными того unit config, в котором он объявлен или с данными главного события |
| 22 | +- hook и то, событие, с которым он связан не должны находиться в одном |
| 23 | + :doc:`обработчике событий </components/event_handler/event_handlers>` (т.е. чтобы значение ключей |
| 24 | + HookToPrefix и DoPrefix **не совпадало**) |
| 25 | + |
| 26 | +Доступ к главному событию из тела hook производиться через конструкцию |
| 27 | + |
| 28 | +.. code:: php |
| 29 | +
|
| 30 | + $master_event =& $event->MasterEvent; |
| 31 | +
|
| 32 | +Добавление hook |
| 33 | +--------------- |
| 34 | + |
| 35 | +Hook можно добавить использую приведённый ниже код: |
| 36 | + |
| 37 | +.. code:: php |
| 38 | +
|
| 39 | + 'Hooks' => Array ( |
| 40 | + Array ( |
| 41 | + 'Mode' => hAFTER, |
| 42 | + 'Conditional' => false, |
| 43 | + 'HookToPrefix' => '#PARENT#', |
| 44 | + 'HookToSpecial' => '*', |
| 45 | + 'HookToEvent' => Array ('OnAfterItemDelete'), |
| 46 | + 'DoPrefix' => '', |
| 47 | + 'DoSpecial' => '', |
| 48 | + 'DoEvent' => 'OnDeleteForeignRelations', |
| 49 | + ), |
| 50 | + ), |
| 51 | +
|
| 52 | +Все указанные выше ключи (при объявлении hook) обязательны. Если требуется на время выключить hook, то надо |
| 53 | +**закомментировать** его объявление **полностью**, а не только ключ ``DoEvent`` к примеру. Все ключи |
| 54 | +начинающиеся с ``HookTo`` относятся к заданию главного события, а ключи, начинающиеся с ``Do`` описывают |
| 55 | +какое событие будет вызываться. |
| 56 | + |
| 57 | ++-------------------------+----------------------------------------------------------------------------------------+ |
| 58 | +| название опции | описание опции | |
| 59 | ++=========================+========================================================================================+ |
| 60 | +| .. config-property:: | Когда будет выполняться hook относительно главного события (к которому он привязан): | |
| 61 | +| :name: Mode | | |
| 62 | +| :type: int | - ``hBEFORE`` - выполняться до основного события (в таких hooks можно отменять вызов | |
| 63 | +| :ref_prefix: hook_ | основного события); | |
| 64 | +| | - ``hAFTER`` - выполняться после основного события (будут выполняться только если | |
| 65 | +| | основное события успешно завешилось). | |
| 66 | ++-------------------------+----------------------------------------------------------------------------------------+ |
| 67 | +| .. config-property:: | - ``true`` - выполняться только при наличии, в ``$_REQUEST``, данных от | |
| 68 | +| :name: Conditional | :ref:`префикса <uc_Prefix>` из опции :ref:`hook_DoPrefix`; | |
| 69 | +| :type: boolean | - ``false`` - выполняться всегда | |
| 70 | +| :ref_prefix: hook_ | | |
| 71 | ++-------------------------+----------------------------------------------------------------------------------------+ |
| 72 | +| .. config-property:: | Префикс, для которого создан hook. | |
| 73 | +| :name: HookToPrefix | | |
| 74 | +| :type: string | | |
| 75 | +| :ref_prefix: hook_ | | |
| 76 | ++-------------------------+----------------------------------------------------------------------------------------+ |
| 77 | +| .. config-property:: | Special при котором будет срабатывать hook. | |
| 78 | +| :name: HookToSpecial | | |
| 79 | +| :type: string | | |
| 80 | +| :ref_prefix: hook_ | | |
| 81 | ++-------------------------+----------------------------------------------------------------------------------------+ |
| 82 | +| .. config-property:: | Список :doc:`событий </events>` с которыми данный hook будет связан (будет выполняться | |
| 83 | +| :name: HookToEvent | до или после них). | |
| 84 | +| :type: array | | |
| 85 | +| :ref_prefix: hook_ | | |
| 86 | ++-------------------------+----------------------------------------------------------------------------------------+ |
| 87 | +| .. config-property:: | Префикс того :doc:`unit config </components/unit_configs/configuration_files>`, у | |
| 88 | +| :name: DoPrefix | которого будет выполняться hook (т.е. где он определён). | |
| 89 | +| :type: string | | |
| 90 | +| :ref_prefix: hook_ | | |
| 91 | ++-------------------------+----------------------------------------------------------------------------------------+ |
| 92 | +| .. config-property:: | Special, с которым вызывать событие из опции :ref:`hook_DoEvent`. | |
| 93 | +| :name: DoSpecial | | |
| 94 | +| :type: string | | |
| 95 | +| :ref_prefix: hook_ | | |
| 96 | ++-------------------------+----------------------------------------------------------------------------------------+ |
| 97 | +| .. config-property:: | Событие, которое должно выполняться когда сработает hook. | |
| 98 | +| :name: DoEvent | | |
| 99 | +| :type: string | | |
| 100 | +| :ref_prefix: hook_ | | |
| 101 | ++-------------------------+----------------------------------------------------------------------------------------+ |
| 102 | + |
| 103 | +Специальные значения опций |
| 104 | +-------------------------- |
| 105 | + |
| 106 | +Для более гибкого (flexible) определения hook **рекомендуется** применять следующие специальные значения для |
| 107 | +опций при его объявлении: |
| 108 | + |
| 109 | +- ``HookToPrefix = '#PARENT#'`` - использовать значение ключа :ref:`uc_ParentPrefix` текущего unit config; |
| 110 | +- ``HookToSpecial = '*'`` - надо вызывать данный hook при любом Special у главного события; |
| 111 | +- ``DoPrefix = ''`` - событие из ``DoEvent`` ключа находится в |
| 112 | + :doc:`обработчике событий </components/event_handler/event_handlers>` заданном в текущем unit config; |
| 113 | +- ``DoSpecial = '*'`` - использовать тот Special, с которым вызвано главное событие. |
| 114 | + |
| 115 | +.. versionadded:: 5.0.0 |
| 116 | + |
| 117 | +- ``HookToPrefix = '*'`` - любой префикс (т.е. выполняться для всех, зарегистрированных в системе префиксов); |
6 | 118 |
|
7 | 119 | .. _Data Source: http://guide.in-portal.org/rus/index.php/K4:Hooks
|
| 120 | +.. _Eng Data Source: http://guide.in-portal.org/eng/index.php/K4:Hooks |
0 commit comments