Створення користувацьких дій та подій використовуючи rules api.

03.05.2013
Creating of custom actions and events using rules api
Автор:

Модуль 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<integer>',
          '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 можна тут.

2 votes, Рейтинг: 5

Також по темі

1

Для початку кілька слів про бібліотеку. pChart – це набір класів для побудови графіків, діаграм і т.п. в php. 

2

Наша компанія дуже часто використовує модуль Panels при створенні сайтів. Хоча це рішення додає чимало...

3

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

4

Бувають випадки, коли потрібно перенести якісь зміни в базі з одного сайту на інший, а переливати всю базу процес досить проблематичний, а інколи неможливий в силу появи на ньому нових матеріалів...

5

В статті буде розповідатись про те, як швидко налаштувати модуль Search API та...

Subscribe to our blog updates