首页 / 帖子
请问theme中的[themeName]_preprocess 与[themeName]_process函数有什么区别?
3个答案
Amanda Song
发布于:2014-04-16 14:40

最简单的理解就是调用的次序不用,_prepro...的在前,_pro...的在后。

共同点就是都会对页面输出产生影响。

在实际应用当中,可能是需求原因吧,我基本上都是使用_pre...

刘伯彪
发布于:2014-04-16 15:14

幽灵说的对,就是执行顺序的差别。

我也一般在开发中也不用hook_process,大多只用hook_preprocess来处理和修改变量。

也可以参考这里有Drupal官方网站上的theme函数的执行顺序,详细说了drupal的各个函数的执行以及处理方式。

https://api.drupal.org/api/drupal/includes%21theme.inc/function/theme/7



PS:不过drupal的theme这些函数确实挺多的,比较难以理解。个人建议还是简单的处理比较好,不要用太多process函数,因为每一个theme函数都会调用这个,其一效率低下,其二逻辑处理程序到处飞,维护和修改都是很大的麻烦。

个人建议,仅供参考!

刘伯彪
发布于:2014-04-16 21:58

用途不同

preprocess目的是向variables里添加或修改变量

process目的是对variables变量做处理,从而得出新的变量


比如通过preprocess,各个模块可以添加自己class到classes_array,然后通过process将classes_array处理成classes


从核心的执行流程上看


process在preprocess之后执行,所以有机会在所有模块执行了preprocess之后对$variables做一些操作。


思路上和hook然后再hook_alter是类似的。