Skip to content

Commit add2b43

Browse files
committed
Integrated "/components/unit_configs/hooks.rst"
1 parent df430fe commit add2b43

File tree

2 files changed

+115
-1
lines changed

2 files changed

+115
-1
lines changed

docs/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,4 +42,5 @@ where it's opened will be reloaded automatically as well.
4242
:ref:`tc_UserSession_sample` - the "sample" column of the "UserSession" database table
4343
:ref:`cfg_sample` - the "sample" configuration variable
4444
:ref:`form_control_sample` - the "sample" form control
45+
:ref:`hook_sample` - the "sample" hook property
4546
```
Lines changed: 114 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,120 @@
11
Hooks
22
=====
33
`Data Source`_
4+
`Eng Data Source`_
45

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 = '*'`` - любой префикс (т.е. выполняться для всех, зарегистрированных в системе префиксов);
6118

7119
.. _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

Comments
 (0)