Добавляние региона в ноду или комментарий

По умолчанию все созданные регионы доступны только в 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; ?>
 

Автора автора