Друк регіонів у html.tpl.php


10

Мені потрібно вивести деякі регіони в шаблоні html.tpl.php, оскільки вони не змінюються між page.tpl.php та page-front.tpl.php (лише щоб назвати два). В основному я хочу уникати дублювання коду.

Однак, схоже, немає нічого, пов’язаного з регіонами в html.tpl.php, і я не міг отримати що-небудь за допомогою drupal_get_region_content (і з параметрами, і без них, він просто повертає порожній масив).

Ідеї?


Ви використовували drupal_set_region_content()для встановлення вмісту регіону?
kiamlaluno

2
Немає такої функції. Можливо, ви мали на увазі, drupal_add_region_content()але я не бачу сенсу в цьому: я встановлюю вміст регіонів через інтерфейс адміністратора блоків.
Morpheu5

1
Так, я мав на увазі drupal_add_region_content().
kiamlaluno

Відповіді:


18

Я вирішив так:

function mytheme_preprocess_html(&$variables) {
    $variables['region_name'] = block_get_blocks_by_region('region_name');
}

і тоді я міг би зробити

<?php print render($region_name) ?>

Навіщо використовувати ехо? Звичайно, це працює.
SDMulroy

Звичайно, якби я впроваджував модуль або загальнодоступну тему, я був би змушений дотримуватися стандартів громади. Це була спеціальна тема, яку використовував виключно мій клієнт.
Morpheu5

Я знаю, що це надзвичайно стара публікація, але я думаю, що прийняти відповідь там, де автор відповіді ліниво відповідає на питання, погано судити. Наприклад, ви надаєте функцію додавання, але припускайте, що всі читачі магічно знають, де цей код повинен жити. Це ледача частина, і я проголошую це, оскільки він не надає нічого початківцям друпальним користувачам / дияволам.
Skittles

Я ціную ваш внесок і те, що новачки можуть не отримати повного пояснення. Однак врахуйте, що: а) годування ложкою робить для ледачих новачків; б) для тих, хто навіть швидко читає документи (як це повинен мати будь-який не лінивий новачок), розміщення цієї функції має бути відносно очевидним. Якщо це не так, то є посібник з вагомих причин. Моє запитання (і відповідь) стосується питання на рівні, на якому можна припустити певні базові знання щодо тематики щодо Drupal. Крім того, це веб-сайт із питань запитань та питань, сусідні двері - сайт Документів.
Morpheu5

1
@Skitties Ми не можемо дублювати тут документацію лише тому, що нові користувачі не могли знати, що таке функції попередньої обробки, як ця, наведена у питанні. Це навіть не питання. Якщо у користувачів є специфічні функції попередньої обробки запиту, вони зададуть нове запитання.
kiamlaluno

2

drupal_get_region_content()повертає вміст, встановлений попередніми дзвінками drupal_add_region_content(), але він не включає вміст блоків, які відображаються на сторінці через block_page_build () .

Якщо ви шукаєте "drupal_add_region_content" у вихідному коді Drupal, ви помітите, що функція викликається:

  • drupal_get_region_content()
  • install_display_output()
  • template_preprocess_maintenance_page()
  • update_task_list()

Що ви встановите для блоків на сторінці адміністратора, це те, в яких регіонах блоки будуть надані, але їх вміст не додається drupal_add_region_content(); насправді жодна з перелічених вище функцій (які є єдиними функціями, що викликають drupal_add_region_content(), крім коду для тестування інсталяції Drupal) не призначена для надання / додавання вмісту блоку.

Якщо вам потрібно візуалізувати блоки у власному коді, слід перевірити код, який використовується у block_page_build(). Зокрема, це код, який, можливо, є більш корисним для вас:

  // Fetch a list of regions for the current theme.
  $all_regions = system_region_list($theme);

  $item = menu_get_item();
  if ($item['path'] != 'admin/structure/block/demo/' . $theme) {
    // Load all region content assigned via blocks.
    foreach (array_keys($all_regions) as $region) {
      // Assign blocks to region.
      if ($blocks = block_get_blocks_by_region($region)) {
        $page[$region] = $blocks;
      }
    }
    // …
  }

Перші два рядки підтверджують, що відображається сторінка не є демонстраційною сторінкою, яка використовується для показу місця розміщення регіонів тем.

Якщо вам потрібно рендерувати блоки по-іншому, більш імовірно, що ви зацікавлені в переосмисленні теми_block () у вашій темі або (навіть більше, ймовірно) у створенні спеціального файлу шаблонів block.tpl.php. Ще один спосіб змінити спосіб відображення блоків - це використовувати функцію попередньої обробки для блоків ( mock_preprocess_block () ).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.