Вставка блоков в страницы Drupal

Аватар пользователя Химический Али

Для вставки блоков следует использовать PHP-код в теле страницы, поэтому перед проверкой примера убедитесь, что выбрали формат ввода "PHP код".

Создайте блок с любым необходимым содержимым. Теперь нам следует использовать функцию module_invoke() для показа блока "внутри" страницы. Обратите внимание, что "7" — это ID блока, созданного нами на странице admin -> blocks.

Вставьте такой код в нужном месте тела страницы:


<?php
$block 
module_invoke('block''block''view'7);
print 
$block['content'];
?> 

Готово. Сохраняйте страницу и любуйтесь результатом. В принципе, такую технику можно использовать для вставки блоков в любом шаблоне *.tpl.php вашей темы.

Написал, т.к. встречал вчера или сегодня чье-то пожелание по раскрытию этой темы.

Использованная литература и доп. примеры: http://drupal.org/node/26502

Версия Drupal:
0 Thanks

Комментарии

Аватар пользователя beerman
beerman 9 лет назад

Я бы черезвычайно настойчиво рекомендовал бы опасаться хранения пхп-кода в базе. Поэтому
такую технику можно нужно использовать для вставки блоков в любом шаблоне *.tpl.php вашей темы.

Аватар пользователя Nikit
Nikit 9 лет назад

уточню, что если блок построен модулем, то $block = module_invoke('модульблока', 'block', 'view', 7);

Аватар пользователя LeonidT
LeonidT 9 лет назад

Спасибо! Пригодится.

Аватар пользователя PVasili
PVasili 9 лет назад

Возможно мой вопрос.
Решение не совсем понятно... и очень ограниченно.
1) Я не могу позволить использовать PHP тип в материале...
Хотелось бы отделить мух вводимый материал от катлет PHP
2) Смысл использования этого маневра в шаблоне? Я могу в ini(для 6.х) добавить regions[header] = Header

Аватар пользователя Химический Али
Химический Али 9 лет назад

Это решение, разумеется, не для распространения среди пользователей. Это для случаев, когда регионы неприменимы.

Аватар пользователя volocuga
volocuga 9 лет назад

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

Аватар пользователя Barcelona
Barcelona 9 лет назад

а как при вставке сохранить сворачиваемость блока?
вставляю путем print $block['content'];, но вставляется только содержание, а свойство collapsible теряется...

Аватар пользователя Nikit
Nikit 9 лет назад
Barcelona написал:
а как при вставке сохранить сворачиваемость блока?
вставляю путем print $block['content'];, но вставляется только содержание, а свойство collapsible теряется...

может это: http://keven.squad5.net/code/drupal/using-jquery-with-drupal/collapsible...
там часть "Modifying block.tpl.php"

Аватар пользователя Green Chest
Green Chest 9 лет назад

Спасибо за материал.
Имеенно это мне нужно.

Только вот у функции:

  module_invoke('block', 'block', 'view', 7);

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

Аватар пользователя moroz6600
moroz6600 8 лет назад

Здравствуйте. Возник вопрос -
функция print $block['content'] выводит само тело блока. А как заставить выводить всю структуру блока - вместе с названием?

Аватар пользователя gnm@drupal.org
gnm@drupal.org 8 лет назад

Блок созданный пользователем выводится на ура, однако никак не удается вывести блок созданный модулем imagemenu. Прошу помочь разобраться на примере. Я пишу

<?php
$block 
module_invoke('imagemenu''block''view'block-imagemenu-1);
print 
$block['content'];
?> 

Результата нет. Где ошибка? Аналогичные проблемы при попытке вывести блок, созданный Views и любым другим модулем.

Аватар пользователя gnm@drupal.org
gnm@drupal.org 8 лет назад

Разобрался. Правильный ответ:

<?php
$block 
module_invoke('imagemenu''block''view'1);
print 
$block['content'];
?> 
Аватар пользователя marigolu
marigolu 4 месяца назад

Подскажите пожалуйста, как в теле страницы вывести блок:
Вот его параметры при редактировании:

?q=ru#overlay=%3Fq%3Dru%252Fadmin%252Fstructure%252Fblock%252Fmanage%252Fwebform%252Fclient-block-26%252Fconfigure%26destination%3Dnode

Следующий код не выводит ничего:

<?
$block = module_invoke('webform', 'block', 'view', 26);
//$block = module_invoke('block', 'block', 'view', 26); // тоже не выводит
print $block['content'];
?>
Аватар пользователя fairrandir
fairrandir 4 месяца назад

Ну дык и код для шестой версии. Правильно:

<?php
$block 
module_invoke('webform''block_view'26);
?>