drupal_set_title没有设置$ title变量

时间:2012-01-10 19:41:07

标签: php drupal drupal-7

我正在尝试在我的node.tpl.php中使用drupal_set_title但是我设置标题的文本只显示在$ head_title变量而不是$ title变量中。 $ title变量仍设置为节点的标题。

这是在Drupal 7中。我在Drupal 6中多次使用了drupal_set_title,它运行得很好。

2 个答案:

答案 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');
    }
}