Добавление региона для блоков в 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
Хорошо, что я не стал делать по твоей инструкции для 5-ки. Теперь вот можно бесплатно позаимствовать опыт и избежать граблей :)
Re: Добавление региона для блоков в Drupal 6.x
Ага, пользуйся. :-)
Re: Добавление региона для блоков в Drupal 6.x
Добавлю только, что сбросить надо не "на всякий случай", а "обязательно". Новый регион не появится в админке без сего действа.
-Во! Функция preprocess_node! Она нам и нужна.
-Что делает эта функция?
-Ну она... э... препроцесит ноду.
С уважением, Мак Сим.
http://mak-sim.ru
Re: Добавление региона для блоков в Drupal 6.x
Да, с preprocess_node забавно получилось. ;-)
Re: Добавление региона для блоков в Drupal 6.x
Собственно для решения задачи вставки кода между нодой и комментами препроцессные танцы с бубном не нужны. Копируем в тему системный файл comment-wrapper.tpl.php - обертку комментариев, и вставляем в его начало все, что требуется.
Если надо даже отрендеренный пользовательский или системный блок
Re: Добавление региона для блоков в Drupal 6.x
Да, это интересное решение, спасибо. Но ведь регион таким образом нельзя туда вставить? Или можно? Чем удобен регион - это тем, что потом в него просто из админки можно добавлять/удалять блоки.
Re: Добавление региона для блоков в Drupal 6.x
А если у меня как класс выключены комментарии это будет работать?
С уважением, Мак Сим.
http://mak-sim.ru
Re: Добавление региона для блоков в Drupal 6.x
А вы попробуйте там
print theme('blocks', 'inline');
Вдруг сработает %)
Re: Добавление региона для блоков в Drupal 6.x
О как. Век живи, век учись. Спасибо за идею!
Re: Добавление региона для блоков в Drupal 6.x
Код ваш - его просто надо вставить в нужное место. :)
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)
Отправить комментарий