Статьи

Програмне створення блоку в Drupal 7

У цій замітці ми розглянемо процес програмного створення блоку за допомогою хуков hook_block_info (), hook_block_view (), hook_block_configure () і hook_block_save () на прикладі блоку містить слоган сайту так як за замовчуванням такого блоку в Drupal 7 нету.

Для цієї мети ми напишемо невеликий модуль Slogan block (машинне ім'я sb).

Насамперед створимо файл sb.info:

name = Slogan block description = Add block with site slogan. core = 7. x package = Custom

Також створимо порожній файл sb.module і включимо наш новий модуль.

module і включимо наш новий модуль

Для того щоб оголосити новий блок додамо в файл sb.module хук hook_block_info ():

/ ** * Implements hook_block_info (). * / Function sb_block_info () {$ blocks [ 'site_slogan'] = array ( 'info' => t ( 'Site slogan'), 'cache' => DRUPAL_CACHE_GLOBAL,); return $ blocks; } hook_block_info () - оголошує блоки надаються модулем і встановлює для них налаштування за замовчуванням.

Тепер поставимо нашому сайту тестовий слоган в розділі Site information:

Тепер поставимо нашому сайту тестовий слоган в розділі Site information:

Наступним кроком очистимо кеш і розмістимо блок Site slogan в регіон First sidebar:

Наступним кроком очистимо кеш і розмістимо блок Site slogan в регіон First sidebar:

На даному етапі блок розміщений в регіон і слоган сайту заданий, але нічого не відображається буде так як Drupal не знає що потрібно виводити в цей блок. Для цієї мети ми використовуємо hook_block_view ().

Додамо в файл sb.module наступний код:

/ ** * Implements hook_block_view (). * / Function sb_block_view ($ delta = '') {$ block = array (); switch ($ delta) {case 'site_slogan': $ block [ 'subject'] = t ( 'Site slogan'); $ Block [ 'content'] = variable_get ( 'site_slogan', ''); break; } Return $ block; } hook_block_view () - повертає вміст блоку. Параметр $ delta - унікальний індентіфікатор блоку надається hook_block_info () (в нашому випадку це site_slogan).

Після чергової очищення кешу бачимо відображення нашого блоку на сайті:

За замовчуванням програмно створені блоки мають ті ж самі настройки що і будь-який інший блок: настройки видимості, заголовок блоку і т.д., але ми можемо додавати свої додаткові настройки. В даному випадку буде зручно якщо ми будемо мати можливість редагувати слоган сайту прямо на формі редагування цього блоку.

Для цієї мети ми використовуємо хукі hook_block_configure () і hook_block_save.

Додамо в файл sb.module наступний код:

/ ** * Implements hook_block_configure (). * / Function sb_block_configure ($ delta = '') {$ form = array (); if ($ delta == 'site_slogan') {$ form [ 'site_slogan'] = array ( '#type' => 'textfield', '#title' => t ( 'Site slogan'), '#default_value' = > variable_get ( 'site_slogan', ''),); } Return $ form; } / ** * Implements hook_block_save (). * / Function sb_block_save ($ delta = '', $ edit = array ()) {if ($ delta == 'site_slogan') {variable_set ( 'site_slogan', $ edit [ 'site_slogan']); }} hook_block_configure () - оголошує форму настройки блоку. Параметр $ delta - теж що і для hook_block_view (). hook_block_save () - надає обробник даних прийшли з форми оголошеної в hook_block_configure (). Параметри: $ delta - теж що і для hook_block_view (), $ edit - містить дані прийшли з форми конфігурації блоку.

Так як ми оголосили два нових хука знову чистимо кеш і переходимо на форму редагування блоку Site slogan:

Як бачимо на формі присутній доданий поле Site slogan. Далі змінимо його значення і збережемо форму.

Слоган оновився, значить форма працює правильно.

Повний лістинг файлу sb.module:

<? Php / ** * Implements hook_block_info (). * / Function sb_block_info () {$ blocks [ 'site_slogan'] = array ( 'info' => t ( 'Site slogan'), 'cache' => DRUPAL_CACHE_GLOBAL,); return $ blocks; } / ** * Implements hook_block_view (). * / Function sb_block_view ($ delta = '') {$ block = array (); switch ($ delta) {case 'site_slogan': $ block [ 'subject'] = t ( 'Site slogan'); $ Block [ 'content'] = variable_get ( 'site_slogan', ''); break; } Return $ block; } / ** * Implements hook_block_configure (). * / Function sb_block_configure ($ delta = '') {$ form = array (); if ($ delta == 'site_slogan') {$ form [ 'site_slogan'] = array ( '#type' => 'textfield', '#title' => t ( 'Site slogan'), '#default_value' = > variable_get ( 'site_slogan', ''),); } Return $ form; } / ** * Implements hook_block_save (). * / Function sb_block_save ($ delta = '', $ edit = array ()) {if ($ delta == 'site_slogan') {variable_set ( 'site_slogan', $ edit [ 'site_slogan']); }}

Новости