По умолчанию все созданные регионы доступны только в page.tpl.php, но иногда хочется добавить пару блоков, скажем, после ноды, но перед комментарием. Для этого делаем несколько несложных движений:
Добавляем регион в тему
В .info файл темы помимо прочих регионов добавляем регион для ноды:
regions[node_bottom] = Node bottom
Теперь открываем template.php и в препроцессе ноды добавляем переменную, которая будет содержать в себе весь регион node_bottom:
/** * Override or insert variables into the node template. */ function ИМЯТЕМЫ_preprocess_node(&$vars) { // Получаем регион и ложим его в массив переменных для ноды $vars['node_bottom'] = block_get_blocks_by_region('node_bottom'); }
Теперь открываем node.tpl.php и в любое место в шаблоне добавляем вывод этой переменной:
<?php if ($node_bottom): ?> <div class = "node-bottom"> <?php print render($node_bottom); ?> </div> <?php endif; ?>
Всё - регион добавлен и будет работать в ноде точно так же, как и для страницы.
Теперь давайте задачку чуть интереснее - добавим регион, который будет показываться только под первым комментарием в статье (например, чтобы засунуть туда рекламу).
Сначала всё по старой схеме - в .info файле создаём регион:
regions[comment_first] = First comment
Далее в template.php:
/** * Override or insert variables into the comment template. */ function ИМЯТЕМЫ_preprocess_comment(&$vars) { if ($vars['id'] == 1) { $vars['comment_region'] = block_get_blocks_by_region('comment_first'); } }
Теперь в необходимое вам место comment.tpl.php добавляйте вывод региона - и вы получите необходимый результат: реклама (или что вы туда добавите) будет показана только в первом комментарии:
<?php if ($comment_region): ?> <div class = "comment-region"> <?php print $comment_region; ?> </div> <?php endif; ?>