我怎么使用主题处理器的功能对于我自己的模板?
-
24-09-2019 - |
题
我有几个。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 文件, 不 为主题的功能
- 内容的变量列不同而变化很大,取决于什么主题
- 其他模块中可能会实施的预处理功能,它们将被称为一个又一个,所以如果你想改变的东西,获得加入由另一个模块,你只能这样做,如果你执行被称为之后(这将在没问题你的情况,作为实现内的一个主题,是所谓的之后的所有内实现模块-只是想说,可以有许多实现在一旦)
其他提示
为了弄清楚我们的预处理的功能应该命名的,我们需要知道什么模板文件或主题功能的一些出来, 一个伟大的方式来做到这一点是通过使用 主题开 模块.