xandeadx.ru Блог музицирующего веб-девелопера

Drupal → Собственное событие для Rules

Опубликовано в

Создание своего 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.

Собственный condition для Rules

Написанное актуально для Rules 2
Похожие записи

Комментарии RSS

Очень интересно. Возможно ли создать ивент на сабмит кастомной формы? Как передать аргументы?

По аналогии.

Спасибо!
Подскажите, пожалуйста, каков должен быть код функции объявления ивента, чтобы протащить туда 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.

Так я еще до выполнения кода, до передачи объекта, получаю эту ошибку, на этапе создания правила.

Оставить комментарий

Содержимое этого поля является приватным и не будет отображаться публично. Если у вас есть аккаунт в Gravatar, привязанный к этому e-mail адресу, то он будет использован для отображения аватара.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступные HTML теги: <a> <i> <b> <strong> <code> <ul> <ol> <li> <blockquote> <em> <s>
  • Строки и параграфы переносятся автоматически.
  • Подсветка кода осуществляется с помощью тегов: <code>, <css>, <html>, <ini>, <javascript>, <sql>, <php>. Поддерживаемые стили выделения кода: <foo>, [foo].

Подробнее о форматировании