首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >drupal_set_title未设置$title变量

drupal_set_title未设置$title变量
EN

Stack Overflow用户
提问于 2012-01-11 03:41:07
回答 2查看 4.7K关注 0票数 2

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

这是在Drupal7中,我在Drupal6中多次使用过这样的drupal_set_title,它工作得很好。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-01-11 12:03:00

克莱夫给我指出了正确的方向,但我不能让preprocess_node工作,所以我不得不使用preprocess_page。下面是运行的代码:

代码语言:javascript
复制
function mycooltheme_preprocess_page(&$vars){
    if (isset($vars['node']) && $vars['node']->type == 'news'){
        drupal_set_title('News');
    }
}
票数 2
EN

Stack Overflow用户

发布于 2012-01-11 07:41:14

我认为这不起作用的原因是因为您调用它的位置。Drupal的模板系统通过构建变量( $title是其中之一)并将它们传递给模板文件来工作。

在执行node.tpl.php时,$title变量(仅在该文件的作用域中可用)已经被固定下来了。因此,虽然调用drupal_set_title可以更改html.tpl.php$head_title (在node.tpl.php之后调用),但它不能更改从中调用代码的模板文件的变量。

最好的办法是在主题的template.php中添加一个预处理函数,该函数在处理模板文件之前设置标题:

代码语言:javascript
复制
function MYTHEME_preprocess_node(&$vars) {
  drupal_set_title('A new title');
}

如果仍然不起作用,请尝试在相同的预处理函数中显式设置$vars['title'] = 'A new title';`。

最好的选择是编写一个非常小的自定义模块并实现hook_node_view(),它是在模板文件进入进程之前调用的,应该总是有效的:

代码语言:javascript
复制
function MYMODULE_node_view($node, $view_mode, $lang_code) {
  drupal_set_title('A new title');
}
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8809494

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档