对于一般概述,您应该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 数组中的所有顶级条目都将转换为单独的变量用于模板文件,以数组索引命名)。
关于你的第二个问题,预处理函数的基本用法对于所有模板文件都是一样的,但要注意:
- 预处理函数仅适用于使用 *.tpl.php 文件的主题调用,不适用于主题函数
- $variables 数组的内容差异很大,具体取决于主题化的内容
- 其他模块也可能实现预处理函数,它们会被一个接一个地调用,所以如果你想改变被另一个模块添加的东西,你只能在你的实现被调用之后才这样做(这在您的情况下不会有问题,因为在模块内的所有实现之后调用主题内的实现 - 只是想提一下,一次可以有许多实现)