我有几个用于节点、CCK 字段和 View 主题的 .tpl.php 文件。这些模板文件中有很多逻辑可以移动、删除链接、创建新链接等。我知道这是不好的开发,而不是“Drupal 方式”。
如果我理解正确,“Drupal 方式”是在您的 template.php
中使用预处理器函数。文件来操作变量和添加新变量。关于这个的几个问题:
content-field-field_transmission_make_model.tpl
的 CCK 字段模板,我将如何命名预处理器函数? 最佳答案
对于一般概述,您应该 read up on manipulating variables within preprocess functions .
关于命名约定,这通常很简单,但是您当前的示例有一个问题(见下文):
预处理函数签名需要是[yourModuleName|yourThemeName]_preprocess_[themeFunctionName](&$variables)
因此在主题 template.php 文件中为页面模板实现一个将导致themeName_preprocess_page(&$variables)
大多数情况下,主题函数的名称将是 *.tpl.php 文件的名称,没有 .tpl.php 结尾并且带有下划线而不是连字符。 但是有一个问题 如果模板文件在 template suggestions 的基础上被选中,因为预处理功能只能针对基础名称实现,不能针对附加建议! (替代模板文件的建议已添加到预处理函数本身中。)
您当前的示例是其中一种情况,如 content-field-field_transmission_make_model.tpl.php
是这样的建议,基本名称是content-field.tpl.php
,对应的主题函数为content_field
.所以你必须实现一个名为 yourThemeName_preprocess_content_field(&$variables)
的预处理函数。 , 并在其中检查 $variables 数组中的可用条目,以检查您是否真的被称为“field_transmission_make_model”,而不是完全不同的 CCK 字段,例如:
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
的内容变量应该已更改($variables 数组中的所有顶级条目都将转换为模板文件的单独变量,以数组索引命名)。至于您的第二个问题,预处理函数的基本用法对于所有模板文件都是相同的,但请注意:
关于drupal - 如何为自己的模板使用主题预处理器功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2383865/