Warning: Undefined array key "HTTPS" in include() (line 29 of /opt/www/fdv2/drupal.stage/web/sites/default/settings.local.php).
include('/opt/www/fdv2/drupal.stage/web/sites/default/settings.local.php') (Line: 4)
require('/opt/www/fdv2/drupal.stage/web/sites/drupal001.net/settings.php') (Line: 145)
Drupal\Core\Site\Settings::initialize('/opt/www/fdv2/drupal.stage/web', 'sites/drupal001.net', Object) (Line: 1099)
Drupal\Core\DrupalKernel->initializeSettings(Object) (Line: 701)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
请问theme中的[themeName]_preprocess 与[themeName]_process函数有什么区别? - Drupal大学 - Drupal问答论坛
首页 / 帖子
请问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是类似的。