Можно ли печатать регионы внутри шаблона узла или регионы строго ограничены шаблонами страниц?
Вы можете распечатать регионы внутри любого шаблона, но они не доступны из коробки в node.tpl.php
шаблоне. Чтобы сделать их доступными, вы создадите новую переменную для использования в своем node.tpl.php
шаблоне, которая будет содержать весь контент региона.
Создание новых переменных шаблона выполняется с помощью функции предварительной обработки. В template.php
файле вашей темы создайте функцию, которая выглядит следующим образом:
function mytheme_preprocess_node(&$variables) {
}
Замена mytheme
коротким названием вашей темы. Теперь, чтобы Drupal распознал эту новую функцию предварительной обработки, вам необходимо перестроить реестр тем вашего сайта. Это так же просто, как перейти к Конфигурация → Разработка → Производительность и нажать кнопку «Очистить все кеши» вверху.
Теперь способ работы функций предварительной обработки состоит в том, что он $variables
содержит массив, соответствующий доступным переменным вашего шаблона. Например, в node.tpl.php
, $submitted
содержит автора автора byline. В приведенной выше функции предварительной обработки он находится в $variables['submitted']
.
Чтобы имитировать то, что у вас есть page.tpl.php
, где у вас есть массив с именем, $page
который содержит все регионы, вы хотите заполнить $variables['page']
.
Проблема в том, что $page
in node.tpl.php
уже заполнен значением true / false, которое позволяет вам узнать, смотрите ли вы на узел самостоятельно или в листинге.
Поэтому, чтобы избежать конфликта имен, заполните $region
вместо:
function mytheme_preprocess_node(&$variables) {
// Get a list of all the regions for this theme
foreach (system_region_list($GLOBALS['theme']) as $region_key => $region_name) {
// Get the content for each region and add it to the $region variable
if ($blocks = block_get_blocks_by_region($region_key)) {
$variables['region'][$region_key] = $blocks;
}
else {
$variables['region'][$region_key] = array();
}
}
}
Затем в node.tpl.php
шаблоне вашей темы вы можете отобразить любой регион, выполнив следующие действия:
<?php print render($region['sidebar_first']); ?>
Где sidebar_first
название региона, который вы хотите визуализировать.
<?php print render(block_get_blocks_by_region('machine_name_of_your_region'));?>
. Отсюда: webomelette.com/add-region-node-templateblock_get_blocks_by_region()
возвращается только массив блоков, и если вы хотите отобразить его как регион, вам нужно добавить обертку региона.