Как вставить блок в ноду или шаблон Drupal 7

Иногда приходится делать такую штуку, как вставка блока в ноду или шаблон и чтобы не забыть, как, сделаю эту заметку.

Самый удобный и кошерный метод для вставки блока в ноду — использовать модуль insert block. Это хорошо тем, что не нужен никакой php и можно смело давать управление всем этим хозяйством редактору сайта, даже если он блондинка.

Использовать блок следует так:

Если на странице редактирования блока ссылка на него вот такая: /admin/structure/block/manage/yamaps/yamaps/configure, то вставлять блок нужно так:

  1. [block:yamaps=yamaps]

Если же использовать модуль мы не хотим, то к нам на помощь приходит php и вот такой снипет для того же примера:

  1. <?php print render(module_invoke('yamaps', 'block_view', 'yamaps')); ?>

Самое замечательное во всем этом, что сам блок выводить в каком либо регионе не обязательно, вы можете использовать его как в нодах, так в попапах или в шаблонах страниц.

P.S. Иногда такой вариант выдает ошибку и помогает замена на вот такой вывод, правда в этом случае выводится только содеражимое блока без заголовка

  1. $block = module_invoke('block', 'block_view', 'block_delta');
  2. print render($block['content']);

Вывести блок вместе с заголовком и всякими контекстными ссылками можно вот таким сниппетом

  1. $block = block_load('block', 'block_delta');
  2. $block_content = _block_render_blocks(array($block));
  3. $build = _block_get_renderable_array($block_content);
  4. print drupal_render($build);

Чтобы вывести только контент блока, нужно добавить перед рендером одну строку

  1. unset($blocks_build['block' . '_' . 'block_delta']['#theme_wrappers']);

А вот так можно вставить в ноду блок построенный на views:

  1. <?php
  2. $args = array("array_of_arguments");
  3. $view = views_get_view('view_name');
  4. print $view->preview('block', $args);
  5. ?>