[Решено] Не получается вывести содержимое региона в node.tpl.php

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

Аватар пользователя STINGER STINGER 11 мая 2011 в 22:13

Здравствуйте, ребят. Пытаюсь создать регион и вывести блоки, приписанные к нему, сразу после основного текста ноды / или перед ним. Как многие догадались - для размещения рекламных блоков (AdSense, Директ и т.д.). Однако столкнулся с проблемой. Я перечитал кучу постов по этой теме здесь и на других ресурсах. Все сводится к тому, что нужно сделать следующее:

1. Прописать регион в файле "название_темы.info":

regions[after_node_content] = After Node Content

2. Прописать его переменную в template.php:

<?php
function название_темы_preprocess_node(&$variables) {
  
$variables['after_node_content'] = theme('blocks''after_node_content');
}
?>

3. И вывести его в node.tpl.php, в моем случае так:


<?php print $content?>
<?php 
print $after_node_content?>

Регион у меня создать получается, и блоки к нему приписываются, и если прописать его вывод в page.tpl.php, то блоки показываются. А вот через node.tpl.php не хочет ни в какую. Абсолютно ничего не выводится после основного содержимого ноды.

Еще один момент. Для разных типов содержимого у меня созданы отдельные node-*.tpl.php файлы, в частности вывод блоков такого региона мне нужно сделать в node-news.tpl.php. Кто что может подсказать?

Комментарии

Аватар пользователя Anton1 Anton1 11 мая 2011 в 23:07

ты забыл что в странице несколько нод может быть.

if(!$variables['teaser']) {
foreach (array('after_node_content') as $region) {
$variables[$region] = theme('blocks', $region);
}
}

можешь вести блок напрямую.
<?php if (!$teaser) { $block = module_invoke('block', 'block' , 'view', 3); print $block['content']; } ?>

Аватар пользователя STINGER STINGER 12 мая 2011 в 0:25

"Anton1" wrote:
ты забыл что в странице несколько нод может быть.

if(!$variables['teaser']) {
foreach (array('after_node_content') as $region) {
$variables[$region] = theme('blocks', $region);
}
}


И это пробовал, тоже ноль эмоций...

"Anton1" wrote:
можешь вести блок напрямую.
<?php if (!$teaser) { $block = module_invoke('block', 'block' , 'view', 3); print $block['content']; } ?>

Хмм, а куда здесь подставить ID блока?

Аватар пользователя natbampo natbampo 12 мая 2011 в 8:37

Установи себе модуль devel и используй его функцию dsm для логирования. И последовательно смотри во что устанавливаются переменные.

Аватар пользователя STINGER STINGER 12 мая 2011 в 11:33

"Anton1" wrote:
кеш чистил ?

Конечно.
"Anton1" wrote:
3ка это id блока

Ок.

"natbampo" wrote:
Установи себе модуль devel и используй его функцию dsm для логирования. И последовательно смотри во что устанавливаются переменные.

Попробую.

Ну, а целом, для вывода содержимого региона в node-news.tpl.php название функции (название_темы_preprocess_node) остается таким же?

Аватар пользователя natbampo natbampo 12 мая 2011 в 12:20

"STINGER" wrote:
остается таким же?

да, для формирования вывода чего угодно в шаблон и существуют хуки препроцесса

Аватар пользователя natbampo natbampo 12 мая 2011 в 12:24

ты, вот кстати регион вывести в ноду хочешь, а сам он на странице как - в шаблоне потерт? Или показывается или что?

Аватар пользователя STINGER STINGER 12 мая 2011 в 13:34

Вот через "module_invoke" получилось конкретный блок напечатать в нужном месте, а регион так и не хочет.

"natbampo" wrote:
ты, вот кстати регион вывести в ноду хочешь, а сам он на странице как - в шаблоне потерт? Или показывается или что?

Ну, в page.tpl.php я его не вывожу, но если вывести, например сразу после $content, то блоки нормально показываются. Но после всех комментариев и другой лабуды, что идет после текста ноды. А нужно ж именно после самого текста вывести.

Аватар пользователя STINGER STINGER 12 мая 2011 в 14:44

Блин, ребят, прошу прощения, тупанул жестко... Я файл template.php на сервер заливал не тот, что редактировал в редакторе xD Залил тот, что нужно, и все работает. С вот этим кодом в нем:

<?php
function название_темы_preprocess_node(&$variables) {
  if(!
$variables['teaser']) {
     foreach (array(
'after_node_content') as $region) {
        
$variables[$region] = theme('blocks'$region);
     }
  }
}
?>

Всем спасибо.

Аватар пользователя chelwolf chelwolf 13 января 2013 в 22:48

Подскажите по синтаксису, а как объединить вот это в одно?:

<?php
function chgakitheme_preprocess_node(&$variables) {
  if(!
$variables['teaser']) {
     foreach (array(
'noder') as $region) {
        
$variables[$region] = theme('blocks'$region);
     }
  }
}
function 
chgakitheme_preprocess_node(&$vars$hook) {
$node $vars['node'];
$vars['template_file'] = 'node-'$node->nid;
}
?>
Аватар пользователя chelwolf chelwolf 14 января 2013 в 0:18

Подскажите, вот такой код корректен:

<?php
function chgakitheme_preprocess_node(&$vars$hook) {
$node $vars['node'];
$vars['template_file'] = 'node-'$node->nid;
$vars['has_terms'] = count(taxonomy_node_get_terms($vars['node'])) > 0;
$vars['noder'] = theme('blocks''noder');
return 
$vars;
}
?>

?)