Пользовательское действие правил Drupal 7 назначает возвращаемые данные шаблону замены

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

Я получил очень полезную помощь по извлечению информации о продукте из заказа на продукт.

Как я уже сказал, связанный ответ очень помог, но возвращенные данные пути для Product-Display возвращаются в http://www.mysite/node/77 формат. Однако мне действительно нужно только числовое значение, чтобы я мог загрузить узел, выполнив сущность Fetch, выполнив действие id, предоставив числовое значение и опубликовав узел Product-Display и т. Д.

Итак, я реализовал пользовательское действие, которое будет принимать URL-адрес отображения продукта (узел /77) и возвращать 77. Я скопировал объект Fetch по коду id и изменил его, чтобы возвращенное числовое значение можно было сохранить и использовать в других действиях. Код ниже:

function my_custom_action_info(){
   $actions['publish_product_display_node'] = array(
      'label' => t('Fetch product-display id'),
      'parameter' => array(
        'type' => array(
          'type' => 'uri',
          'label' => t('My Action'),
          'options list' => 'rules_entity_action_type_options2',
          'description' => t('Specifies the product-display url.'),
        ),
      ),
      'provides' => array(
        'entity_fetched' => array('type' => 'integer', 'label' => t('Fetched entity')),
      ),
      'group' => t('Entities'),
      'access callback' => 'rules_entity_action_access',
    );

    return $actions;
}

function publish_product_display_node($path = null){
    $parts = explode('node/', $path);
    return $parts[1];
}

function rules_entity_action_type_options2($element, $name = NULL) {
  // We allow calling this function with just the element name too. That way
  // we ease manual re-use.
  $name = is_object($element) ? $element->getElementName() : $element;
  return ($name == 'entity_create') ? rules_entity_type_options2('create') : rules_entity_type_options2();
}

function rules_entity_type_options2($key = NULL) {
  $info = entity_get_info();
  $types = array();
  foreach ($info as $type => $entity_info) {
    if (empty($entity_info['configuration']) && empty($entity_info['exportable'])) {
      if (!isset($key) || entity_type_supports($type, $key)) {
        $types[$type] = $entity_info['label'];
      }
    }
  }
  return $types;
}

function rules_action_entity_createfetch_access2(RulesAbstractPlugin $element) {
  $op = $element->getElementName() == 'entity_create' ? 'create' : 'view';
  return entity_access($op, $element->settings['type']);
}

Как я уже сказал, я скопировал измененный код, поэтому я не претендую на полное понимание всех функций, кроме publish_product_display_node.

Мои модификации кода работают так же, как установка токена Product-Display URL в качестве аргумента, а также установка метки переменной объекта (Display NID) и значения (display_nid). Проблема в том, что когда я проверяю display_nid во вновь создаваемых действиях, значение пусто.

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

1 ответ

В функции publish_product_display_nodeМожете ли вы подтвердить, что вам не нужно возвращаться $parts[0], вместо $[parts[1]?

Просто пути в Drupal часто имеют форму "узел /7" или "таксономия / термин /6", и если вы взорветесь с "узлом /" в качестве разделителя, у вас будет только одно значение, которое будет начинаться с индекса 0 для узлов...

Так что, просто интересно, решит ли это вашу проблему...

Другие вопросы по тегам