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

Когда-то я написал заметку о добавлении региона для блоков в Drupal 5.x. А вчера мне довелось поучаствовать в обновлении блога Мак Сима с пятой до шестой версии друпала. И в процессе обновления нам пришлось разобраться с тем, как создавать регионы в шестерке. Надо сказать, что мы наткнулись на маленький подводный камень, который почему-то не описан в рунете (или мы плохо искали). Поэтому опишу здесь весь процесс от и до. Все на самом деле весьма просто.

Для начала еще раз кратко опишу задачу. Необходимо создать регион, в котором можно размещать блоки. Регион должен быть размещен только в ноде, сразу после текста (content), но до комментариев.

Все изменения, так же, как и в Drupal 5.x, проводятся только на уровне темы оформления. В нашем случае это была тема Aurora, найденная на drupal.org. Но идея одинакова для всех тем.

Вначале необходимо определить новый регион в info-файле (в нашем случае - aurora.info). Добавляем в него следующую строчку:

regions[inline] = Inline

Затем указываем вывод региона в шаблоне ноды. Для этого в файле node.tpl.php необходимо прописать следующее:

<?php if ($inline && !$teaser): ?>
<?php print $inline ?>
<?php endif; ?>

В нашем случае мы написали этот код в самом конце, после вывода links. Как видно, в первой строчке кода осуществляется проверка на тизер. Нам необходимо выводить регион только в полном выводе ноды, а не в тизере. Если не будет этой проверки, регион будет выводиться в любом отображении ноды. Кроме того, можно обернуть вывод региона (вторая строчка в нашем коде) в тег div, чтобы применить к нему класс из style.css. Но это уже по желанию.

И последнее, что необходимо сделать, - модифицировать функцию your_theme_preprocess_node (где your_theme - название вашей темы) в файле template.php. Добавляем в эту функцию следующее:

$vars['inline'] = theme('blocks', 'inline');

В нашем случае эта функция получила такой вид:

function aurora_preprocess_node(&$vars) {
  // Send a new variable, $has_terms, to see wether the current node has any terms
  $vars['has_terms'] = count(taxonomy_node_get_terms($vars['node'])) > 0;
  $vars['inline'] = theme('blocks', 'inline');
  return $vars;
}

После всех этих манипуляций рекомендую на всякий случай сбросить кэш в друпале. Теперь на странице конфигурирования блоков появится регион Inline.

Комментарии

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

Zakhar аватар

Хорошо, что я не стал делать по твоей инструкции для 5-ки. Теперь вот можно бесплатно позаимствовать опыт и избежать граблей :)

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

SolarWind аватар

Ага, пользуйся. :-)

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

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

Добавлю только, что сбросить надо не "на всякий случай", а "обязательно". Новый регион не появится в админке без сего действа.

-Во! Функция preprocess_node! Она нам и нужна.
-Что делает эта функция?
-Ну она... э... препроцесит ноду.

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

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

SolarWind аватар

Да, с preprocess_node забавно получилось. ;-)

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

direqtor аватар

Собственно для решения задачи вставки кода между нодой и комментами препроцессные танцы с бубном не нужны. Копируем в тему системный файл comment-wrapper.tpl.php - обертку комментариев, и вставляем в его начало все, что требуется.
Если надо даже отрендеренный пользовательский или системный блок

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

SolarWind аватар

Да, это интересное решение, спасибо. Но ведь регион таким образом нельзя туда вставить? Или можно? Чем удобен регион - это тем, что потом в него просто из админки можно добавлять/удалять блоки.

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

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

А если у меня как класс выключены комментарии это будет работать?

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

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

direqtor аватар

А вы попробуйте там

print theme('blocks', 'inline');

Вдруг сработает %)

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

SolarWind аватар

О как. Век живи, век учись. Спасибо за идею!

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

direqtor аватар

Код ваш - его просто надо вставить в нужное место. :)

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

Марианна аватар

Спасибо за информацию!

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

Гость аватар

А если в И template.php нету your_theme_preprocess_node (тема n_rebuild) тогда что искать ?

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

Гость аватар

Так тебе нужно добавить туда эту строчку)) n_rebuild_preprocess_node (тема n_rebuild)

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

Содержание этого поля является приватным и не предназначено к показу. Если у вас есть аккаунт в Gravatar, он будет использован для показа вашей аватарки.
  • Доступны HTML теги: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Строки и параграфы переносятся автоматически.