Drupal. Добавление региона для блоков
Чем больше разбираюсь с Drupal, тем больше он мне нравится своей гибкостью. На этот раз мне понадобилось добавить регион для отображения блоков. В базовом варианте доступны регионы "заголовок", "левая панель", "правая панель", "содержание" и "подвал". Мне понадобился регион для отображения его в теле поста (ноды). Регион "содержание" мне не подошел, потому что он выводит блок после поста и комментариев.
Как выяснилось, сделать новый регион очень просто. В этом мне помогла вот эта статья. Дальше интересно будет только друпалерам и интересующимся этой темой.
Все изменения делаются в шаблоне темы. В моем случае это стандартная тема garland. На ее примере я и опишу алгоритм действий.
Вначале нужно добавить определение региона в файле template.php. Для этого добавляем функцию MYTHEME_regions() или модифицируем ее, если она уже существует. MYTHEME в названии функции надо заменить на название используемой темы (garland). В моем случае функция выглядит следующим образом:
function garland_regions() { return array( 'left' => t('left sidebar'), 'right' => t('right sidebar'), 'content' => t('content'), 'header' => t('header'), 'footer' => t('footer'), 'inline1' => t('inline 1') ); }
inline1 здесь - это как раз определение нашего дополнительного региона.
Далее в том же файле template.php необходимо в функции _phptemplate_variables() добавить вывод нового региона. Функция приобретает такой вид:
function _phptemplate_variables($hook, $vars) { // ... // Load the node region only if we're not in a teaser view. if ($hook == 'node' && !$vars['teaser']) { // Load region content assigned via blocks. foreach (array('inline1') as $region) { $vars[$region] = theme('blocks', $region); } return $vars; } return array(); }
Здесь видно, что во втором условии добавляется вывод региона в случае показа ноды.
Теперь добавляем вывод региона в шаблоне ноды. Для этого модифицируем файл node.tpl.php, добавив в нужном месте код вывода нашего региона:
<div class="centerblock"><?php print $inline1?></div>
При выводе используется класс, который нужно описать в файле style.css. Описываем нужный нам стиль, например, так:
div.centerblock {
float: left;
}Все. После этих нехитрых манипуляций в админке появляется новый регион, в который мы можем вставлять любое количество блоков. Отображается регион в теле поста, как мы и описали.

В моем случае результат можно увидеть сразу в конце этой статьи - ссылка на RSS-канал и блок "полезные записи".
Комментарии
Re: Drupal. Добавление региона для блоков
Отличный материал, очень пригодился.
Думаю, вместо добавления условия if ($hook == 'node' && !$vars['teaser']) лучше указать в параметрах блоков, которые будут выводиться в этом регионе, нужные альясы. В данном случае: node/*
Re: Drupal. Добавление региона для блоков
В принципе да, можно и так. Но тогда придется эти алиасы прописывать ручками для каждого блока. Когда блоков там немного, то это не проблема, конечно.
Вывод блока
Возникла задача, нужно выводить блоки в определенном разделе. Т.е. нажал ссылку "раздел 1" вывелись блоки меню "блок 1, блок2...". А когда нажимаешь на ссылку в одном из этих блоков, то все они пропадают. Можно, конечно, в настройках блока прописывать все ноды для вывода, но это слишком долго и неудобно.
Подскажите, плз, как решить этот вопрос?
Re: Drupal. Добавление региона для блоков
По поводу тем в 6-ом Друпале. Сейчас вот мучаюсь. Может кто-то поможет?
Создал свою тему, определил свой регион... Чтоб регион появился на странице нужно было подключить движок. После того как подключил движок отказалась работать таблица стилей style.css. В чём проблема, может кто-то сталкивался?
Re: Drupal. Добавление региона для блоков
Хм... А у меня после добавления региона появляются проблемы (тема "andreas09"). При входе на сайт, после введения логина и пароля отображается пустая страница. Если обновить страницу, вход на сайт выполняется, но все блоки меняют своё расположение. В настройках блоков при выборе региона новый отображается...
После сохранения каких-либо изменений на странице настройки блоков также отображается пустая страница. Версия Drupal 5.10. Может кто сталкивался с такой проблемой?
Re: Drupal. Добавление региона для блоков
Полезная информация, хотя я больше присматриваюсь к wordpress, более распространен, но сервер грузит будь здоров =)
Re: Drupal. Добавление региона для блоков
Ох... в шестерке всё СОВСЕМ по другому.
С уважением, Мак Сим.
http://mak-sim.ru
Re: Drupal. Добавление региона для блоков
Вообще мне очень понравилось решение в шестерке. Прежде чем дописать это в статью проверь где нибудь. ты всё таки больше это понимаешь нежели я.
Итак в каждой теме для шестерки есть файл вида *.info
В нем в основном мета информация и в том числе описание регионов. причем в очень простом виде.
regions[left] = Left sidebar
regions[right] = Right sidebar
regions[content_top] = Content top
regions[content_bottom] = Content bottom
regions[header] = Header
regions[footer] = Footer
Дописываем в этом виде наши регионы. И вызываем их в нужном месте
<?php
print $имя региона;
?>
С уважением, Мак Сим.
http://mak-sim.ru
Re: Drupal. Добавление региона для блоков
За инфу спасибо. Если возникнет необходимость, буду пробовать. А специально ставить шестерку, чтобы посмотреть, лениво. ;-)
Re: Drupal. Добавление региона для блоков
А есть ещё один очень важный момент. Чтобы увидеть новый блок надо почистить кэш в админке.
С уважением, Мак Сим.
http://mak-sim.ru
Pingback
[...] я написал заметку о добавлении региона для блоков в Drupal 5.x. А вчера мне [...]
Re: Drupal. Добавление региона для блоков
Спасибо! В который раз убеждаюсь, что друпал не такой и сложный, как кажется.
---
создание сайтов симферополь
Отправить комментарий