Как передать конкретный аргумент из события правил в условие?


Я настраиваю правило по умолчанию для своего пользовательского модуля Drupal 7 следующим образом:

$rule->event('commerce_cart_product_add')
->condition(
  'mymodule_condition_1',
  array('something' => 'something_else'))
->action(
  'drupal_message',
  array(
    'message' => t('Example message'),
  ),
));

Я написал функцию mymodule_condition_1, которая возвращает значение TRUE или FALSE в зависимости от того, какой товар добавляется в корзину. Мне нужно иметь возможность получить продукт из события правил и передать его в условие. Я просмотрел всю документацию и примеры кода, но, похоже, не вижу способа сделать это.

В приведенном выше примере "что-то" и "something_else" должны быть конкретными значениями, но я не вижу, на что я могу сослаться, чтобы выяснить, какими они должны быть.

 1
Author: kiamlaluno, 2011-07-07

1 answers

В подобном случае вам придется использовать то, что Правила называют селектором данных. Если бы вы создавали это правило через пользовательский интерфейс, вы бы нажали кнопку "Переключиться на выбор данных" и ввели какой-нибудь токен, соответствующий типу требуемого параметра. В этом случае событие commerce_cart_product_add предоставляет аргументы commerce_order, commerce_product, количество, commerce_line_item и commerce_line_item_unchanged. (Смотрите Все это в определении события в commerce_cart.правила.inc.) Поэтому при попытке выбрать продукт, переданный событию через пользовательский интерфейс, вы должны использовать commerce-product в качестве значения параметра продукта вашего условия.

При создании этого правила в коде вы указываете селектор данных, добавляя: выберите после имени параметра вашего условия. Итак, если имя параметра продукта для вашего условия (как определено в hook_rules_condition_info()) равно commerce_product, ваше "что-то" будет commerce_product:select. То "something_value" будет тем же маркером, который вы введете через пользовательский интерфейс, commerce-product (так как это имя аргумента продукта, переданного в Правило).

И, касаясь еще одного аспекта, информация о событии определяет переменные, которые должны передаваться Правилам при вызове события. Ваше состояние может использовать любое, ни одно или все из них - на самом деле это не имеет значения. Определение условия или действия просто указывает, какие параметры ему нужны, а конфигурация правила отвечает за передача параметров в условие из пула доступных переменных (или из переменных, загружаемых как часть конфигурации).

 2
Author: Ryan Szrama, 2011-07-08 16:08:43