这个其实是一个很小的问题了,我在阅读rules的相关代码的时候,注意到,很多地方实现了这个钩子。此外部分第三方模块也实现了这个钩子函数,比如views_rules这个模块,它是这样实现的:
/**
* Implements hook_rules_file_info().
*/
function views_rules_rules_file_info() {
return array(
'rules/views_rules.action',
'rules/views_rules.ui',
);
}
这个钩子函数的作用,就是可以将mymodule.rules.inc文件拆分成多个文件,就是说,当加载了.rules.inc文件的时候,就会触发对应的hook_rules_file_info钩子函数,根据钩子函数里面的定义,加载对应的文件。这样一来,mymodule.rules.inc可以只放rules的钩子实现,可以将其函数,比如动作的逻辑处理函数,条件的逻辑处理函数,放到单独的文件中。
Breadcrumb2模块,现在我们只实现了一种方式,按照分类术语生成面包屑,将来生成面包屑的方式可能还会有很多,比如按照菜单、按照book导航的结构。也就是说,可能需要创建更多的动作,和条件。为了将来的扩展性,我们这里也实现了hook_rules_file_info。将我们的实现,放到breadcrumb2_rules_condition_info函数的上面。
/**
* Implements hook_rules_file_info().
*/
function breadcrumb2_rules_file_info() {
return array(
'rules/breadcrumb2.taxonomy',
'rules/breadcrumb2.eval',
);
}
接着,我们先创建文件夹rules,然后在里面创建文件breadcrumb2.taxonomy.inc和breadcrumb2.eval.inc。
在breadcrumb2.taxonomy.inc文件中,我们放置函数:
breadcrumb2_rules_fetch_lightest_term_from_node,
breadcrumb2_rules_taxonomy_get_parents_all,
breadcrumb2_node_get_lightest_term,
breadcrumb2_node_get_terms
在breadcrumb2.eval.inc文件中,我们放置函数:
breadcrumb2_rules_breadcrumb_exist,
breadcrumb2_rules_append_breadcrumb_trail
这些函数都是从breadcrumb2.rules.inc文件中剪切过来的。注意这里的eval,它的含义是“计算”的意思,在rules的核心代码里面,都是这样用的。比如在rules\modules目录下面,比如这里面有:
清除缓存,一切正常。我们有关Rules的集成,也就介绍到这里。