Відповіді:
Ви можете друкувати регіони всередині будь-якого шаблону, але вони недоступні у вікні 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
в тому, що в 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()
повертає лише масив блоків, і якщо ви хочете відобразити його як регіон, вам потрібно додати обгортку регіону.