О создании модулей в 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 и должна быть заменена."

Аватар пользователя Дмитрий
Дмитрий

Здравствуйте, у меня такая проблема. Установил модуль, и на сайте написано, что нужно его настроить через файл, который находится по адресу admin/config/services/elementor/settings. Но я не могу найти его, нет такого адреса. Что я делаю не так?

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

            .d88888b.       d8888            
d88P" "Y88b d8P888
888 888 d8P 888
.d8888b 888 888 d8P 888 888 888
88K 888 888 d88 888 888 888
"Y8888b. 888 Y8b 888 8888888888 888 888
X88 Y88b.Y8b88P 888 Y88b 888
88888P' "Y888888" 888 "Y88888
Y8b 888
Y8b d88P
"Y88P"
Зарегистрируйтесь для добавления материалов без проверки.