Разработка модулей Drupal

Материал из Newman's WiKi.

Перейти к: навигация, поиск

Содержание

Общая информация

Основная функциональность Drupal выполняется с помощью модулей. Модули бывают системные, или так называемые модули ядра -- core и дополнительные -- core-optional. Распологаться модули могут либо непосредственно в папке modules внутри framework'а либо в папке modules относительно сайтов работающих на данной установке. Имя модуля определяет имя папки внутри которой находятся все необходимые файлы. Так для модуля modulename все файлы будут находиться в папке modules/modulename. К выбору названия модуля следует относится с осторожностью. Это должно быть уникальное (по крайней мере для данной системы) имя и в нем могут быть использованы только символы латиницы и цифры.

В простейшем случае для работы модуля Drupal необходимо два файла:

  • modulename.info - файл описания модуля
  • modulename.module - файл с кодом модуля

Грабли: без вышеуказанных файлов Drupal даже не определит папку как модуль.

Также могут потребоваться следующие файлы:

  • modulename.install - файл установки и инициализации
  • ...

Файл описания модуля Drupal

В каждой папке с модулем должен находится файл modulename.info. Этот файл описывает параметры модуля и его взаимодействие с Drupal. Так же там находится информация для администратора сайта на Drupal.

Этот файл имеет следующий формат:

name = modulename
description = Description of module.
package = Core - optional
version = VERSION
core = 6.x

Параметры name и description могут содержать произвольный текст и отображаются в списке модулей, который видит администратор сайта.

package задает тим модуля. Либо это системный модуль Drupal (Core), либо это дополнительный модуль (Core - optional)

core определяет версию ядра Drupal с которой может работать данный модуль.

Еще может присутствовать информация о зависимости модулей. Указываются модули от которых зависит создаваемый модуль. Ниже приведена строка указывающая что создаваемый модуль требует для своей работы модуль комментариев.

dependencies[] = comment


Помимо этих строк могут быть строки добавленные системой версий и другая служебная информация.

Установка и инициализация модуля

Функции для установки и деинсталяции модуля указываются в файле modules/modulename/modulename.install.

При отладке возможны грабли. Функция установки может не сработать если до этого не была проведена корректное отключение модуля. В этом случае Drupal клинит и он считает что install вызывать не надо. Лечится удалением соответствующей строки из таблицы system.

Код модуля

Основной код модуля находится в файле modulename.module.

Хуки

Базовая логика модуля строится на использовании функций хуков (hook_). В системе существует ряд системных функций с префиксом hook_. Внутри модуля есть возможность задавать свои функции, которые будут переопределять поведение и работу системы. Переопределение происходит довольно просто - в код модуля добавляется определение и реализации функции, но только у с указанием названия модуля в качестве префикса.

Например есть стандартная функция позволяющая задать системное меню. Она называется hook_menu(). Если внутри модуля надо что-то сделать с меню, то надо опеределить функцию для этого. Ее имя будет modulename_menu(). Функция будут вызвана автоматически ядром Drupal. Т.е. никаких дополнительных вызовов делать не надо.

Меню

Для того чтобы добавить пункт в меню, надо использовать функцию hook_menu. Самый простой вариант это использовать следующий код:

function modulename_menu() {
  $items['modulename'] = array(
    'title' => t('Module'),
    'access callback' => TRUE,
    'page callback' => '_module_function',
  );
  return $items;
}

Для более сложных вариантов (например добавить пункт в уже существующие меню) нужно добавить следующий код:

  $items["admin/content/modulename"] = array(
    "title" => "Modulename",
    "access arguments" => array('administer site configuration'),
    "position" => "left",
    "page callback" => "_module_block_page",
  );

По сути пункты меню также являются некими "обработчиками" ссылок. Эти ссылка являются ключами при добавлении записей в массив $items. page_callback определяет функцию, которая будет вызываться при переходе на указаный пункт меню.

Внутри одной функции modulename_menu Можно добавлять сколько угодно пунктов меню.

После любых изменений в hook_menu следует обновить кэш системы. Иначе изменения могут не сработать.

Личные инструменты