如何创建一个自定义规则操作,它将成功保存一个值作为替换模式以用于其他操作?
在从产品订单中检索产品显示信息方面,我得到了一些非常好的帮助。
正如我所说,链接的答案有很大帮助,但 Product-Display 返回的路径数据以http://www.mysite/node/77
格式返回。但是,我真的只需要数值,因此我可以通过提供数值并发布 Product-Display 节点等的 id 操作执行 Fetch 实体来加载节点。
因此,我实现了一个自定义操作,它将采用产品显示 URL(节点/77)并返回 77。我通过 id代码复制了 Fetch 实体并对其进行了修改,以便可以保存我返回的数值并在其他操作中使用。代码如下:
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时,该值为空。
我需要帮助弄清楚如何成功保存我的实体值,以便我可以在以下操作中使用它。