Drupal 7规则自定义操作将返回数据分配给替换模式

时间:2013-07-29 20:09:06

标签: drupal-7 action drupal-commerce drupal-rules

如何创建自定义规则操作,该操作会成功将值保存为替换模式以用于其他操作?

我从产品订单中检索产品展示信息时得到了很好的帮助here

正如我所说,链接的答案有很大帮助,但产品展示的返回路径数据以http://www.mysite/node/77格式返回。但是,我真的只需要数值,这样我就可以通过执行获取实体ID 操作来加载节点,提供数值并发布Product-Display节点等。

因此,我实现了一个自定义操作,该操作将采用产品显示URL(节点/ 77)并返回77。 我通过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标记设置为参数,还可以设置实体变量标签(显示NID)和值(display_nid)。 问题是当我在新创建的操作中检查 display_nid 时,该值为空。

我需要帮助找出如何成功保存我的实体值,以便我可以在以下操作中使用它。

1 个答案:

答案 0 :(得分:0)

在函数publish_product_display_node中,您是否可以验证您不需要返回$parts[0]而不是$[parts[1]

只是Drupal路径经常采用'node / 7'或'taxonomy / term / 6'的形式,如果你以'node /'作为分隔符进行爆炸,你只有一个值就是从节点0的索引开始......

所以,只是想知道这是否能解决你的问题......