Пример вывода региона before_comments
перед комментариями:
1. Добавить в THEMENAME.info
:
regions[before_comments] = Before comments
2. Добавить в template.php
:
/**
* Implements hook_page_alter().
*/
function THEMENAME_page_alter(&$page) {
if (isset($page['before_comments'])) {
$GLOBALS['region_before_comments'] = $page['before_comments'];
}
}
3. В node.tpl.php
, перед выводом $content['comments']
добавить:
<?php if ($view_mode == 'full') { ?>
<?php echo render($GLOBALS['region_before_comments']); ?>
<?php } ?>
4. Сбросить кэш.
Добавлено 09.11.2015
Статья переписана. Версия с вызовом функции block_get_blocks_by_region()
, которая здесь была и которая везде советуется содержит один большой недостаток — блоки в регионе before_comments
будут инициализироваться дважды.
Написанное актуально для
Drupal 7
Похожие записи
Комментарии
Для всех блоков в этом регионе желательно проставить соответствующие условия видимости в админке, потому что такой регион всё равно будет обрабатываться не только на нодных страницах.
Красиво, спасибо. Полезная фича.
Может ещё напишите, как вставить блок внутрь тела ноды, например, после третьего абзаца.
Поддерживаю Errand. Очень хочется заметку о том, как вставить блок внутри статьи.
http://stackoverflow.com/questions/8963835/how-to-insert-a-string-of-te…
Блин блинский, засада... у меня в template уже есть функция ***_preprocess_node(&$variables){} но в ней как видите &$variables, туда добавлять &$vars - сбоит, мою удалять - нельзя..., как быть то?
Забыл сказать: пытаюсь добавлять не в node.tpl.php а в node--custom.tpl.php
xandeadx, благодарю за наводку. Ты - молодец!
Мне помогла вставка в мою функцию строки
$vars['region']['before_comments'] = block_get_blocks_by_region('before_comments');
. Только при этом нужно, чтобы $vars['region']['before_comments'] совпадало с function THEMENAME_preprocess_node(&$vars). Соответственно, если в уже имеющейся функции стоит function THEMENAME_preprocess_node(&$variables), вставляемая строка изменится на $variables['region']['before_comments'] = block_get_blocks_by_region('before_comments');Благодарю за заметку.
Большое спасибо. Не первый раз выручаете.
почему такая фишка не работает с копиями блоков?
Спасибо, коротко и ясно сказано, как создать новый регион в друпал в нужном месте.
THEMENAME - надо было менять на имя своей темы?
У меня в уже есть функция _page_alter($page) - как в нее грузануть не знаю =( но помощи прошу растолковать.
нашел на других с вызовом функции block_get_blocks_by_region() и так у меня вроде работает, но хочется же сделать более правильно.
Спасибо за ценный совет. Столкнулся с тем, что при использовании block_get_blocks_by_region() и вывода региона в node.tpl.php через hook_preprocess_node перестаёт работать блок, созданый во вьюхе с изменяющимся содержимым через ajax.
Конкретно это better exposed filters с чекбоксами. В случае с вашим советом, через page_alter всё работает отлично, как в полноценном регионе. Пример с запчастями и аксессуарами тут, но я пока так и не понял с чем это связано.
А как вывести регион перед комментариями в друпал 8?
Низкий поклон Вам, спасибо большое, помог!
Добавить комментарий