Вы здесь

Замена $title без drupal_set_title

1

Добрый день.
Мне нужно на некоторых страницах заменить $title на его содержимое+моя разметка. При том, сам системный заголовок должен оставаться неизменным.

Поясню:
Есть страница с заголовком "Подарочный сертификат", но на самой странице он должен выводиться в таком виде:

Вот с такой разметкой:

<h1 class="ui icon bigheader header">
  <i class="gift icon"></i>
  <div class="content">
    Подарочный сертификат
    <div class="sub header">
      <div class="ui horizontal divider">
        Необычный подарок, который запомнится надолго
      </div>
    </div>
  </div>
</h1>

Сами данные вполне устроят в виде хардкода в теме.
Пробовал в таком виде:

function mytheme_page_alter($vars) {
  if ((arg(0)=='node') & (arg(1)=='5')) {
    $vars['node']->title['#prefix'] = 'моя разметка';
  }
}

И через mytheme_preprocess_page

Вариант с mytheme_page_alter добавляет префикс в массив, но не отображает его при выводе $title
Второй вариант с mytheme_preprocess_page вообще не добавлят в массив ничего.

Как же это сделать, неужели выпиливать $title из шаблона и выводить свою переменную?

Версия Drupal: 
7.x
Категория: 
Theming
Вопрос задан 30.09.2015 - 13:09

Ответы

1

Исходя из вопроса

function mytheme_page_alter($vars) {
  if ((arg(0)=='node') & (arg(1)=='5')) {
    $vars['node']->title['#prefix'] = 'моя разметка';
  }
}

Заменить заголовок нужна только для одного материала, а не для страницы.
Так что лучше использовать template_preprocess_node()

function template_preprocess_node(&$vars) {
  if ($variables['nid'] == 5) {
    $vars['title'] = 'new title';
  }
}
Ответ дан 30.09.2015 - 17:49
0
function hook_preprocess_page(&$vars) {
  $vars['title'] = 'new title';
}
Ответ дан 30.09.2015 - 13:26
Аватар пользователя xandeadx
xandeadx
1542

Так тоже пробовал.
В массиве есть, на странице нет.
Очистка кеша не помогла.

Комментарий оставлен 30.09.2015 - 13:33

Если хук не прописываю

function hook_preprocess_page(&$vars) {
  $vars['title'] = 'new title';
}

То в массиве $vars вообще нет title, есть только в $vars['node']->title

Комментарий оставлен 30.09.2015 - 13:37

Попробуйте использовать title_suffix в preprocess страницы.

function custom_preprocess_page(&$vars) {
  $vars['title_suffix'] = array('#markup' => 'asdf<b>dfddd</b>df');
}

Убедитесь, что в шаблоне страницы выводится $title_suffix как в теме bartik:

<?php print render($title_suffix); ?>
Комментарий оставлен 30.09.2015 - 14:07