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


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

Author: kiamlaluno, 2012-01-18

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

 48
Author: , 2012-01-18 19:07:51