Мне нужно вывести некоторые регионы в шаблоне html.tpl.php, поскольку они не меняются между page.tpl.php и page-front.tpl.php (просто чтобы назвать два). В основном я хочу избежать дублирования кода.
Однако в html.tpl.php, похоже, нет ничего связанного с регионами, и я не могу получить что-либо, используя drupal_get_region_content (как с параметрами, так и без параметров, он просто возвращает пустой массив).
Идеи?
drupal_set_region_content()
для установки контента региона?drupal_add_region_content()
но я не вижу в этом смысла: я устанавливаю содержимое регионов через интерфейс администратора блоков.drupal_add_region_content()
.Ответы:
Я решил так:
и тогда я мог бы сделать
источник
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()
. В частности, этот код, вероятно, более полезен для вас:Первые две строки подтверждают, что отображаемая страница не является демонстрационной страницей, используемой для показа расположения областей темы.
Если вам нужно визуализировать блоки другим способом, более вероятно, что вы заинтересованы в переопределении theme_block () в своей теме или (что еще более вероятно) создании пользовательского файла шаблона block.tpl.php. Другой способ изменить способ визуализации блоков - использовать функцию препроцессора для блоков ( hook_preprocess_block () ).
источник