Разработка модуля для Drupal. Часть1. Введение
Система управления сайтом Drupal построена по модульному принципу: компактный набор служебных функций (ядро) расширяется при помощи модулей — файлов с PHP-кодом. Модули должны содержать «хуки» (hooks) — особым образом именованные функции, которые вызываются ядром Drupal при возникновении каких-либо событий. Каждый модуль имеет системное имя, которое должно состоять из латинских букв, цифр, знака подчеркивания (и начинаться обязательно с буквы). Имя хука должно состоять из двух частей: имени модуля и названия события. При возникновении любого события ядро Drupal в каждом из установленных модулей ищет и выполняет соответствующую функцию, т. е. функцию с именем название_модуля_название_события. Например, при возникновении событий, связанных с учетной записью пользователя (регистрация, авторизация, изменение роли пользователя и др.), ядро Drupal вызывает функции, реализующие хук hook_user, поэтому, чтобы модуль с именем **example **мог отреагировать на это событие, в нем необходимо объявить функцию с именем example_user(). Список передаваемых в эту функцию аргументов, пример ее использования и информацию обо всех функциях и хуках, доступных в Drupal, можно найти на странице официальной документации http://api.drupal.org или ее русской версии: http://api.drupal.ru.
Эта статья — продолжение материала, посвященного CMS Drupal (см. PC Magazine/RE, 12/2008). В первой статье подробно рассказано о назначении и возможностях системы, а также приведены примеры сборки сайтов на Drupal с использованием уже существующих модулей. Этот же материал будет больше интересен техническим специалистам, умеющим программировать на языке PHP, знакомых с основами HTML и CSS, и тем, кто хочет познакомиться с методами разработки собственных модулей для этой системы. Перед чтением этого материала рекомендуется освежить в памяти информацию, просмотрев ее первые три раздела.
Актуальную версию модуля, разработанного в рамках этой статьи, можно найти на здесь.
Каждый модуль для Drupal представляет два файла или более, которые должны находиться в папке sites/all/modules/название_модуля.
Строго говоря, модули могут находиться не только в sites/all/modules, но и в некоторых других папках, например sites/example.com/modules или sites/all/modules/example/example_submodule, но описание таких конфигураций выходит за рамки этой статьи.
В файле название_модуля.info должна находиться служебная информация, а в файле название_модуля.module — исходный текст. При наличии этих двух файлов модуль станет доступным на странице установки модулей Drupal (Administer — Modules, admin/build/modules). Кроме того, в этой же папке может находиться необязательный файл название_модуля.install, содержащий реализации хуков, которые будут выполнены при инсталляции модуля. В этом файле обычно располагаются инструкции, создающие новые таблицы в базе данных и задающие значения по умолчанию для настроек модуля.
В статье будут ссылки на страницы англоязычной документации api.drupal.org. В приводимых адресах домен первого уровня org можно заменить на ru, и тогда вы получите доступ к описанию той же функции на русском языке (если оно доступно). Правда, это правило относится только к ссылкам на домен третьего уровня http://api.drupal.org, а не к ссылкам на домен второго уровня drupal.org и другие его поддомены.
- Руководство по разработке модулей: http://drupal.org/node/206754.
- Параметры, используемые в .info-файлах: http://drupal.org/node/231036.
- Введение в Schema API: http://drupal.org/node/146843.
- Типы полей, используемых в Schema API: http://drupal.org/node/159605.
- Описание hook_menu(): http://api.drupal.org/api/function/hook_menu/6.
- Описание типов полей Forms API: http://api.drupal.org/api/file/developer/topics/forms_api_reference.html/6.
- Описание hook_block(): http://api.drupal.org/api/function/hook_block/6.
Для иллюстрации использования системы хуков я приведу пример разработки простого модуля, который формирует блок с информацией о курсах валют. Этот модуль по расписанию (при запуске крона) будет соединяться с сервером ЦБ РФ и получать от него информацию о курсах валют. На основе полученных данных и настроек, заданных через интерфейс управления модулем, а также функций темизации будет генерироваться выходный HTML-код. Он будет кэшироваться стандартными средствами Drupal (благодаря чему администратор при желании сможет перенести этот кэш из базы данных, например, в файловую систему или memcache) и выдаваться по запросу пользователя в виде блока. Итак, приступим…
Модуль получит название currencies. На первом этапе его разработки необходимо (относительно корня Drupal-сайта) создать папку sites/all/modules/currencies, в которой мы будем сохранять новые файлы.
Ссылки на другие части этой статьи:
- Часть 1. Основы модульной системы Друпала
- Часть 2. Разработка простейшего модуля
- Часть 3. Введение в темизацию Друпала (для программистов, а не дизайнеров)
Содержание всех статей: /blog/2010/my-drupal-articles