Как управлять различными областями из модуля
В моем модуле есть обратный вызов меню, который выводит данные в пользовательский шаблон с помощью hook_theme()
.
Обычно Drupal включает этот вывод в область содержимого, которая отображается на page.tpl.php уровень использования render($page['content'])
.
Как я могу одновременно выводить данные из моего модуля, но в другие регионы page.tpl.php? Например$page['sidebar_first']
или $page['footer']
.
Возможно ли это?
В качестве альтернативы, как я могу указать Drupal использовать пользовательский page.tpl.php при обратном вызове меню называется?
1 answers
Если вы хотите точно поместить содержимое в $page['sidebar_first']
, то вы можете реализовать hook_page_build() или hook_page_alter(). Разница между крючками заключается в том, что последний используется, когда модулю необходимо изменить некоторые элементы, добавленные другим модулем с помощью hook_page_build()
, так как первый крючок выполняется первым.
Примерами hook_page_build()
являются следующие функции.
function toolbar_page_build(&$page) {
$page['page_top']['toolbar'] = array(
'#pre_render' => array('toolbar_pre_render'),
'#access' => user_access('access toolbar'),
'toolbar_drawer' => array(),
);
}
function dashboard_page_build(&$page) {
global $theme_key;
if (dashboard_is_visible()) {
$block_info = array();
// Create a wrapper for the dashboard itself, then insert each dashboard
// region into it.
$page['content']['dashboard'] = array('#theme_wrappers' => array('dashboard'));
foreach (dashboard_regions() as $region) {
// Do not show dashboard blocks that are disabled.
if ($region == 'dashboard_inactive') {
continue;
}
// …
}
// …
}
}
В качестве альтернативы ваш модуль может определить блок, но в этом случае блок будет размещен в регионе, заданном пользователями-администраторами (или любым пользователем с соответствующими разрешениями), который может размещать блокировку в другом регионе. Если нет причин размещать контент, добавляемый вашим модулем, в определенном регионе, то я бы предпочел использовать блоки реализации.