Вы здесь

Как изменить заголовок ноды?

0

Подскажите как вывести содержимое поля в заголовок ноды?

function THEME_preprocess_node(&$variables, $hook) {
   $variables['title'] = 'text';
}

Работает, но меняет только в node.tpl.php и выводит в тизере.

Есть вариант менять еще и в _preprocess_page

function THEME_preprocess_page(&$variables, $hook) {
   $variables['title'] = 'text';
}

Но может есть способ сделать это в одном месте? Про модули page_title и auto_nodetitle я в курсе, но нужно именно вывести поля в тему не меняя при этом заголовок.

Версия Drupal: 
7.x
Категория: 
Theming
Связанные проекты: 
Automatic NodetitlesPage TitleZen
Вопрос задан 10.02.2015 - 20:42

Ответы

1
function hook_node_view($node, $view_mode, $langcode) {
//тут и меняй тайтл. Он подсосётся на любых страницах, вьюсах(если тянешь вью моды) и т.д.
}
Ответ дан 11.02.2015 - 08:41

Прекрасно, то что нужно. Аналога для использования в теме нет?

function MODULE_node_view($node, $view_mode, $langcode) {
   if ( ($node->type == 'NODE_TYPE') && ( ( $view_mode == 'full' ) || ( $view_mode == 'teaser' ) ) ) {
      $node->title = 'text';
      drupal_set_title($node->title);
   }
}
Комментарий оставлен 11.02.2015 - 09:45
1

Какой то странный вопрос. У тебя тайтлы выводятся в page.tpl.php и node.tpl.php, значит и менять их нужно в данных препроцессах. Вроде и так все ясно.

Ответ дан 10.02.2015 - 20:57
Аватар пользователя drupby
drupby
456

Перед тем как _preprocess_page для ноды должно выполниться _preprocess_node в котором уже поменянный title или я не прав?

Комментарий оставлен 10.02.2015 - 21:31

препроцесс page будет примерно таким

function MYTHEME_preprocess_page(&$vars) {
  if (!empty($vars['node'])) {
    // Здесь формируешь $variables['title']
  }
}
Комментарий оставлен 10.02.2015 - 21:32

Ну это понятно, но вопрос в том почему в него не передается нода уже обработанная в preprocess_node?

Комментарий оставлен 10.02.2015 - 21:40

но вопрос в том почему в него не передается нода уже обработанная в preprocess_node?

Вопрос в том зачем обрабатывать/изменять ноду в препроцессе?

Комментарий оставлен 10.02.2015 - 21:45

А почему нет? Если там уже поменяно $variables['title']?

Комментарий оставлен 10.02.2015 - 21:59

Если там уже поменяно $variables['title']?

Вот точно так же и меняй $variables['title'] в препроцесс page

Комментарий оставлен 10.02.2015 - 22:07

Мы вошли в рекурсию (:

Не мы, а ты. Тебе нужно поменять в препроцессе ноды заголовок, который выводиться не на странице вывода ноды, и нужно поменять заголовок в препроцессе page для страницы ноды. Поэтому я никак не могу понять, что ты хочешь совместить?
Возьми для примера главную страницу, на которой выводится 10 нод, так вот для главной тебе не нужно менять title для page, зато у тебя вызывается 10 раз preprocess_node для каждой ноды и каждый раз со своими данными. Так вот, что ты собрался передавать из десяти препроцессов ноды в один preprocess_page, в котором собственно ничего и не нужно менять?

Комментарий оставлен 10.02.2015 - 22:31

так вот для главной тебе не нужно менять title для page

Да, но в режиме просмотра ноды ($view_mode == 'full') в заголовок страницы попадает именно title ноды.

Я не могу понять почему если сделать в _preprocess_node например так:

   $variables['content']['mycontent'] = array(
      '#markup' => 'My node content', 
      '#weight' => 10, 
    );

То оно отобразится 10 раз на главной и на странице просмотра ноды, а title на этой странице почему-то опять выглядит как если бы в _preprocess_node с ним не сделали ничего...

Комментарий оставлен 10.02.2015 - 22:53

а title на этой странице почему-то опять выглядит как если бы в _preprocess_node с ним не сделали ничего...

да потому что на странице ноды выводиться title из page, который нужно формировать в preprocess_page

Комментарий оставлен 10.02.2015 - 23:09

Страницы