Rules позволяет создавать правила, которые будут срабатывать после выполнения конкретных условий, которые заданы в адмике. Компоненты очень важная часть Rules. Они позволяют группировать большое количество правил, условий или действий в один компонент. Для создания своего компонента, нам потребуется сам Rules, который предоставит API.
Создание компонента начинаем с того, что создаем файл с названием example.rules_defaults.inc. В этом файле имплеменируем хук hook_default_rules_configuration():
<?php
/**
* @file
* Default rule configurations.
*/
/**
* Implements hook_default_rules_configuration().
*/
function example_default_rules_configuration() {
$rules = array();
// Создаем компонент "Набор действий", в функцию rules_action_set() мы передаем первым параметором массив
// доступных переменных этому компоненту.
$rule = rules_action_set(array('commerce_order' => array(
'type' => 'commerce_order', // Тип переменной, в данном случае это сущность commerce_order.
'label' => t('Commerce order'), // Название переменной.
)));
$rule->label = t('Example title'); // Название компонента.
$rule->tags = array('Commerce Checkout'); // Категория, в которой будет находится компонент.
$rule->active = TRUE;
// Устанавливаем действие, в данном примере "Отправить email".
$rule->action('mail', array(
'to:select' => 'site:mail', // Email получателя.
'subject' => t('Example subject on site [site:name]'), // Тема.
'message' => t('Example message.'), // Сообщение.
'from' => '', // Email отправителя, если пустое, будет использован email сайта по умолчанию.
));
// Добавляем компонент в массив, в котором ключ - это машинное имя компонента, которое будет использована при его сохранении.
$rules['example_send_message_to_admin'] = $rule;
return $rules;
}
Если необходимо внутри своего модуля программно запустить компонент, используем функцию rules_invoke_component():
// Первым параметром передаем машинное имя компонента, все последующие параметры - это переменные, которые принимает компонент.
rules_invoke_component('example_send_message_to_admin', $order);