hook_block
developer/hooks/core.php, строка 169
- Версии
- 5 – 6
hook_block($op = 'list', $delta = 0, $edit = array())
Определяет блок или набор блоков.
Любой модуль может добавить свои блоки, определив их в hook_block. Этот хук вызывается в theme.inc при отображении блоков, а также в block.module для показа списка доступных блоков.
После завершения написания ваших блоков, не забывайте включить их в разделе администрирования блоков на сайте.
Подробный пример использования можно посмотреть в block_example.module.
Параметры
$op
Какого рода информацию о блоках требуется вернуть. Возможные значения:
'list'
: Список всех блоков данного модуля.'configure'
: Форм настроек для блока.'save'
: Сохранить настройки блока.'view'
: Требуется вернуть содержимое блока для отображения в нужном разделе страницы.
$delta
Информацию о каком блоке нужно вернуть (для всех операций $op
кроме 'list'
). Хотя чаще всего блоки нумеруются целыми числами начиная с нуля
, но это не обязательно. К примеру, модуль aggregator.module использует строки в качестве значений $delta
.
$edit
Если $op
равно 'save'
, в этом параметре хранятся данные из формы настройки. В остальных случаях массив пуст.
Возвращаемое значение
$op = 'list'
: Массив с описаниями всех блоков модуля. Каждое из описаний это ассоциативный массив с такими ключами:'info'
: (обязательно) Имя блока для отображения в административном интерфейсе.'cache'
: Флаги, описывающае поведение блока с точки зрения системы кеширования. Модуль block.module определяет таки флаги:BLOCK_CACHE_PER_ROLE
(значение по умолчанию): Содержимое блока меняется в зависимости от роли пользователя, просматривающего его.BLOCK_CACHE_PER_USER
: Содержимое блока меняется в зависимости от пользователя, просматривающего блок. Блок с этим флагом может потребовать очень много ресурсов для отображения, особенно для крупных сайтом, поэтому этот флаг стоит использовать только в случае, если флагBLOCK_CACHE_PER_ROLE
использовать нельзя.BLOCK_CACHE_PER_PAGE
: Содержимое блока меняется в зависимости от страницы, на которой он отображается.BLOCK_CACHE_GLOBAL
: Содержимое блока не зависит ни от пользователя, просматривающего блок, ни от страницы, на которой блок отображен.BLOCK_NO_CACHE
: Блок не нужно кешировать.
'weight'
,'status'
,'region'
,'visibility'
,'pages'
: Для блока (заданного параметром$delta
) можно явно указать вес, включить/выключить его, ограничить отображение только на заданных страницах, и т.п. Эти установки вступят в действие при первом отображении блока в интерфейсе администрирования, после чего администратор сможет их изменить.Заметим, что если для блока задано отображение в области, отсутствующей в данной теме, блок будет помещен в область по умолчанию (первый элемент массива
_regions
в описании темы).
$op = 'configure'
: Необязательная форма настройки для блока.$op = 'save'
: Ничего.$op = 'view'
: Ассоциативный массив, описывающий блок (заданный параметром$delta
). Ключ'subject'
этого массива должен задавать заголовок блока, а'content'
— его содержимое. Если значение'content'
будет пустым, блок не выведется, даже если'subject'
будет заполнен.
Связанные темы
Код
<?php
function hook_block($op = 'list', $delta = 0, $edit = array()) {
if ($op == 'list') {
$blocks[0] = array('info' => t('Mymodule block #1 shows ...'),
'weight' => 0, 'status' => 1, 'region' => 'left');
// BLOCK_CACHE_PER_ROLE will be assumed for block 0.
$blocks[1] = array('info' => t('Mymodule block #2 describes ...'),
'cache' => BLOCK_CACHE_PER_ROLE | BLOCK_CACHE_PER_PAGE);
return $blocks;
}
else if ($op == 'configure' && $delta == 0) {
$form['items'] = array(
'#type' => 'select',
'#title' => t('Number of items'),
'#default_value' => variable_get('mymodule_block_items', 0),
'#options' => array('1', '2', '3'),
);
return $form;
}
else if ($op == 'save' && $delta == 0) {
variable_set('mymodule_block_items', $edit['items']);
}
else if ($op == 'view') {
switch($delta) {
case 0:
$block = array('subject' => t('Title of block #1'),
'content' => mymodule_display_block_1());
break;
case 1:
$block = array('subject' => t('Title of block #2'),
'content' => mymodule_display_block_2());
break;
}
return $block;
}
}
?>
$block = array('subject' => t('Title of block #2'),
'content' => mymodule_display_block_2());
что значит "mymodule_display_block_2());"?????????
и как ее лучше описать?
mymodule_display_block_2() - это функция, которая создает и возвращает контент блока.