Программно вывести блок на Drupal - module_invoke, block_load

Для программного вывода блоков на drupal необходимо использовать ф-ыю module_invoke. Сразу оговорюсь, что эту функцию можно использовать не только для вывода блоков. Что нам нужно знать чтобы вывести блок? Функция принимает 3 параметра:


$module: Модуль к которому принадлежит блок.
$hook: Хук который мы вызываем, для вывода блока "block_view".
$block_name: Имя блока.
В итоге получаем для вывода блока, созданного модулем views с именем "news-block", необходимо написать следующий код:

$block = module_invoke('views', 'block_view', 'news-block');
echo $block['subject']; //Заголовок блока
echo $block['content']; //Содержимое
Для вывода блока webform с именем client-block-6:

$block = module_invoke('webform', 'block_view', 'client-block-6');
echo $block['subject'];
echo $block['content'];
Для drupal 6 это будет выглядеть немного по другому:

$block = module_invoke('views', 'block', 'view', 'news-block');
echo $block['subject'];
echo $block['content'];
Более подробное описание ф-ыи можно посмотреть тут drupal.org - module_invoke Есть второй метод вывода блока используя block_load(), на мой взгляд он лучше тем что выводит полностью с Contextual links и с учетом кеша. Нужных параметра только два: имя блока и имя модуля.

$block = block_load('webform', 'client-block-6');
$block_content = _block_render_blocks(array($block));
$build = _block_get_renderable_array($block_content);
print drupal_render($build);
Более подробное описание ф-ыи можно посмотреть тут drupal.org - block_load
Теги: Drupal 7
Новости