12 实现hook_rules_file_info

作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com

这个其实是一个很小的问题了,我在阅读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.incbreadcrumb2.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目录下面,比如这里面有:

图片1.png 

清除缓存,一切正常。我们有关Rules的集成,也就介绍到这里。



Drupal版本: