CMS Drupal – это система, имеющая возможность для расширения функционала без необходимости модификации кода ядра самой CMS. Это даже не «возможность», а скорее особенность. Без которой Drupal невозможно себе представить. Поскольку без модулей она бы (Drupal) и не работала вовсе. Любое существенное изменение функционала Drupal всегда связано с добавлением и подключением модулей. Которые определённым образом изменяют поведение системы. Будь то сторонние модули, предоставляемые сообществом разработчиков Drupal или же это самостоятельно разработанные модули. В любом случае их установка и включение предусматривает определённый набор необходимых действий.
Что такое модули Drupal?
Модули Drupal – это отдельные, не связанные напрямую с ядром CMS программные компоненты. Реализующие определённый функционал, которого изначально нет в ядре. Это и правильно. Поскольку ядро должно лишь предоставлять интерфейс для взаимодействия между компонентами системы. А также управлять их работой. Разрабатывая веб-приложение, можно просто сконцентрироваться на определённом круге задач, которые можно «упаковать» в рамках реализации одного модуля. Всё, что для этого нужно — это знание спецификаций API Drupal и правил написания, собственно, модулей.
Особенности установки и управления модулями в Drupal7 и Drupal 8
Для того, чтобы установить модуль Drupal, необходимо выполнить следующие условия:
- модуль (каталог модуля с исполняемыми сценариями) должен быть помещён в определённый каталог в структуре файловой системы (ФС) Drupal;
- модуль должен быть внесён в список активных, т. е. включенных в специальной таблице базы данных Drupal.
Естественно, для того, чтобы Drupal смог распознать, что каталог с исполняемыми сценариями является модулем. Сам модуль должен быть разработан в соответствии с официальной спецификацией. Оба вышеприведённых пункта справедливы для обеих версий Drupal. Однако, сам механизм предоставления интерфейса взаимодействия с ядром существенно различается. Так, например, в Drupal 7 подключение кода модуля обеспечивается механизмом программных «хуков», т. е. путём подстановки имён функций. В Drupal 8 для этой цели используются некоторые из основных парадигм (наследование, делегирование) объектно-ориентированного подхода (ООП) в программировании с тесным взаимодействии с ФС. Уже никаких хуков. Стоить отметить также, что и кодовая база Drupal 8 практически полностью построена на фреймворке Symfony.
Есть различия также и в расположении подключаемых модулей. Для Drupal 7 это каталог /drupal_dir/sites/all/modules
. В Drupal 8 хотя и сохранено прежнее, унаследованное от 7-й версии расположение модулей, однако сами разработчики рекомендуют помещать их в каталог modules непосредственно в корне ФС Drupal, т. е. в /drupal_dir/modules
.
Ручная установка
Для начала каталог модуля нужно поместить в соответствующий каталог установки модулей Drupal, как это указано в предыдущей главе. Модули распространяются свободно, их можно скачать с официального сайта сообщества по адресу https://www.drupal.org/project/project_module. Либо написать собственный.
Собственно, в этом и заключается ручная установка — файлы модуля копируются в ФС Drupal самим пользователем. Тут важно ещё заметить, что внутри каталога с модулями можно создавать подкаталоги. Сортируя все модули по категориям, в зависимости от их происхождения, категории функционала и т. д. Drupal автоматически просканирует все поддиректории и «вычленит» все имеющиеся в них модули, как бы они не были рассортированы. Для системы это не имеет никакого значения, но очень удобно для разработчиков.
Ручная установка модуля (например, популярного модуля Views) выглядит следующим образом — сначала поиск по ключевому слову «views» на официальной странице модулей и загрузка модуля архива утилитой wget:
$ wget https://ftp.drupal.org/files/projects/views-7.x-3.21.tar.gz
Далее нужно распаковать загруженный архив:
$ tar -xvf views-7.x-3.21 -C htdocs/drupal-site/sites/all/modules/contrib
Как можно видеть, модуль views устанавливается в поддиректорию contrib, т. е. в ней предполагается хранить все «официальные» модули. Для собственных модулей можно отвести к примеру, поддиректорию custom.
Следует обратить внимание на имя архива модуля. Оно включает версию Drupal, для которой разработан модуль (7.x), а также версию самого модуля — 3.21. Это необходимо учитывать при выборе и установке модулей.
Теперь нужно просто включить новый модуль, зайдя на страницу http://drupal-site/admin/modules. Здесь нужно отметить нужный модуль в списке (для отключения модуля — снять отметку) и нажать кнопку сохранения настроек в самом низу страницы.
Установка модуля по ссылке
Такой способ экономит много времени, поскольку Drupal достаточно указать ссылку для загрузки модуля. При этом установка будет произведена автоматически в нужный каталог с модулями. Несущественным недостатком такого метода является то, что нельзя задавать произвольное расположение файлов модулей. Отсортировать по поддиректориям, как при ручной установке такой способ не позволяет.
Для установки модуля по ссылке необходимо на странице CMS http://drupal-site/admin/modules кликнуть ссылку установки нового модуля, после чего ввести, собственно, ссылку для загрузки и нажать кнопку установки модуля. Здесь же есть возможность произвести установку из файла, точнее из архива *.tar.gz. Но это та же ссылка, только на локальный файл, находящийся непосредственно на диске.
Заключение
В заключение необходимо отметить, что некоторые модули требуют для своей работы наличие других установленных модулей, т. е. зависимостей. Если заранее такие зависимости не были известны, то в процессе установки модуля Drupal их отследит и выведет имена соответствующих модулей, которые в таком же порядке необходимо загрузить и установить. В целом, как видно, ничего сложного в установке модулей нет. Весь процесс достаточно прозрачен и логичен. Особое внимание в этом нужно уделять удовлетворению зависимостей, если они есть. Приведенные в данной статье примеры были рассмотрены для Drupal 7, однако и для Drupal 8 они выполняются аналогично. За тем лишь исключением, что в Drupal8 термин «модули» заменён на «расширения» — extensions.