You are here

3 template_preprocess_breadcrumb?

admin 的头像
Submitted by admin on 星期五, 2015-09-18 02:12

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

    我们前面忘记介绍了一点,就是什么时候改用template_preprocess_breadcrumb了,以前我们都是用的breadcrumb2_preprocess_breadcrumb,在调试breadcrumb.tpl.php无法在当前主题下面覆写的时候,我就把它改过来了。

    无论是使用breadcrumb2_preprocess_breadcrumb,还是使用template_preprocess_breadcrumb,在我们这里,作用都是一样的。为什么这里要把breadcrumb2这个前缀,改为template呢?

我是这样想的,在node.module文件里面,他们没有使用node_preprocess_node,而是使用的template_preprocess_node;同样,在block.module文件里面,用的是template_preprocess_blockDrupal核心是这样用的,所以我这里遵守了Drupal核心的习惯。

现在,我思考这个问题的时候,我又有了新的发现,如果我们这里面,使用breadcrumb2_preprocess_breadcrumb的话,如果存在这样的模块,比如abc,它也实现这个预处理函数abc_preprocess_breadcrumb,这个函数就会放到breadcrumb2_preprocess_breadcrumb前面执行。在breadcrumb2.module文件中,我们是为breadcrumb.tpl.php模板文件提供一些默认变量的,所以这里使用template打头,更方便其它模块的覆写。

我们这里介绍一下,预处理/处理函数的执行顺序。这里以breadcrumb.tpl.php为例:

 

1 template_preprocess(&$variables, $hook)这是系统默认的预处理函数。

2template_preprocess_breadcrumb(&$variables)breadcrumb2.moudle实现,为breadcrumb.tpl.php提供默认的变量。

3MODULE_preprocess(&$variables, $hook):调用所有模块上的 hook_preprocess()实现。

4) MODULE_preprocess_breadcrumb(&$variables)调用hook_preprocess_breadcrumb() ,这样允许其它模块可以修改breadcrumb.tpl.php的默认变量。

5) ENGINE_engine_preprocess(&$variables, $hook)允许主题引擎为所有的主题钩子设置变量。

6ENGINE_engine_preprocess_breadcrumb(&$variables)允许主题引擎为breadcrumb设置变量。

7THEME_preprocess(&$variables, $hook)允许主题为所有的主题钩子设置变量。

8THEME_preprocess_breadcrumb(&$variables)允许主题为breadcrumb设置变量

9template_process(&$variables, $hook):为所有的主题钩子添加一些附加变量。

10template_process_breadcrumb(&$variables)我们这里没有实现这个函数

11MODULE_process(&$variables, $hook):触发钩子hook_process() 

12MODULE_process_breadcrumb(&$variables):触发钩子 hook_process_HOOK() ,允许第三方模块为breadcrumb添加附加变量。

13ENGINE_engine_process(&$variables, $hook)允许主题引擎为所有主题钩子添加附加变量

14) ENGINE_engine_process_breadcrumb(&$variables)允许主题引擎为breadcrumb添加附加变量.

15) THEME_process(&$variables, $hook):  允许主题为所有主题钩子添加附加变量

16) THEME_process_breadcrumb(&$variables):  允许主题为breadcrumb添加附加变量

    

从这个执行顺序上面来看,由于breadcrumb2模块提供了breadcrumb.tpl.php,所以我们需要为breadcrumb.tpl.php提供默认变量。template_preprocess_breadcrumb在这里也就更合适一点。

    我们这里列的预处理函数比较多,实际上系统会把要执行的预处理函数、处理函数,缓存到主题注册表里面,这样在执行的时候,就不用去查找有多少个预处理函数需要执行了。

    如果,我们没有把theme_breadcrumb改造为模板文件的形式,此时的执行预处理函数,只有下面的四个函数,可被调用:

 

THEME_preprocess(&$variables, $hook)允许主题为所有的主题钩子设置变量。

THEME_preprocess_breadcrumb(&$variables)允许主题为breadcrumb设置变量

THEME_process(&$variables, $hook):  允许主题为所有主题钩子添加附加变量

THEME_process_breadcrumb(&$variables):  允许主题为breadcrumb添加附加变量

这样的好处就是,速度快,不需要调用太多的预处理函数。主题函数与模板文件相比,一个很大的优势,就是主题函数的速度快,大约快10倍左右。模板文件的优势时,方便不懂PHP的美工修改这个文件,开发时比较方便。


Drupal版本: