Можно ли печатать регионы внутри шаблона узла?

Регионы могут быть напечатаны в шаблоне узла или регионы строго ограничены шаблонами страниц?

23 голоса | спросил tim76 18 Jpm1000000pmWed, 18 Jan 2012 21:34:58 +040012 2012, 21:34:58

1 ответ


47

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

Создание новых переменных шаблона выполняется с помощью функции препроцессора. В файле template.php вашей темы создайте функцию, которая выглядит так:

function mytheme_preprocess_node(&$variables) {
}

Заменить mytheme короткое имя вашей темы. Теперь, чтобы Drupal распознал эту новую функцию препроцесса, вам нужно перестроить реестр темы вашего сайта. Это так же просто, как переход на Конфигурация → Разработка → Производительность и нажатие кнопки «Очистить все кеши» вверху.

Теперь, как работают препроцессы, это то, что $variables содержит массив, соответствующий доступным переменным вашего шаблона. Например, в node.tpl.php, $submitted содержит автору по строке. В вышеприведенной функции препроцесса он находится в $variables['submitted'].

Чтобы подражать тому, что у вас есть в page.tpl.php, где у вас есть массив с именем $page, который содержит все регионы, вы хотите заполнить $ переменных [ 'страница'].

Проблема в том, что $variables['page'] в $page уже заполнен значением true /false, которое позволяет узнать, смотрите ли вы на узел самостоятельно или в листинге.

Итак, чтобы избежать столкновения имен, введите node.tpl.php:

$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']); ?> - это название области, которую вы хотите отобразить.

ответил 18 Jpm1000000pmWed, 18 Jan 2012 23:07:51 +040012 2012, 23:07:51

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132