我知道主题和预处理功能之间的区别在于预处理是先前调用的,因此不限于单个主题。总是这样你只能用一个或另一个来实现主题任务吗?或者你有时也可以选择?
假设您可以选择使用其中任何一个,如果该网站只有1个主题,那么这两个选项的好处是什么?
答案 0 :(得分:1)
主题函数和预处理器是不同的动物,它们各自用于不同的目的。是否使用这些组件中的任何一个或两个取决于您要完成的任务,并且它们不是互斥的。有关Drupal表示层如何工作的更多信息,请访问https://www.drupal.org/node/933976和http://themery.com/dgd7。
如前所述,预处理器首先运行。它们用于操作某些渲染数组并设置要传递给模板或主题函数的所有变量。一些预处理器可能专注于菜单链接,其他预处理器可能专注于块,而其他预处理器可能专注于视图。例如,如果您不希望它出现在最终输出中,您可以使用theme_preprocess_menu_link()
函数从菜单链接中删除title
元素。
主题函数用于将呈现数组处理为HTML代码。它们与模板文件的用途相同,只是它们在PHP代码中完成所有工作,而不是在.tpl.php
文件中读取并将其与渲染数组合并以生成HTML。主题钩子和建议用于告诉Drupal如何使用模板文件或主题函数覆盖其默认主题以呈现内容。
这种设计让Drupal尽可能多地为预处理器和主题钩子分配处理和逻辑,这样主题函数或模板就可以专注于生成漂亮,干净的标记,而不必包含太多的代码和逻辑。它还使得设计合理的Drupal模块的输出能够与主题无关,其输出的最终外观可以适用于任何主题设计。
即使一个网站只有一个主题,预处理器,主题函数,主题钩子和模板仍然非常有用,并且在很多方面都是必需的。
答案 1 :(得分:0)
预处理功能用于设置将发送到主题功能或主题文件的变量
它们用于不同的目的,所以你不应该在它们之间做出选择
基本上...
预处理函数包含PHP,将变量添加到变量数组中
主题函数/文件输出HTML取决于从预处理函数传递给它的变量。