xandeadx.ru Блог музицирующего веб-девелопера

Drupal → Как программно вывести блок

Опубликовано в

Drupal 6

$block = module_invoke($module_name, 'block', 'view', $block_delta);
echo $block['content'];

Где $module_name это имя модуля, в котором определён блок, а $block_delta — номер блока. Эти параметры можно посмотреть в адресной строке при настройке блока (скриншот).

Пример вывода содержимого блока с идентификатором 6, созданного из админки (admin/build/block/add):

$block = module_invoke('block', 'block', 'view', 6);
echo $block['content'];

Вывод блока "Сейчас на сайте":

$block = module_invoke('user', 'block', 'view', 3);
echo $block['content'];

Вывод блока "Основное меню":

$block = module_invoke('menu', 'block', 'view', 'primary-links');
echo $block['content'];

Drupal 7

Вывести только контент блока:

$block = module_invoke($module_name, 'block_view', $block_delta);
echo render($block['content']);

Вывести блок полностью с заголовком и контекстными ссылками:

$block = block_load($module_name, $block_delta);
$block = _block_render_blocks(array($block));
$block_build = _block_get_renderable_array($block);
echo drupal_render($block_build);

Подробнее на drupal.org.

Написанное актуально для Drupal 6, Drupal 7
Похожие записи

Комментарии RSS

Почему-то все модули отличный от block возвращают помимо содержимого блока и заголовок, а block - нет (может только у меня, но в недрах кода самого модуля вроде тоже упоминается только содержимое)

$block = module_invoke('block', 'block', 'view', 5);

Добавлю от себя капельку света:
Для того, чтобы вывести программно блок, созданный модулем, код будет таким:

$block = module_invoke('название_модуля', 'block', 'view', 'название_блока'); ?>
    print $block['content'];

К примеру, выводя блок, созданный модулем views - similar by terms, пишем такой код:

$block = module_invoke('views', 'block', 'view', 'Similarterms_viewname-block_1'); ?>
    print $block['content'];
(название блока смотрим таким же образом

Спасибо, то что нужно!

Может вы сможете дать мне совет.
Сделала блок программно: выборка из базы данных изображений ноды и столкнулась с такой проблемой - на части страниц блок работает, на части только альтернативный текст изображений. Код следующий:
<?php
while ($date = db_fetch_object($query_result)) {
$imgpath = $date->filepath;
$img_tag = "";
$block_content.=$img_tag;
}// end while
?>
Права доступа проверила, фильтры тоже, а в чем проблема, не пойму.

Стоит модуль "Popup" который показывает блок с "webform".
если я задаю:
<?php $block = module_invoke('webform', 'block_view', 'client-block-999');
echo render($block['content']); ?>
то выводится сама форма а не ссылка при нажатии на которую должна появиться форма.
Подскажите что прописать чтобы отображалась именно ссылка модуля "Popup".
з.ы. Блок с формой настроен именно на отображение с помощью Popup.

А кэширование при программном выводе работает?

Мне кажется вот так "правильнее" в D7 блоки выводить:

  $block = block_load('search', 'form');
  $block_content = _block_render_blocks(array($block));
  $build = _block_get_renderable_array($block_content);
  print drupal_render($build);

он и с кэшем будет и с Contextual links

А можно ли в D7 подобным образом вывести в содержимом блоком форму добавления ноды? /node/add/blog к примеру

Хотел бы рассказать про модуль context - пользуются им многие аж 184 тыс. У вас на сайте про него я ни чего не нашел, может плохо искал ;-)
Пишу про него на этой странице, так как он, например, может вывести блок в разных местах в зависимости от условий. Мне вот понадобилось вывести блок в левой колонке на всех страницах, кроме главной, а на главной в нём написал быстро условие и вывел в другой области. Без php и удобно.

По поводу модуля "Popup" который показывает блок с "webform".
вывел вот так:

<?php 
$block = block_load('webform', 'client-block-5');
$block_content = _block_render_blocks(array($block));
$build = _block_get_renderable_array($block_content);
print drupal_render($build); 
?>

Спасибо webpavilion!
Коммент http://xandeadx.ru/blog/drupal/133#comment-9210

Мне кажется вот так "правильнее" в D7 блоки выводить:

$block = block_load('search', 'form');
$block_content = _block_render_blocks(array($block));
$build = _block_get_renderable_array($block_content);
print drupal_render($build);
он и с кэшем будет и с Contextual links

никак не мог вывести стандартный блок search так, как выводит сам Drupal при добавлении блока в регион через UI

Спасибо Krio.in выручил, знать бы как работает?

<?php 
$block = block_load('webform', 'client-block-5');
$block_content = _block_render_blocks(array($block));
$build = _block_get_renderable_array($block_content);
print drupal_render($build); 
?>

Оставить комментарий

Содержимое этого поля является приватным и не будет отображаться публично. Если у вас есть аккаунт в Gravatar, привязанный к этому e-mail адресу, то он будет использован для отображения аватара.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступные HTML теги: <a> <i> <b> <strong> <code> <ul> <ol> <li> <blockquote> <em> <s>
  • Строки и параграфы переносятся автоматически.
  • Подсветка кода осуществляется с помощью тегов: <code>, <css>, <html>, <ini>, <javascript>, <sql>, <php>. Поддерживаемые стили выделения кода: <foo>, [foo].

Подробнее о форматировании