jer*_*son 36 preprocessor drupal drupal-6 drupal-theming
我有几个节点,CCK字段和视图主题的.tpl.php文件.这些模板文件中有很多逻辑可以移动,剥离链接,创建新链接等等.我知道这是糟糕的开发而不是"Drupal Way".
如果我理解正确,"Drupal Way"是在template.php文件中使用预处理器函数来操作变量并添加新变量.关于这个问题:
content-field-field_transmission_make_model.tpl,我该如何命名预处理器函数?Hen*_*pel 56
总体而言,您应该阅读在预处理函数中操作变量.
关于命名约定,这通常很简单,但是你的当前示例有一个问题(见下文):
需要预处理函数签名
[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),并在其中检查$ 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';
}
}
Run Code Online (Sandbox Code Playgroud)
(注意:未经测试的代码,谨防拼写错误)
在此之后,$new_entry模板文件中应该有一个新变量,并且$label变量的内容应该已经更改($ variables数组中的所有顶级条目将变为模板文件的单独变量,以数组命名指数).
至于你的第二个问题,预处理函数的基本用法对于所有模板文件都是相同的,但要注意: