Создание пользовательских действий и событий используя rules api

03.05.2013
Share on FacebookShare on TwitterShare on GooglePlusShare on Linkedin
Автор:

Модуль rules позволяет веб разработчику выполнять нужные события (actions) после выполнения определенных действий (events). В его арсенале уже имеется список событий и действий, используя которые, можно создавать собственные правила. Однако бывают ситуации, когда они не подходят для реализации задуманного функционала. В этом случае можно создать собственный «экшн» или «ивент». Здесь мы рассмотрим, как реализуется функционал создания собственного действия и события. Итак, скачиваем и устанавливаем модуль Rules, которому предстоит обеспечить нас нужным API, и приступаем к реализации задуманного.

Создание собственного «экшина» начинается с объявления hook_rules_action_info(). Для этого желательно создать отдельный файл module.rules.inc, (module — имя вашего модуля), в который и будем помещать код. Для примера, давайте будем выводить некоторое сообщение пользователям с определенной ролью. Нам нужно будет передавать в функцию выполнения события роль пользователей, которым выводиться сообщение, и собственно текст самого сообщения. Начнем с реализации хука:

/**
 * Implements hook_rules_action_info().
 */
function internetdevels_rules_action_info() {
  $actions = array(
    'internetdevels_view_message' => array(
      'label' => t('View message for selected users'),
      'group' => t('My custom actions'),
      'parameter' => array(
        // To select a user role.
        'roles' => array(
          'type' => 'list',
          'label' => t('Roles'),
          'options list' => 'entity_metadata_user_roles',
          'description' => t('Select the roles whose users can view your message.'),
        ),
        // Messages that should appear after a particular action.
        'message' => array(
          'type' => 'text',
          'label' => t('Message'),
          'description' => t("The message body."),
        ),
      ),
    ),
  );
  return $actions;
}

Очищаем кэш для того, чтобы наш «экшн» появился в списке и мы могли его использовать. Также нужно добавить функцию, которая будет выполнять нужную нам операцию. Реализуем это:

/**
 * View message for selected roles.
 */
function internetdevels_view_message($roles, $message) {
  global $user;
  $roles_mg = array_intersect_key($user->roles, $roles);
  foreach ($roles_mg as $key => $value) {
    if (in_array($value, $user->roles)) {
      drupal_set_message($message);
    }
  }
}

Вот и все. Теперь можно создавать свое правило и добавлять созданное событие.

Далее создадим свой ​​«ивент». Рассмотрим пример, в котором будет выполняться «Экшн» после созданного нами действия, которое будет заключаться в удалении ноды с типом контента «article». Начинаем с объявления hook_rules_event_info(), которое также следует поместить в файл module.rules.inc.

/**
 * Implements hook_rules_event_info().
 */
function internetdevels_rules_event_info() {
  $events = array(
    'internetdevels_event_delete_node' => array(
      'label' => t('Deleting nodes a specific type of content'),
      'group' => t('My custom events'),
      'variables' => array(
        'node_type' => array(
          'label' => t('Node with with certain type.'),
          'type' => 'node',
          'skip save' => TRUE,
        ),
      ),
    ),
  );
  return $events;
}

Как это делалось и в предыдущем примере, очищаем кэш. А дальше hook_node_delete() будет проверять тип материала и выполнять нужное нам действие:

/**
 * Implements hook_node_delete().
 */
function internetdevels_node_delete($node) {
  if ($node->type == 'article') {
    rules_invoke_event('internetdevels_event_delete_node', $node);
  }
}

Наш "ивент" готов. Api модуля не ограничивается созданием только одних событий и действий. Посмотреть все возможные хуки и функции Rules можно здесь.

1 vote, Rating: 5
Share on FacebookShare on TwitterShare on GooglePlusShare on Linkedin

Также по теме

1

Для начала - несколько слов о библиотеке.
pChart – это набор классов для...

2

Подключение к разным базам необходимо в случаях экспорта и импорта данных. Рассмотрим три способа как справиться с такой ситуацией.

3

Сейчас iPhone и iPad, далее iГаджеты, уже давно перестали быть чем-то новым и необычным. У разработчиков, в связи с этим, прибавилось задач, связанных с реализацией...

4

При необходимости перенесения каких-либо изменений в базе с одного сайта на другой, переливание всей базы, как правило, является достаточно проблематичным, а иногда и...

5

С развитием социальных сетей заказчики все чаще хотят интегрировать сайт с Facebook, Twitter, Google+ и т. д. На одном из проектов нужно было реализовать...

Need a quote? Let's discuss the project

Are you looking for someone to help you with your Drupal Web Development needs? Let’s get in touch and discuss the requirements of your project. We would love to hear from you.

Join the people who have already subscribed!

Want to be aware of important and interesting things happening? We will inform you about new blog posts on Drupal development, design, QA testing and more, as well news about Drupal events.

No charge. Unsubscribe anytime