K4:Обработчики событий
From In-Portal Developers Guide
m (категория) |
Current revision (18:45, 28 November 2010) (view source) (Side-box) |
||
(One intermediate revision not shown.) | |||
Line 76: | Line 76: | ||
Если в [[K4:Unit Configs|unit config]], в котором указан класс, содержащий обработчик события находиться опция [[K4:Unit Configs#SubItems|SubItems]], то названия прав доступа нужно указывать в ключе "<code>self</code>". Если такой опции нету, то названия прав доступа нужно указывать в ключе "<code>subitem</code>". Если требуется указать несколько прав доступа одновременно, то нужно их разделять используя вертикальную черту ("<code>|</code>"). В таком случае у пользователя будет проверяться наличие хотя бы одного из перечисленных прав. Если для выполнения события никакие права не нужны, то нужно указать "<code>true</code>" вместо строки с названиями прав. | Если в [[K4:Unit Configs|unit config]], в котором указан класс, содержащий обработчик события находиться опция [[K4:Unit Configs#SubItems|SubItems]], то названия прав доступа нужно указывать в ключе "<code>self</code>". Если такой опции нету, то названия прав доступа нужно указывать в ключе "<code>subitem</code>". Если требуется указать несколько прав доступа одновременно, то нужно их разделять используя вертикальную черту ("<code>|</code>"). В таком случае у пользователя будет проверяться наличие хотя бы одного из перечисленных прав. Если для выполнения события никакие права не нужны, то нужно указать "<code>true</code>" вместо строки с названиями прав. | ||
{{InfoBox|В методе <code>mapPermissions</code> запрещается использовать [[K4:Стиль программирования#Управляющие структуры|управляющие структуры]].}} | {{InfoBox|В методе <code>mapPermissions</code> запрещается использовать [[K4:Стиль программирования#Управляющие структуры|управляющие структуры]].}} | ||
+ | |||
+ | |||
+ | [[ru:{{FULLPAGENAME}}]] | ||
+ | [[eng:K4:Event Handlers]] |
Current revision
| ||
---|---|---|
Статьи в этой категории | ||
|
Обработчики событий позволяют выполнять действия на основании данных пользователя, попадающих в PHP через специальным образом сформированные запросы на сервер. Ниже приведены основные аспекты написания обработчиков событий, которые призваны помочь с минимальными усилиями написать требуемый обработчик события.
Contents |
Получение объекта, участника события
- Если известно, что ID объекта доступно в запросе пользователя, то нужно использовать следующий код:
$object =& $event->getObject();
Этот код не только получит объект, но и загрузит в него данные по ID найденному в запросе пользователя.
- Если про ID объекта ничего не известно, то нужно использовать следующий код:
$object =& $event->getObject( Array('skip_autoload' => true) );
Такой подход использован в событиях OnCreate
и OnUpdate
, т.к. в первом из них ID нету вообще, а втором может быть за раз передано более одного ID.
Получение данных из формы
Получить данные из формы (только в случае, если был использован POST запрос) можно использовав следующий код:
$items_info = $this->Application->GetVar( $event->getPrefixSpecial(true) );
Обработка данных из формы
- В случае, если передано только одно ID, то массив
$items_info
(см. пример Получение данных из формы) нужно использовать следующим образом:
if ($items_info) { list ($id, $field_values) = each($items_info); // обработка данных }
- В случае, когда из запроса могут быть получены данные сразу нескольких объектов, то нужно использовать следующий код:
if ($items_info) { foreach ($items_info as $id => $field_values) { // обработка данных } }
Указание шаблона для перенаправления
После успешного выполнения обработчика события автоматически происходит перенаправление на текущий шаблон (на Front-End) или на шаблон со списком, из которого был открыт данный шаблон (в Admin). Если требуется указать шаблон, отличный от шаблона подставляемого автоматически нужно использовать атрибут redirect
объекта $event
:
$event->redirect = 'template_name';
Название шаблонов для перенаправления не следует "зашивать" (hardcoded) в коде. Их лучше всего передавать из формы, в которой было вызвано событие. |
На данный момент механизм работы с всплывающими окнами (popups) построен таким образом, что значение атрибута redirect
будет проигнорировано. Независимо от этого на Front-End будет учитываться значение данного атрибута. Но надо отметить, что если будет нужно изменить шаблон для перенаправления у событий OnCreate
или OnUpdate
, то нужно перед присваиванием шаблона выполнить следующий код:
$event->SetRedirectParam('opener', 's');
Если используются другие обработчики событий, то этого делать не нужно.
Вызов нового события из обработчика событий
- Для вызова нового события с таким же префиксом, как у текущего события (откуда выполняется код) нужно написать следующий код:
$event->CallSubEvent('OnSampleEvent');
- Для вызова события у которого префикс отличается от текущего нужно написать следующий код:
$this->Application->HandleEvent( new kEvent('prefix.special:OnSampleEvent') );
Сопоставление прав доступа и обработчика события
Если пишется обработчик события, которое не описано в классе kDBEventHandler
, то права доступа, необходимые для выполнения данного события нужно указать в методе kEventHandler::mapPermissions
:
function mapPermissions() { parent::mapPermissions(); $permissions = Array ( 'OnSampleEvent' => Array ('self' => 'main_permissions', 'subitem' => 'subitem_permissions'), ); $this->permMapping = array_merge($this->permMapping, $permissions); }
Если в unit config, в котором указан класс, содержащий обработчик события находиться опция SubItems, то названия прав доступа нужно указывать в ключе "self
". Если такой опции нету, то названия прав доступа нужно указывать в ключе "subitem
". Если требуется указать несколько прав доступа одновременно, то нужно их разделять используя вертикальную черту ("|
"). В таком случае у пользователя будет проверяться наличие хотя бы одного из перечисленных прав. Если для выполнения события никакие права не нужны, то нужно указать "true
" вместо строки с названиями прав.
В методе mapPermissions запрещается использовать управляющие структуры.
|