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: Блок не нужно кешировать.
      Заметим, что для пользователя #1 блоки никогда не кешируются.
    • '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() - это функция, которая создает и возвращает контент блока.

Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Вход в систему