Вы здесь

Регион на странице

Регионы определяются в двух файлах: template.php и page.tpl.php. Для того, чтобы добавить свой регион нужно определить этот регион в первом файле и задать расположение этого региона во втором.

template.php

Функция определяющая регионы выглядит следующим образом:

<?php
function НАЗВАНИЕ-ТЕМЫ_regions() {
  return array(
      
'header' => t('header'),
      
'left' => t('left sidebar'),
      
'content' => t('content'),
      
'right' => t('right sidebar'),
      
'footer' => t('footer'),
  );
}
?>

Это классическая запись определяющая пять регионов, мы в эту запись добавим шестой регион. Наверное самый востребованный регион, который редко добавляют в темы которые можно загрузить с drupal.org — это регион позволяющий размещать блоки перед содержанием документа. Созданием такого региона мы и займёмся. Для этого добавим его описание аналогично существующим. Измененная запись будет выглядеть так:

<?php
function НАЗВАНИЕ-ТЕМЫ_regions() {
  return array(
      
'header' => t('header'),
      
'left' => t('left sidebar'),
      
'befor_content' => t('Перед содержанием'),
      
'content' => t('content'),
      
'right' => t('right sidebar'),
      
'footer' => t('footer'),
  );
}
?>

Снимок ниже показывает как эта запись будет выглядеть в файле template.php для темы Garland:

Регион на странице (Друпал 5)

Здесь мы просто добавили строку 'befor_content' => t('Перед содержанием'),, а в других строках заменили английские названия русскими. В левой части строк названия должны быть на английском и без пробелов, а справа можно писать как вам удобно. Эти правые названия на странице настройки блоков будут выглядеть следующим образом:

Регион на странице (Друпал 5)
Для того, чтобы использовать русские буквы в названиях, нужно предварительно перевести кодировку файла template.php в UTF-8. В редакторе Notepad++ для этого после открытия файла нужно выбрать меню Кодировки и в нём пункт Кодировать в UTF-8. Сделать это нужно до того, как вы стали писать на русском, если сделаете потом, то русский язык испортится.

Регион на странице (Друпал 5)

page.tpl.php

После того, как регион определён в файле template.php, этот регион нужно добавить в файл page.tpl.php. Так как нам нужно, чтобы блок показывался перед содержанием страницы, то нужно его вставить перед переменной $content, которая занимается выводом содержания документа. Для этого вставляем такой код:

<?php print $befor_content ?>

В стандартной теме Друпала Garland, переменная $content находится на 75 строчке. Снимок ниже показывает как эта запись будет выглядеть в файле page.tpl.php в этой теме (мы сдвинули переменную $content с 75 на 80 строчку, а перед ней вставили нашу $befor_content дав ей свой слой):

Регион на странице (Друпал 5)

Зачем помещать регион в отдельный слой? Чтобы этот регион потом было проще оформлять через файл style.css, например добавив в него строчку:

#becon {
  padding:10px;}

Примечание

Комментарии

Изображение пользователя Комментатор

Можно было бы здесь для наглядности дать скриншот результата.

Изображение пользователя Анонимно

Скриншот, возможно и не нужен, но блок <div> и переменную засунуть в if стоило бы. Bначе любуемся пустыми <div>...

Изображение пользователя Анонимно

Статья очень помогла нубу. :) Сенкс автору

Изображение пользователя drupal.org.ru

…но блок <div> и переменную засунуть в if стоило бы

+ показывать только в открытых документах :-)

<?php if ($befor_content && $node): print '<div id="becon">' . $befor_content . '</div>'; endif; ?>

Изображение пользователя Анонимно

Огромное человеческое спасибо!!!

Изображение пользователя Анонимно

Спасибо большое за статью, прекрасная работа.

Изображение пользователя Вячеслав

не, ну вообще круто, почему то на drupal.ru не нашел, здесь обнаружил прямо кладезь полейзной информации! Вообще начинаю осознавать возможности регионов и блоков (разных) для разных разделов сайта.

Изображение пользователя Анонимно

Хм... А у меня после добавления региона появляются проблемы (тема "andreas09"). При входе на сайт, после введения логина и пароля отображается пустая страница. Если обновить страницу, вход на сайт выполняется, но все блоки меняют своё расположение. В настройках блоков при выборе региона новый отображается...

После сохранения каких-либо изменений на странице настройки блоков также отображается пустая страница. Версия Drupal 5.10. Может кто сталкивался с такой проблемой?

Изображение пользователя CMSuser

А для 6-й версии этот метод подходит?

Изображение пользователя Тимур

А как сделать чтоб этот регион выходил только на главной.. например на сайте регион в котором список новостей он нужен только на главной, а не на всех страницах
Спасибо.

Изображение пользователя Анонимно

В page.tpl.php есть переменная $is_front.

<?php if ($is_front): ?>
  <div class="КЛАСС"><?php print $РЕГИОН; ?></div>
<?php endif; ?>

Или шаблон page-front.tpl.php, который используется только для первой страницы.

Изображение пользователя Анонимно

опасаюсь конечно что тема не поддерживается но все же напишу.
ситуация следующая есть шаблон и от него не уйти, у него есть основное меню которое нельзя заменить другими блоками, его можно либо убрать сосвсем или дополнять через меню-примари линк
Так вот задача. сделать так чтобы на его место я мог поставить любой нужный мне блок в таком же визуальном сопроваждении и как штатный. на сколько я уже начал понимать все это дело проще решить через регионы. НО~ у меня с этим проблемы.
для инфы
файл theme.info содержит
regions[left] = Left sidebar
regions[right] = Right sidebar
regions[content] = content
regions[footer] = Footer
regions[custom] = Custom
page.tpl.php
зона которая отвечает за меню

<?php
 
if (isset($primary_links)) :
?>

<?php
 
print theme('links', $primary_links, array('class' => 'links primary-links'))
?>

<?php
 
endif;
?>

понимаю что надо чтото типа такого:
regions[glavmenu] = novoeglavnoemenu
page.tpl.php
зона, которая отвечает за меню
<?php
 
print $glavmenu;
?>

на выходе сделал так

<?php
 
if (isset($primary_links)) :
?>

<?php
 
print $glavmenu;
?>

<?php
 
endif;
?>

может и не правильно