Создание блока программно
Для создания блока в drupal 7 необходимо использовать два Хука
MYMODULENAME_block_view() // для генерации контента блока
MYMODULENAME_block_save() // для дополнительных действий по сохранению данных из дополнительных элементов формы
* Реализация hook_block_info().
*/
function demo_block_info() {
$blocks['demo'] = array(
'info' => 'Первый блок, который вы создали самостоятельно ',
);
return $blocks;
}
- 'demo' - дельта (машинное имя) блока, служит для того чтобы отличать блоки друг от друга в процессе, рекомендуется чтобы дельта начиналась с имени модуля который объявляет блок
Хук возвращает ассоциированный массив дескрипторов блоков c cледующими ключами
- info: (обязательно) - "Человеческое" имя блока для страницы администрирования блоков в админ части сайта
- cache: определяет вид кеширования блока
- DRUPAL_CACHE_PER_ROLE (default) по ролям пользователя
- DRUPAL_CACHE_PER_USER: по пользователям.
- DRUPAL_CACHE_PER_PAGE: по странично
- DRUPAL_CACHE_GLOBAL: глобально в пределах сайта
- DRUPAL_CACHE_CUSTOM: Модули самостоятельно определяют механизм кеширования.
- DRUPAL_NO_CACHE: Не кешировать.
- properties:Дополнительные метаданные блока
- administrative:Логический флаг опредяющий что блок используется в административной части сайта
- weight: Вес блока
- status: Состояние блока. (1 = включен, 0 = выключен)
- region: Первоначальный регион в котором показывается блок
- visibility: Видимость блока
- BLOCK_VISIBILITY_NOTLISTED: Показывать на всех страницах кроме перечисленных
- BLOCK_VISIBILITY_LISTED: Не показывать на всех страницах кроме перечисленных
- BLOCK_VISIBILITY_PHP: определяется PHP кодом ( не рекомендуется использовать)
- pages: Если visibility BLOCK_VISIBILITY_NOTLISTED или BLOCK_VISIBILITY_LISTED стока путей разделенная '\n', '\r', или '\r\n' , или PHP код если 'visibility' = BLOCK_VISIBILITY_PHP. Пути могут включать '*' '
' . Для BLOCK_VISIBILITY_PHP, если PHP код возвращает TRUE блок будет показан, если FALSE блок будет скрыт.
Рекомендуется вместо visibility BLOCK_VISIBILITY_PHP использовать хук
генерация контента блока (желательно использовать Render API для генерации контента блока)
* Реализация hook_block_view().
*/
function demo_block_view($delta = '') {
switch ($delta):
case 'demo':
$block['subject'] = 'Пример'; // - заголовок блока во фронтенде.
$block['content'] =
'Содержимое переменной
Текст
: '.variable_get('demo_text', '');
break;
endswitch;
return $block;
}
блок конфигурации блока, Любой блок имеет собственную стандартную форму конфигурации в которую можно добавить дополнительные поля как обычно в Form API
/**
* Реализация hook_block_configure().
*/
function demo_block_configure($delta = '') {
$form = array();
switch ($delta):
case 'demo':
$block = block_load('demo', 'demo');
$form['demo_text'] = array(
'#type' => 'textfield',
'#title' => 'Текст',
'#description' => 'Впишите сюда одну строчку любого текста.',
'#default_value' => variable_get('demo_text', '')
);
/*
Здесь могут располагаться различные элементы формы:
вкладки, кнопки, радиокнопки, списки и т.п.
*/
break;
endswitch;
return $form;
}
хук сохранения данных из формы конфигурации блока (эквивалентен Hook_form_submit() в Form API) $edit - данные которые пользователь ввел в форме
* Реализация hook_block_save().
*/
function demo_block_save($delta = '', $edit = array()) {
switch ($delta):
case 'demo':
variable_set('demo_text', $edit['demo_text']);
break;
endswitch;
}
Injoy!
- Войдите чтобы оставить комментарии