Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Оглавление

Структура проекта

В проекте 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 изменения исчезнут. Чужое поведение меняют из своего модуля — хуками и подписчиками на события, а разметку — из своей темы.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.