对于 Drupal 主题化,您是否必须在预处理和主题功能之间进行选择?
For Drupal theming do you ever have to choose between a preprocess and theme function?
我知道主题和预处理函数之间的区别在于预处理调用较早,因此不限于单个主题。您是否总是只能使用一个或另一个来完成主题任务?还是您有时可以选择两者之一?
假设您可以选择使用其中任何一种,如果网站只有一个主题,那么这两种选择的好处是什么?
预处理函数用于设置将发送到主题函数或主题文件的变量。
它们用于不同的目的,因此您不应该在它们之间进行选择。
基本上...
预处理函数包含PHP,向变量数组添加变量。
主题 functions/files 输出 HTML 取决于从预处理函数传递给它的变量。
主题函数和预处理器是不同的动物,它们各有不同的用途。是否使用这两个组件中的一个或两个取决于您要实现的目标,并且它们并不相互排斥。有关 Drupal 的表示层如何工作的更多信息,请访问 https://www.drupal.org/node/933976 and http://themery.com/dgd7。
如您所述,预处理器首先执行 运行。它们用于操作某些渲染数组并设置要传递给模板或主题函数的所有变量。一些预处理器可能专注于菜单 links,其他人可能专注于块,还有一些可能专注于视图。例如,如果您不希望它出现在最终输出中,您可以使用 theme_preprocess_menu_link()
函数从菜单 link 中删除 title
元素。
主题函数用于将渲染数组处理为 HTML 代码。它们与模板文件的用途相同,只是它们在 PHP 代码中完成所有工作,而不是读取 .tpl.php
文件并将其与渲染数组合并以生成 HTML。主题挂钩和建议用于告诉 Drupal 如何使用模板文件或主题函数来覆盖其默认主题以呈现某些内容。
这种设计让 Drupal 将尽可能多的处理和逻辑分配给预处理器和主题挂钩,这样主题功能或模板就可以专注于生成漂亮、干净的标记,而不必包含太多代码和逻辑.它还使 properly-designed Drupal 模块的输出成为 theme-agnostic,输出的最终外观可以适应任何主题设计。
即使一个站点只有一个主题,预处理器、主题函数、主题挂钩和模板仍然非常有用,并且对于许多用途来说都是必需的。
我知道主题和预处理函数之间的区别在于预处理调用较早,因此不限于单个主题。您是否总是只能使用一个或另一个来完成主题任务?还是您有时可以选择两者之一?
假设您可以选择使用其中任何一种,如果网站只有一个主题,那么这两种选择的好处是什么?
预处理函数用于设置将发送到主题函数或主题文件的变量。
它们用于不同的目的,因此您不应该在它们之间进行选择。
基本上...
预处理函数包含PHP,向变量数组添加变量。
主题 functions/files 输出 HTML 取决于从预处理函数传递给它的变量。
主题函数和预处理器是不同的动物,它们各有不同的用途。是否使用这两个组件中的一个或两个取决于您要实现的目标,并且它们并不相互排斥。有关 Drupal 的表示层如何工作的更多信息,请访问 https://www.drupal.org/node/933976 and http://themery.com/dgd7。
如您所述,预处理器首先执行 运行。它们用于操作某些渲染数组并设置要传递给模板或主题函数的所有变量。一些预处理器可能专注于菜单 links,其他人可能专注于块,还有一些可能专注于视图。例如,如果您不希望它出现在最终输出中,您可以使用 theme_preprocess_menu_link()
函数从菜单 link 中删除 title
元素。
主题函数用于将渲染数组处理为 HTML 代码。它们与模板文件的用途相同,只是它们在 PHP 代码中完成所有工作,而不是读取 .tpl.php
文件并将其与渲染数组合并以生成 HTML。主题挂钩和建议用于告诉 Drupal 如何使用模板文件或主题函数来覆盖其默认主题以呈现某些内容。
这种设计让 Drupal 将尽可能多的处理和逻辑分配给预处理器和主题挂钩,这样主题功能或模板就可以专注于生成漂亮、干净的标记,而不必包含太多代码和逻辑.它还使 properly-designed Drupal 模块的输出成为 theme-agnostic,输出的最终外观可以适应任何主题设计。
即使一个站点只有一个主题,预处理器、主题函数、主题挂钩和模板仍然非常有用,并且对于许多用途来说都是必需的。