Регионы определяются в двух файлах: template.php и page.tpl.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:
Здесь мы просто добавили строку 'befor_content' => t('Перед содержанием'),
, а в других строках заменили английские названия русскими. В левой части строк названия должны быть на английском и без пробелов, а справа можно писать как вам удобно. Эти правые названия на странице настройки блоков будут выглядеть следующим образом:
template.php
в UTF-8. В редакторе Notepad++ для этого после открытия файла нужно выбрать меню Кодировки и в нём пункт Кодировать в UTF-8. Сделать это нужно до того, как вы стали писать на русском, если сделаете потом, то русский язык испортится.
После того, как регион определён в файле template.php
, этот регион нужно добавить в файл page.tpl.php
. Так как нам нужно, чтобы блок показывался перед содержанием страницы, то нужно его вставить перед переменной $content
, которая занимается выводом содержания документа. Для этого вставляем такой код:
<?php print $befor_content ?>
В стандартной теме Друпала Garland, переменная $content
находится на 75 строчке. Снимок ниже показывает как эта запись будет выглядеть в файле page.tpl.php
в этой теме (мы сдвинули переменную $content
с 75 на 80 строчку, а перед ней вставили нашу $befor_content
дав ей свой слой):
Зачем помещать регион в отдельный слой? Чтобы этот регион потом было проще оформлять через файл style.css
, например добавив в него строчку:
#becon {
padding:10px;}
Примечание
Комментарии
Можно было бы здесь для наглядности дать скриншот результата.
Скриншот, возможно и не нужен, но блок
<div>
и переменную засунуть вif
стоило бы. Bначе любуемся пустыми<div>...
Статья очень помогла нубу. :) Сенкс автору
…но блок
<div>
и переменную засунуть вif
стоило бы+ показывать только в открытых документах :-)
<?php if ($befor_content && $node): print '<div id="becon">' . $befor_content . '</div>'; endif; ?>
Огромное человеческое спасибо!!!
Спасибо большое за статью, прекрасная работа.
не, ну вообще круто, почему то на drupal.ru не нашел, здесь обнаружил прямо кладезь полейзной информации! Вообще начинаю осознавать возможности регионов и блоков (разных) для разных разделов сайта.
Хм... А у меня после добавления региона появляются проблемы (тема "andreas09"). При входе на сайт, после введения логина и пароля отображается пустая страница. Если обновить страницу, вход на сайт выполняется, но все блоки меняют своё расположение. В настройках блоков при выборе региона новый отображается...
После сохранения каких-либо изменений на странице настройки блоков также отображается пустая страница. Версия Drupal 5.10. Может кто сталкивался с такой проблемой?
А для 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
зона которая отвечает за меню
понимаю что надо чтото типа такого:
regions[glavmenu] = novoeglavnoemenu
page.tpl.php
зона, которая отвечает за меню
на выходе сделал так
может и не правильно