Ответы:
Вы можете распечатать регионы внутри любого шаблона, но они не доступны из коробки в 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'].
Проблема в том, что $pagein 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-template
block_get_blocks_by_region()возвращается только массив блоков, и если вы хотите отобразить его как регион, вам нужно добавить обертку региона.