作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com
现在我们开始编写代码了,因为现有的功能已经满足不了我们的需求了。在breadcrumb2目录下,创建文件breadcrumb2.rules.inc,向里面添加以下代码:
<?php
/**
* @file
* Rules integration for breadcrumb2.
*
* @addtogroup rules
* @{
*/
/**
* Implements hook_rules_action_info().
*/
function breadcrumb2_rules_action_info() {
$items = array();
$items['breadcrumb2_append_breadcrumb_trail'] = array(
'label' => t('Append breadcrumb trail'),
'group' => t('Breadcrumb2'),
'parameter' => array(
'breadcrumb' => array(
'type' => 'breadcrumb2',
'label' => t('Breadcrumb'),
'description' => t('The breadcrumb object who will be appended.'),
'wrapped' => TRUE,
'save' => FALSE,
),
'title' => array(
'type' => 'text',
'label' => t('title'),
'wrapped' => FALSE,
),
'url' => array(
'type' => 'text',
'label' => t('URL'),
'wrapped' => FALSE,
),
),
'base' => 'breadcrumb2_rules_append_breadcrumb_trail',
'access callback' => 'breadcrumb2_rules_integration_access',
);
return $items;
}
我们在这里实现了hook_rules_action_info,通过这个钩子函数,我们就可以为Rules添加我们自己的自定义动作了。在这个钩子的里面,是有关动作的一个数组。一个hook_rules_action_info钩子函数里面可以添加多个动作,注意这里的$items是复数形式。在这里面,我们定义了一个新的动作breadcrumb2_append_breadcrumb_trail,它里面包含以下键:
'label':动作的标签。
'group':动作所属的组。
'parameter':向这个动作传递的参数。这里面包含三个参数:'breadcrumb'、'title'、'url',这里的'breadcrumb'就是面包屑对象,我们要向它上面追加链接,'title'、'url'则是链接的两个组成部分。
'base':用来定义这个动作的具体逻辑。
'access callback':这个动作的访问控制函数。
这里面还需要注意的是,向动作传递的参数也是一个数组,包含以下键:
'type' :参数的类型,Rules的类型验证会用到它。
'label' :参数的标签。
'description':参数的描述。
'wrapped':对象是否封装。这里的封装,就是是否使用entity_metadata_wrapper给封装一下。我开始的时候,不知道这个参数的含义,后来了解了entity_metadata_wrapper,才明白了这里的用法。
'save' :是否保存当前对象。