Как вставить блок в узел или шаблон в Drupal 7? - PullRequest
36 голосов
/ 19 января 2011

В Drupal 6 было легко вставить блок в шаблон со следующим кодом:

$block = module_invoke('views', 'block', 'view', 'block_name');
print $block['content'];

Однако использование тех же инструкций в Drupal 7, похоже, не работает. Я посмотрел вокруг и не могу найти новый метод.

Есть ли в Drupal 7 подпрограмма, позволяющая программно вставлять блок в шаблон или узел?

Ответы [ 15 ]

1 голос
/ 25 января 2016

Есть модуль с именем insert_block для тех, кто хочет вставить блок "Drupal way" (не программировать ничего, просто включить модуль). Здесь , как его настроить.

ПРИМЕЧАНИЕ: Я знаю, что этот вопрос касается "программной вставки блока в шаблон илиузел ", но Google отправляет сюда людей, даже если они ищут не программистское решение, как я.

1 голос
/ 26 марта 2014
 $block = module_invoke('menu_block', 'block_view', '6');
 echo render ($block['content']);

Это работает для меня для печати меню блока.

0 голосов
/ 08 июня 2018

module_invoke Работает нормально для блока визуализации в файле шаблона, но не работает многоязычные сайты.

0 голосов
/ 10 февраля 2016

Недавно я столкнулся с той же проблемой и наткнулся на хорошее решение, которое описывает решение в drupal как путь drupal.

Вы можете печатать регионы внутри любого шаблона, но они не доступны из коробки в шаблоне node.tpl.php. Чтобы сделать их доступными, вы создадите новую переменную для использования в шаблоне node.tpl.php, которая будет содержать все содержимое региона.

Создание новых переменных шаблона выполняется с помощью функции предварительной обработки. В файле template.php вашей темы создайте функцию, которая выглядит следующим образом:

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 - это название региона, который вы хотите визуализировать.

Прочитать статью полностью здесь: https://drupal.stackexchange.com/questions/20054/can-regions-be-printed-within-a-node-template

0 голосов
/ 19 января 2011

Посмотрите, как это делает Drupal в _block_render_blocks .Результат этой функции передается drupal_render .

...