Структура проекта
В проекте Drupal много папок, но изменять нужно только несколько. Важно сразу понять, где лежит ядро, где чужие модули, а где ваш код.
Папки проекта
site/
├── composer.json
├── vendor/
└── web/
├── core/
├── modules/
│ ├── contrib/
│ └── custom/
├── themes/
│ ├── contrib/
│ └── custom/
├── sites/
│ └── default/
│ ├── settings.php
│ └── files/
└── index.phpПапок custom после установки нет — создайте web/modules/custom и web/themes/custom вручную.
| Папка или файл | Что в ней |
|---|---|
composer.json | Список пакетов проекта: ядро, модули, Drush |
vendor | Скачанные пакеты PHP. Не изменяется |
web | Корень сайта: на него настраивают веб-сервер |
web/core | Ядро Drupal. Не изменяется |
web/modules/contrib | Готовые модули, установленные через Composer |
web/modules/custom | Ваши модули |
web/themes/custom | Ваши темы оформления |
web/sites/default/settings.php | Подключение к базе и настройки сайта |
web/sites/default/files | Файлы, загруженные через сайт: картинки, документы |
Что попадает в Git
В репозиторий добавляют composer.json, composer.lock, папки custom и файлы конфигурации. Папки vendor, web/core, web/modules/contrib и web/sites/default/files в репозиторий не кладут: первые три восстанавливает команда composer install, а загруженные файлы относятся к содержимому сайта.
Папка модуля
Каждый модуль — отдельная папка внутри web/modules/custom. В курсе это будет blog. К концу курса она примет такой вид:
web/modules/custom/blog/
├── blog.info.yml описание модуля
├── blog.routing.yml адреса страниц
├── blog.links.menu.yml ссылки меню
├── blog.permissions.yml права доступа
├── blog.services.yml сервисы
├── blog.libraries.yml стили и скрипты
├── blog.module функции-хуки
├── blog.install таблицы и обновления
├── config/ настройки по умолчанию
├── templates/ шаблоны Twig
├── css/ js/ файлы стилей и скриптов
└── src/ классы PHP
├── Controller/
├── Form/
└── Plugin/Имена файлов начинаются с имени модуля. Классы лежат в src, а их пространство имён начинается с Drupal\blog: файл src/Controller/BlogController.php содержит класс Drupal\blog\Controller\BlogController.
Ни один из этих файлов, кроме blog.info.yml, не обязателен — их добавляют по мере надобности.
Частая ошибка
Правка файлов в web/core или web/modules/contrib выглядит самым коротким путём, но при следующем composer update изменения исчезнут. Чужое поведение меняют из своего модуля — хуками и подписчиками на события, а разметку — из своей темы.