我有几个。tpl.php 文件的节点,委员会的领域,并享有主题化。这些模板的文件有一个很大的逻辑,在他们周围的事物,条链接,创建新联系,等等。我的理解是,这是不好的发展并不是"推的方式"。

如果我理解正确的话,"推的方式",是使用预处理功能 template.php 文件操纵的变量和增加新的变量。几个问题:

  • 是否有一个命名的公约为创造一个预处理程序功能,用于一个特定的主题?例如,如果我有一个卖场模板所谓的 content-field-field_transmission_make_model.tpl, 怎么会我的名字预处理器?
  • 我可以使用预处理的模板功能节点模板,委场的模板,并视模板?他们有不同的方法的修改模板变量或增加新的?
有帮助吗?

解决方案

对于一般概述的,你应该 读了关于操纵内的变量进行预处理功能.


关于命名约定,这是通常很简单,但是有一个抓住你的前的实例(见下文):

一个预处理功能的需要签名

[yourModuleName|yourThemeName]_preprocess_[themeFunctionName](&$variables)

因此实现一个网页模板内的一个主题template.php 文件将会导致

themeName_preprocess_page(&$variables)

大多数时间主题的名称的功能将名*。tpl.php 文件,没有.tpl.php 结束和带有下划线,而不是连字符。 但是,有一个陷阱 如果该模板文件被选择的基础上 模板的建议, ,作为行预处理功能只是实现基名,未对另外的建议!(这些建议的备选模板文件中添加预处理功能自己。)

你的前例的那些情况下,作为 content-field-field_transmission_make_model.tpl.php 是这样的建议,与基的名字 content-field.tpl.php, 和相应的主题功能 content_field.所以你就必须实施一种预处理功能,名为 yourThemeName_preprocess_content_field(&$variables), 和内,检查的项目提供美元的变量列检查,如果你们实际上称为'field_transmission_make_model',而不是为一个完全不同的委员会的领域,例如:

function yourThemeName_preprocess_content_field(&$variables) {
  // Are we called for the right field?
  if ('field_transmission_make_model' == $variables['field_name']) {
    // Yes, add/manipulate entries within the variables array
    $variables['new_entry'] = 'A useless new variable';
    $variables['label'] = 'A useless change of the existing label variable';
  }
}

(注:未经测试的代码,小心打字错误)

在此之后,应该有一个新的变量 $new_entry 正在提供模板中的文件,内容 $label 变应该改变(所有顶级项内美元的变量列将变成独立的变量模板的文件,名字命名的阵列的索引)。


至于你的第二个问题,基本的使用情况进行预处理功能是相同的所有模板文件,但要注意:

  • 预处理职能仅适用于主题的呼吁,使用*.tpl.php 文件, 为主题的功能
  • 内容的变量列不同而变化很大,取决于什么主题
  • 其他模块中可能会实施的预处理功能,它们将被称为一个又一个,所以如果你想改变的东西,获得加入由另一个模块,你只能这样做,如果你执行被称为之后(这将在没问题你的情况,作为实现内的一个主题,是所谓的之后的所有内实现模块-只是想说,可以有许多实现在一旦)

其他提示

为了弄清楚我们的预处理的功能应该命名的,我们需要知道什么模板文件或主题功能的一些出来, 一个伟大的方式来做到这一点是通过使用 主题开 模块.

这里是一个视频其中解释了它在细节 http://buildamodule.com/video/drupal-theming-essentials-template-files-theme-function-overrides-and-preprocessing-functions-how-to-use-simple-preprocessing-functions

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top