Программное создание блока в Drupal 7


Опубликовано чт, 09/08/2011 - 17:53 пользователем iflight

Теги 

Drupal 7, hook, Drupal API
Tweet
Программное создание блока в Drupal 7

API Drupal 7 и система hook-ов, не так сложны как кажутся на первый взгляд, хотя и не так просты, как, возможно, хотелось бы. Так что я начну понемногу рассказывать о них. Зачастую это будут простейшие примеры, и кто то скажет что уж слишком просто, но именно их по началу так не хватает. Сегодня я покажу как программно, с помощью хуков, создать простейший блок.

Для того, чтобы создать свой блок программно, нужно создать простой модуль, как это сделать можно посмотреть в конце этого поста. После создания модуля, весь приведенный ниже код должен размещаться в файле modulename.module.

Для работы с блоками существует около десяти хуков, нам потребуются два из них - hook_block_info(); и hook_block_view();.

hook_block_info()

Этот хук сообщает Drupal о новом блоке или блоках и о некоторых их параметрах. Хуку не передается никаких переменных, а возвращать он должен ассоциативный массив, каждый ключ которого является дельтой (delta) нового блока. Для каждого блока должен быть определен еще один ассоциативный массив, со следующими элементами:

  • 'info' - единственный обязательный элемент, содержащий имя блока, которое будет отображаться в списке блоков.
  • 'cache' - параметры кэширования блока, может принимать значения:
    • DRUPAL_CACHE_PER_ROLE (по умолчанию) - Блок кэшируется для ролей.
    • DRUPAL_CACHE_PER_USER - Блок кэшируется для каждого пользователя. Очень ресурсоемкая настройка.
    • DRUPAL_CACHE_PER_PAGE - Блок кэшируется для каждой страницы.
    • DRUPAL_CACHE_GLOBAL - Блок кэшируется для всех страниц сразу.
    • DRUPAL_NO_CACHE - Блок не кэшируется.
  • 'properties' - Массив с дополнительными данными. Включает элемент 'administrative' - булево значение, указывающее на использование блока в админке.
  • 'weight' - вес блока.
  • 'status' - статус блока (1 - включен, 0 - выключен).
  • 'region' - регион в котором расположен блок.
  • 'visibility' - флаг видимости, может принимать следующие значения:
    • BLOCK_VISIBILITY_NOTLISTED - отображать на всех страницах кроме перечисленных.
    • BLOCK_VISIBILITY_LISTED - отображать только на перечисленных страницах.
    • BLOCK_VISIBILITY_PHP - использовать PHP код, для определения показывать блок или нет.
  • 'pages' - условия показа блока в соответствии со значением 'visibility'.

Простейшая реализация этого хука выглядит так:

/**
* Implements hook_block_info().
*/

function modulename_block_info() {
  $blocks = array();
  $blocks['test_block'] = array(
      'info' => t('This is test block'),
      'cache' => DRUPAL_NO_CACHE,
    );
  return $blocks;
}

Данный код создает некэшируемый блок с дельтой 'test_block' и отображающийся в списке модулей как 'This is test block'. Далее этот блок необходимо показать, этим займется следующий хук.

hook_block_view()

Данный хук отображает блоки, непосредственно на сайте. Входящими данными хуку передается дельта блока, та самая, которую мы указывали в предыдущем хуке. Возвращать хук должен ассоциативный массив с двумя элементами:

  • 'subject' - заголовок блока. Если заголовка нет, то элемент должен содержать значение NULL.
  • 'content' - содержимое блока.

Реализация этого хука выглядит так:

/**
* Implements hook_block_view().
*/

function first_block_view($delta = '') {
  if ($delta == 'test_block') {
    $content = 'Content of test block.<br>Bla, bla, bla.';
    $block = array(
        'subject' => t('Test Block'),
        'content' => $content,
      );
  }
}

Теперь, активировав созданный нами модуль, в списке блоков можно увидеть блок 'This is the test block', а включив его, на сайте появится блок с заголовком 'Test Block' и указанным контентом.

Для создания нескольких блоков с помощью одного модуля, в хуке hook_block_info(), возвращаемому массиву надо задать столько элементов, сколько необходимо блоков, а в хуке hook_block_view() вернуть результат при всех заданных ранее дельта.

Спонсор статьи сайт недвижимости Украины, который поможет решить проблемы с жильем, такие как, например, аренда квартир Харьков, а так же в других городах Украины.

Если вам понравился мой блог не забудте подписаться на RSS или мой микроблог в Twitter.