Можно ли печатать области в шаблоне узла?
Можно ли печатать регионы в шаблоне узла или регионы строго ограничены шаблонами страниц?
1 answers
Вы можете печатать области внутри любого шаблона, но они недоступны из коробки в шаблоне node.tpl.php
. Чтобы сделать их доступными, вы создадите новую переменную для использования в своем шаблоне node.tpl.php
, которая будет содержать все содержимое региона.
Создание новых переменных шаблона выполняется с помощью функции предварительной обработки. В файле вашей темы template.php
создайте функцию, которая выглядит следующим образом:
function mytheme_preprocess_node(&$variables) {
}
Замена mytheme
кратким названием вашей темы. Теперь, для того, чтобы Друпал мог распознав эту новую функцию предварительной обработки, вам необходимо перестроить реестр тем вашего сайта. Это так же просто, как перейти к конфигурации → Развитие → Производительность и нажмите кнопку "Очистить все кэши" вверху.
Теперь способ работы функций предварительной обработки заключается в том, что $variables
содержит массив, соответствующий доступным переменным вашего шаблона. Например, в node.tpl.php
, $submitted
содержит подпись автора. В функции предварительной обработки выше это найденный в $variables['submitted']
.
Чтобы имитировать то, что у вас есть в page.tpl.php
, где у вас есть массив с именем $page
, содержащий все области, вы хотели бы заполнить $variables['page']
.
Проблема в том, что $page
в 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
- название области, которую вы хотите отобразить.