Вставка блоков в страницы 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 10 лет назад

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

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

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

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

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

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

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

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

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

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

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

Аватар пользователя 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 6 месяцев назад

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

?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 6 месяцев назад

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

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