Здравствуйте, ребят. Пытаюсь создать регион и вывести блоки, приписанные к нему, сразу после основного текста ноды / или перед ним. Как многие догадались - для размещения рекламных блоков (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. Кто что может подсказать?
Комментарии
ты забыл что в странице несколько нод может быть.
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']; } ?>
И это пробовал, тоже ноль эмоций...
Хмм, а куда здесь подставить ID блока?
кеш чистил ?
3ка это id блока
Установи себе модуль devel и используй его функцию dsm для логирования. И последовательно смотри во что устанавливаются переменные.
Конечно.
Ок.
Попробую.
Ну, а целом, для вывода содержимого региона в node-news.tpl.php название функции (название_темы_preprocess_node) остается таким же?
да, для формирования вывода чего угодно в шаблон и существуют хуки препроцесса
ты, вот кстати регион вывести в ноду хочешь, а сам он на странице как - в шаблоне потерт? Или показывается или что?
Вот через "module_invoke" получилось конкретный блок напечатать в нужном месте, а регион так и не хочет.
Ну, в page.tpl.php я его не вывожу, но если вывести, например сразу после $content, то блоки нормально показываются. Но после всех комментариев и другой лабуды, что идет после текста ноды. А нужно ж именно после самого текста вывести.
Блин, ребят, прошу прощения, тупанул жестко... Я файл template.php на сервер заливал не тот, что редактировал в редакторе xD Залил тот, что нужно, и все работает. С вот этим кодом в нем:
<?php
function название_темы_preprocess_node(&$variables) {
if(!$variables['teaser']) {
foreach (array('after_node_content') as $region) {
$variables[$region] = theme('blocks', $region);
}
}
}
?>
Всем спасибо.
Подскажите по синтаксису, а как объединить вот это в одно?:
<?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;
}
?>
Подскажите, вот такой код корректен:
<?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;
}
?>
?)