О создании модулей в Drupal и их грамотной установке

Структура модулей Drupal

Привет юным друпалерам! Этот пост предназначается именно вам, хотя и для разработчиков среднего звена тоже будет пару интересных моментов. После прочтения данного материала вы узнаете из чего состоят Drupal модули, как их правильно устанавливать и использовать.

Стандартный Drupal «из коробки» обладает, как правило, недостаточным набором функционала даже для захудалого сайта-визитки. Расширяется список возможностей установкой и настройкой уже готовых модулей либо же написанием собственных решений. Все модули советую скачивать с официального сайта Drupal.org, чтобы в один прекрасный день не обнаружить, что ваш сайт упал или, еще того хуже, его взломали.

Как установить модуль Drupal?

Для начала надо запомнить, что «зона» разработчика – это папка “sites”. Все остальные папки – это ядро Drupal, в которое лезть вообще не стоит, тем более, начинающим разработчикам. Если вам вдруг покажется, что решением всех проблем будет внесение правок в код ядра – откройте Drupal API и курите его до просветления сознания. Все, что касается дополнительных модулей, должно храниться в папке “sites/all/modules”.

Да, в админке Drupal имеется функция «Установить модуль», однако мне она никогда не нравилась – сейчас объясню почему. Если у вас серьезный проект, то вам, наверняка, помимо установки стандартных модулей придется патчить некоторые из них или же вообще писать собственные решения. Поэтому на своих проектах я взял за правило разделять все это скопление кода. Для этого в папке “sites/all/modules” создаем три подкаталога:

  • contrib – для хранения стандартных (на сленге «контриб») модулей;
  • patched – для хранения контриб модулей с примененными патчами;
  • custom – для хранения собственных модулей.

Все, теперь остается вручную заливать модули в соответствующие папки и включать их в админке (“admin/modules”) – Drupal все найдет, не переживайте. Подобная архитектура упрощает совместную разработку, упрощает жизнь разработчику, которому, возможно, когда-то придется дорабатывать ваш проект. Вы же не хотите, чтобы вас вспоминали недобрым словом?

Установка модулей в Drupal

Структура модулей в Drupal

Любой модуль Drupal имеет строго заданную структуру и состоит, как минимум, из двух файлов:

  • .info файл – содержит информацию о модуле;
  • .module файл – содержит набор функций, реализующих требуемый функционал.

Помимо основного .module файла хорошим тоном считается создание дополнительных .inc файлов, что позволяет группировать отдельные наборы функций. Например, описание всех административных форм и функций, как правило, выносится в .admin.inc файл. Описание своих функций темизации принято выносить в .theme.inc файл.

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

Структура .info файла

Первым файлом при создании любого модуля будет .info файл (module_name.info):

  • name – название модуля;
  • description – описание модуля;
  • core – версия ветки Drupal;
  • package – название группы, к которой относится данный модуль (опционально);
  • dependencies – указание зависимости нашего модуля от других (опционально);
  • configure – ссылка на страницу конфигурации модуля (опционально);
  • files – указание списка дополнительных файлов, подгружаемых модулем (.module подключается автоматически).
  1. name = Angarsky module
  2. description = "Adds new features for Blog."
  3. package = Blog
  4. core = 7.x
  5.  
  6. ; This requires Drupal 7.15 or newer.
  7. dependencies[] = system (>=7.15)
  8.  
  9. ; CTools and Token are also required.
  10. dependencies[] = ctools
  11. dependencies[] = token
  12.  
  13. configure = admin/config/angarsky
  14.  
  15. files[] = angarsky_module.admin.inc
  16. files[] = angarsky_module.pages.inc

Структура .module файла

Сложно описать какую-то общую структуру .module файла, так как набор функций напрямую зависит от требуемого функционала. Поэтому я дам несколько рекомендаций по написанию кода:

  • имплементацию хуков ставьте всегда выше описания остальных функций;
  • пишите понятные комментарии, не только к функциям, но и участкам кода, где реализована сложная логика;
  • соблюдайте стандарты кодирования (читаем о стандартах кодирования, доступно и по-русски);
  • не ленитесь создавать дополнительные .inc файлы – в будущем будет проще ориентироваться в коде.

Собственно на этом вводная статья в модули и заканчивается. О том, что такое хуки и как расширять функционал коробочного Drupal, я расскажу в следующем посте.

Комментарии

Аватар пользователя Андрей
Андрей

Вопрос - А зачем ставить зависимость для модуля от версии Друпала больше 7.15?

Аватар пользователя angarsky
angarsky
В данном случае это было добавлено в качестве примера. А вообще от версии к версии Друпала могут добавляться / изменяться названия и логика функций, методов - поэтому иногда может и потребоваться указание версии.
Аватар пользователя Андрей
Андрей

Так и укажи, что это опцинально
Как указал для:

dependencies – указание зависимости нашего модуля от других (опционально);

Зачем людей заводить в заблуждение.

Да и в общем, что бы модуль работал достаточно указать только 2-а пункта:
name, core
Все остальное опцинально и на усмотрение разработчика.

Аватар пользователя Алекс
Алекс

То есть все установленные модули с друпал.орг, которые размещаются по пути sites/all/modules можно перенести в отдельную папку contrib ?

Аватар пользователя Влад
Влад

А как правильно указать версию в core?
Я написал core = 7.x но у меня высвечивается сообщения об ошибке "Эта версия не совместима с Drupal 7.x и должна быть заменена."

Добавить комментарий

                888  888              d8888 
888 888 d88888
888 888 d88P888
888 888 .d88888 888 d88P 888
`Y8bd8P' d88" 888 888 d88P 888
X88K 888 888 888 d88P 888
.d8""8b. Y88b 888 888 d8888888888
888 888 "Y88888 88888888 d88P 888


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