Как управлять различными областями из модуля


В моем модуле есть обратный вызов меню, который выводит данные в пользовательский шаблон с помощью hook_theme().

Обычно Drupal включает этот вывод в область содержимого, которая отображается на page.tpl.php уровень использования render($page['content']).

Как я могу одновременно выводить данные из моего модуля, но в другие регионы page.tpl.php? Например$page['sidebar_first'] или $page['footer'].

Возможно ли это?
В качестве альтернативы, как я могу указать Drupal использовать пользовательский page.tpl.php при обратном вызове меню называется?

Author: Pierre.Vriens, 2011-06-26

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;
      }
      // …
    }
    // …
  }
}

В качестве альтернативы ваш модуль может определить блок, но в этом случае блок будет размещен в регионе, заданном пользователями-администраторами (или любым пользователем с соответствующими разрешениями), который может размещать блокировку в другом регионе. Если нет причин размещать контент, добавляемый вашим модулем, в определенном регионе, то я бы предпочел использовать блоки реализации.

 2
Author: kiamlaluno, 2011-06-27 07:50:23