Создание своего event-a для Rules состоит из двух шагов — реализация hook_rules_event_info()
и вызов rules_invoke_event()
.
Пример события, которое возникает после смены имени пользователя:
/**
* Implements hook_rules_event_info().
*/
function modulename_rules_event_info() {
$items = array(
'user_name_changed' => array(
'label' => t('After changing user name'),
'group' => t('User'),
'variables' => array(
'user' => array(
'type' => 'user',
'label' => t('user'),
),
),
),
);
return $items;
}
/**
* Implements hook_entity_update().
*/
function modulename_entity_update($entity, $type) {
if ($type == 'user' && $entity->name != $entity->original->name) {
rules_invoke_event('user_name_changed', $entity);
}
}
Код следует помещать в файл MODULENAME.rules.inc
.
Написанное актуально для
Rules 2
Комментарии
Очень интересно. Возможно ли создать ивент на сабмит кастомной формы? Как передать аргументы?
По аналогии.
Спасибо!
Подскажите, пожалуйста, каков должен быть код функции объявления ивента, чтобы протащить туда node определенного типа со всеми его полями?
Мой код постоянно дает ошибки даже на этапе сохранения условия по типу материала, жалуется на:
Notice: Undefined property: RulesReactionRule::$type в функции RulesNodeConditionType->execute() (строка 55 в файле Z:\home\helpdeskpfr.local\www\sites\all\modules\rules\modules\node.eval.inc).
Хук ивента:
function hdrules_rules_event_info() {
$items = array(
'hdrules_ticket_close' => array(
'label' => 'Заявки: Закрытие заявки',
'group' => 'HDRules',
'variables' => array(
'node' => array(
'type' => 'node',
'label' => t('Ticket'),
),
),
),
);
return $items;
}
Хук правильный. Судя по ошибке, вы вместо ноды передаёте объект RulesNodeConditionType.
Так я еще до выполнения кода, до передачи объекта, получаю эту ошибку, на этапе создания правила.
Добавить комментарий