drupal_set_title не устанавливает переменную $ title - PullRequest
2 голосов
/ 10 января 2012

Я пытаюсь использовать drupal_set_title в моем node.tpl.php, но текст, для которого я устанавливаю заголовок, отображается только в переменной $ head_title, а не в переменной $ title.Переменная $ title по-прежнему установлена ​​на заголовок узла.

Это в Drupal 7. Я использовал drupal_set_title несколько раз, как это было в Drupal 6, и он работал отлично.

Ответы [ 2 ]

5 голосов
/ 11 января 2012

Я думаю, причина в том, что это не работает, в том, откуда вы звоните. Система шаблонов в 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');
}
2 голосов
/ 11 января 2012

Клайв указал мне правильное направление, но я не смог заставить preprocess_node работать, поэтому мне пришлось использовать preprocess_page.Вот код, который работает:

function mycooltheme_preprocess_page(&$vars){
    if (isset($vars['node']) && $vars['node']->type == 'news'){
        drupal_set_title('News');
    }
}
...