Чи можна надрукувати регіони в шаблоні вузла?


25

Чи можуть бути надруковані регіони в шаблоні вузла, або ж регіони суворо обмежені шаблонами сторінок?

Відповіді:


48

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


1
Нарешті, робоче рішення для Drupal 7 :)
— Едуард Лука

4
Існує також швидке брудне рішення, яке працювало на мене <?php print render(block_get_blocks_by_region('machine_name_of_your_region'));?>. Звідси: webomelette.com/add-region-node-template
— Darragh

Цей розчин витончений. Чи можете ви навести приклади того, коли це найбільш застосовно для друку регіонів у node.tpl.php, а не розміщення у page.tpl.php?
— Ренделл

Це залежить від вашого дизайну. Іноді макет може розміщувати бічну панель у місці, де набагато простіше тематизувати, якби він знаходився всередині вузла діва, а не поза ним.
— рубік

Не забувайте про відповідні обгортки регіону! Довідково дивіться system_page_alter () . Пам'ятайте, що block_get_blocks_by_region()повертає лише масив блоків, і якщо ви хочете відобразити його як регіон, вам потрібно додати обгортку регіону.
— SiliconMind
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.