→ Как вывести любой блок в любом месте (D7-8)

$block = module_invoke('имя_модуля', название_хука, delta);

название_хука — (в отличие от D6, где мы бы написали 'block', 'view'), теперь делается проще Широкая улыбка : 'block_view'

Вывести пользовательский блок

Т.е. чтобы вывести пользовательский блок под номером 1, делаем так:

<?php
$block = module_invoke('block', 'block_view', '1');
print $block['content'];
?>

Вывести блок предоставленный модулем

Если же блок конкретного модуля всего один, то дельту можно вообще не указывать. На примере ниже показано, как вывести блок поиска в drupal 7:

<?php
$block = module_invoke('search', 'block_view');
print render($block['content']);
?>

В отличие от вывода простого текстового блока, для многих других блоков нужно использовать render(), иначе вы увидите не более чем Array. Подмигивание

Вывести блок из views

Ну, тут, тоже все просто и по тому же принципу: module_invoke('имя_модуля', название_хука, delta).

Например, выводим блок из представления (т.е. views) с названием 'comments_recent':

$block = module_invoke('views', 'block_view', 'comments_recent-block');
print render($block['content']);

RSS-материал

4 Комментария [Нет новых]

Аватар пользователя SergO

Погорячился, так работает, но ругается. Надо было как и в примерах статьи - через переменную:

$block = module_invoke('menu', 'block_view', 'menu-catalog');
print render($block['content']);

Аватар пользователя SergO

Спасибо, пригодилось.
Дополню - вариант для вывода произвольного меню (напр. 'menu-namemenu'):
render(module_invoke('menu', 'block_view', 'menu-namemenu');

Аватар пользователя vector

Тема раскрыта не полностью. Что насчет блоков из views? Подмигивание

Аватар пользователя EllECTRONC

Да, действительно, на api.drupal.org (http://api.drupal.org/api/drupal/includes--module.inc/functi...) и то написала, а у себя забыла.

Добавила в пост о блоках, созданных во views.

Что ты об этом думаешь?

МультиВход
ИЛИ

Комментарии