Drupal → Переместить заголовок страницы в блок content

03.10.2011

В семёрке контент является блоком, а его заголовок почему то отдельным элементом в page.tpl.php. Чтобы это исправить, нужно во первых, добавить в template.php:

/**
 * Реализация hook_preprocess_block().
 */
function [THEMENAME]_preprocess_block(&$vars) {
  if ($vars['block_html_id'] == 'block-system-main') {
    $vars['elements']['#block']->subject = drupal_get_title();
  }
}

а во вторых, удалить из page.tpl.php вывод переменной $title.

Написанное актуально для
Drupal 7
Похожие записи

Комментарии

Заголовок был отдельным элементом и во всех предыдущих версиях и это всегда меня удивляло. То есть контент ноды выводился в шаблоне node.tpl.php, а заголовок — в page.tpl.php. Причем никакого разумного объяснения этому не было. Видимо, несмотря на все глубокие изменения в 7-ке, разработчики не решились попутно исправить засевшие в коде несуразности.

в шестёрке в этом ещё был какой-то смысл — нода это лишь частный случай страницы, заголовки у другого типа контента ведь тоже надо выводить :) а в семёрке видимо об этом не задумывались, мол так привычнее

sergey885
09.02.2012, 16:09

извините, что немного не по теме, а как вывести $title внутри блока с использованием php фильтра?

Игорь
21.12.2012, 13:13

Хотел в одном месте, то есть в одной функции переопределить $head_title и $title
так нет, пришлось в две фукции влезать:

function [THEMENAME]_preprocess_html(&$variables) {
   // Изменить title cтраницы 
   $arg = arg();
  if( isset($arg[0]) && isset($arg[1]) && isset($arg[2]) ) {
    if($arg[0] == 'node' && $arg[1] == 'add' && $arg[2] == 'page' ) {
      $variables['head_title'] = 'Новый заголовок | '.$variables['head_title_array']['name'];
    }  
  }  
}

function [THEMENAME]_process_page(&$variables) {
  $arg = arg();
  if( isset($arg[0]) && isset($arg[1]) && isset($arg[2]) ) {
    if($arg[0] == 'node' && $arg[1] == 'add' && $arg[2] == 'page' ) {
      $variables['title'] = 'Новый заголовок';
    }  
  }
}

Может можно как то из [THEMENAME]_preprocess_html передать title в [THEMENAME]_process_page?
А то тут http://api.drupal.org/api/drupal/includes!theme.inc/function/template_process_page/7
её просто берут и из ничего создают

  if (!isset($variables['title'])) {
    $variables['title'] = drupal_get_title();
  }
Гость
15.08.2013, 07:53

Добрый день!

У меня данный способ не работает.

В Content ничего не появляется!

Подскажите в чем может быть проблема?

Гость
09.11.2015, 11:07

Спасибо! Все получилось, на конец-то!!!
А к предыдущему комментарию могу сказать что надо отключить модуль Exclude node title если устанавливал.
Странно что с 2013 года эта проблема еще актуальна!

Подскажите. Мне title надо поставить ниже некоторых элементов views. Но он всегда сверху. Попытки перемещать title в шаблонах views views-view-имя.tpl.php или связанного с ним шаблона типа материала page--тип.tpl.php успеха не принесли.

Решение данной статьи тоже не помогли. Как title сделать свободным для перемещений по странице для views ?

Гость
16.06.2018, 10:28

Спасибо большое за статью!
Есть одно но - у меня такой заголовок выводится через тег h2. Можно ли сделать его вывод через тег h1?

Добавить комментарий