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

Drupal 7 Drupal 7规则自定义操作将返回数据分配给替换模式,drupal-7,action,drupal-commerce,drupal-rules,Drupal 7,Action,Drupal Commerce,Drupal Rules,如何创建一个自定义规则操作,该操作将成功地将值保存为替换模式,以便在其他操作中使用? 在从产品订单检索产品显示信息方面,我得到了一些非常好的帮助 正如我所说,链接的答案帮助很大,但是产品显示返回的路径数据返回到http://www.mysite/node/77格式。但是,我实际上只需要数值,这样我就可以通过执行按id获取实体操作来加载节点,提供数值并发布产品显示节点等 因此,我实现了一个自定义操作,它将获取产品显示URL(node/77)并返回77。 我复制了id获取实体的代码,并对其进行了修改

如何创建一个自定义规则操作,该操作将成功地将值保存为替换模式,以便在其他操作中使用?

在从产品订单检索产品显示信息方面,我得到了一些非常好的帮助

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

因此,我实现了一个自定义操作,它将获取产品显示URL(node/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']);
}
正如我所说,我复制了修改后的代码,因此我并不声称自己完全理解了除发布、产品、显示节点之外的所有功能

我的代码修改的工作范围包括将产品显示URL标记设置为参数,以及设置实体变量标签(Display NID)和值(Display_NID)。 问题是,当我在新创建的操作中选中“显示”时,该值为空


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

在功能
发布\u产品\u显示\u节点
中,您是否可以验证不需要返回
$parts[0]
,而不是
$[parts[1]

只是Drupal路径的格式通常为“node/7”或“taxonomy/term/6”,如果以“node/”作为分隔符进行分解,那么对于节点,只有一个从索引0开始的值


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

你好,Boriana。我明白你的意思。$parts[1]是以前代码的遗留内容,您是对的,它应该是索引0。我将尽快对此进行调查,并返回youHi Boriana,我查看了我的代码,并使用完整的URL格式更新了我的问题。完整的URL格式为:。因此,$parts[1]实际上是正确的。而且,即使我从代码中返回了一个静态数字,我仍然无法在规则操作中获得该数字