Можно ли добавить блок в node.tpl.php

Главные вкладки

Аватар пользователя jaans jaans 28 октября 2012 в 0:07

Уважаемые дамы и господа! помогите разобраться с таким вопросом. Можно ли в файл node.tpl.php вставить регион для вывода блока?
Если можно то подскажите как сделать. Сейчас все что умею и пытался сделать добавляю вот такую строчку

<?php if ($right3)  ?> 
    <div id="right3"><?php print $right3 ?></div>?>

В файле info темы добавлял переменную и кэш чистил ни чего не выводит.

Комментарии

Аватар пользователя jaans jaans 28 октября 2012 в 0:53

Нашел решение
Добавим новый регион после содержимого ноды, но перед комментариями.
1. В mytheme.info определим новый регион с помощью добавления след. строки:
<?phpregions[new_region] = Новый Регион?>
2. В template.php темы добавим регион в набор переменных ноды

<?phpfunction phptemplate_preprocess_node(&$variables, $hook) {
  $variables['new_region'] = theme('blocks', 'new_region');
}?>

Если сейчас очистить кэш ( admin/settings/performance ) и несколько раз обновить страницу размещения блоков ( admin/build/block ), то вы сможете увидеть созданный регион в любом из выпадающих списков. Можно добавить в него нужный блок и сохранить изменения. Блок добавился и сохранился, но на странице не появился.
3. В node.tpl.php определим место для вывода нового региона.

<?php if ($new_region): ?>
    <div id="new-region">
    <?php print $new_region?>
    </div>
<?php endif; ?>

Снова очищаем кэш и обновляем страницу с ожидаемым блоком. Радуемся.
Теперь возможности ограничены только вашими познаниями в css. С помощью подобных переменных можно осуществлять вывод блоков практически в любом месте ноды. Над заголовком, под заголовком, в содержимом ноды, под содержимым и т.д. Определяем регион, добавляем его в переменные ноды, выводим на экран.
Спасибо автору

Аватар пользователя Orion76 Orion76 28 октября 2012 в 9:52

как "получить" блок програмно: http://xandeadx.ru/blog/drupal/133

далее в хуком MYTHEME_preprocess_node(&$variables) (в файле template.php в папке темы)
добавляем к шаблону node.tpl.php переменную, содержащюю вывод блока:

<?php
$variables
['my_block']=module_invoke($module_name'block''view'$block_delta);
?>

и в node.tpl.php в нужном месте просто вставляем:

<?php
print $my_block;
?>
Аватар пользователя Kattry Kattry 7 декабря 2012 в 18:56

Спасибо, это всё работает. Но упорно не хотят отображаться блоки над комментариями на форуме. Используется Advanced Forum. Что делать, подскажите, пожалуйста!