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;
}

Все. После этих нехитрых манипуляций в админке появляется новый регион, в который мы можем вставлять любое количество блоков. Отображается регион в теле поста, как мы и описали.

Drupal

В моем случае результат можно увидеть сразу в конце этой статьи - ссылка на RSS-канал и блок "полезные записи".

Комментарии

Re: Drupal. Добавление региона для блоков

webdevil аватар

Отличный материал, очень пригодился.

Думаю, вместо добавления условия if ($hook == 'node' && !$vars['teaser']) лучше указать в параметрах блоков, которые будут выводиться в этом регионе, нужные альясы. В данном случае: node/*

Re: Drupal. Добавление региона для блоков

SolarWind аватар

В принципе да, можно и так. Но тогда придется эти алиасы прописывать ручками для каждого блока. Когда блоков там немного, то это не проблема, конечно.

Вывод блока

Гость аватар

Возникла задача, нужно выводить блоки в определенном разделе. Т.е. нажал ссылку "раздел 1" вывелись блоки меню "блок 1, блок2...". А когда нажимаешь на ссылку в одном из этих блоков, то все они пропадают. Можно, конечно, в настройках блока прописывать все ноды для вывода, но это слишком долго и неудобно.
Подскажите, плз, как решить этот вопрос?

Re: Drupal. Добавление региона для блоков

Гость аватар

По поводу тем в 6-ом Друпале. Сейчас вот мучаюсь. Может кто-то поможет?
Создал свою тему, определил свой регион... Чтоб регион появился на странице нужно было подключить движок. После того как подключил движок отказалась работать таблица стилей style.css. В чём проблема, может кто-то сталкивался?

Re: Drupal. Добавление региона для блоков

Гость аватар

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

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

Re: Drupal. Добавление региона для блоков

alina_j аватар

Полезная информация, хотя я больше присматриваюсь к 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. Добавление региона для блоков

SolarWind аватар

За инфу спасибо. Если возникнет необходимость, буду пробовать. А специально ставить шестерку, чтобы посмотреть, лениво. ;-)

Re: Drupal. Добавление региона для блоков

Мак Сим аватар

А есть ещё один очень важный момент. Чтобы увидеть новый блок надо почистить кэш в админке.

С уважением, Мак Сим.
http://mak-sim.ru

Pingback

Добавление региона для блоков в Drupal 6.x | SolarWind Gate. аватар

[...] я написал заметку о добавлении региона для блоков в Drupal 5.x. А вчера мне [...]

Re: Drupal. Добавление региона для блоков

Таврия аватар

Спасибо! В который раз убеждаюсь, что друпал не такой и сложный, как кажется.

---
создание сайтов симферополь

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу. If you have a Gravatar account associated with the e-mail address you provide, it will be used to display your avatar.
  • Доступны HTML теги: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Строки и параграфы переносятся автоматически.
CAPTCHA
Этот вопрос задается для того, чтобы выяснить, являетесь ли Вы человеком или представляете из себя автоматическую спам-рассылку.