我正在尝试在我的node.tpl.php中使用drupal_set_title但是我设置标题的文本只显示在$ head_title变量而不是$ title变量中。 $ title变量仍设置为节点的标题。
这是在Drupal 7中。我在Drupal 6中多次使用了drupal_set_title,它运行得很好。
答案 0 :(得分:5)
我认为这不起作用的原因是因为你从哪里调用它。 Drupal的模板系统通过构建变量(其中$title
为一个)并将它们传递给模板文件来工作。
当你到达node.tpl.php
$title
变量时,该变量仅在该文件的范围内可用,已经一成不变。因此,虽然调用drupal_set_title
可以更改$head_title
html.tpl.php
(后面称为node.tpl.php
,但它无法更改模板文件的变量从中调用代码。
您最好的选择是在主题template.php
中设置预处理功能,在处理模板文件之前设置标题:
function MYTHEME_preprocess_node(&$vars) {
drupal_set_title('A new title');
}
如果仍然无效,请尝试在同一预处理函数中明确设置$vars['title']
='新标题';`。
最好的选择是编写一个非常小的自定义模块,并在模板文件进入流程之前实现hook_node_view()
,这应该始终有效:
function MYMODULE_node_view($node, $view_mode, $lang_code) {
drupal_set_title('A new title');
}
答案 1 :(得分:2)
Clive让我指出正确的方向,但我无法使preprocess_node工作,所以我不得不使用preprocess_page。这是有效的代码:
function mycooltheme_preprocess_page(&$vars){
if (isset($vars['node']) && $vars['node']->type == 'news'){
drupal_set_title('News');
}
}