Encodera

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

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

Оглавление

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

Проект Magento состоит из десятка папок, но свой код разработчик пишет только в двух из них. Остальные содержат ядро, настройки и файлы, которые Magento создаёт сам. Полезно сразу понять, что можно менять, а что нет.

Корень проекта

shop/
├── app/
│   ├── code/        свои модули
│   ├── design/      свои темы
│   └── etc/         настройки установки
├── bin/magento      консольная команда
├── generated/       сгенерированные классы
├── pub/             корень сайта
├── var/             кеш, журналы, отчёты об ошибках
├── vendor/          ядро и сторонние пакеты
└── composer.json    список пакетов

Где что лежит

ПапкаЧто в нейМожно ли менять
app/codeСвои модули: app/code/Поставщик/МодульДа, здесь идёт вся работа
app/designСвои темы оформленияДа
app/etcФайлы env.php и config.phpОсторожно
vendor/magentoМодули ядраНет
generatedКлассы, созданные MagentoНет, только удалять
pub/staticСобранные стили, скрипты, картинки темНет, только удалять
pub/mediaЗагруженные картинки товаровНет
varКеш, журналы в var/logНет, только читать и удалять

Папки app/code сразу после установки может не быть — её создают вручную.

Файлы в app/etc

Файл app/etc/env.php хранит настройки сервера: доступ к базе данных, адрес панели, ключ шифрования. На каждом сервере он свой, и в систему контроля версий его не добавляют.

Файл app/etc/config.php содержит список модулей и признак, включён ли каждый:

// app/etc/config.php
return [
    'modules' => [
        'Magento_Store' => 1,
        'Magento_Catalog' => 1,
        'Acme_Hello' => 1,
    ],
];

Единица означает, что модуль включён. Файл изменяют команды bin/magento, а не человек, и хранят его вместе с кодом проекта.

Модули ядра

Ядро — такие же модули, как ваш будущий. Каталог товаров лежит в vendor/magento/module-catalog, заказы — в vendor/magento/module-sales. Имя модуля каталога в коде — Magento_Catalog, а его классы начинаются с Magento\Catalog.

Эти папки стоит читать: когда непонятно, как устроен файл XML или класс, готовый пример почти всегда находится в ядре.

Папка модуля

У каждого модуля одинаковое строение. С ним вы познакомитесь постепенно, а пока достаточно общего вида:

ПапкаЧто в ней
etcНастройки XML
ControllerДействия, отвечающие на запросы
ModelРабота с данными
viewМакеты, шаблоны, стили и скрипты

Частая ошибка

Сервер настроили на корень проекта вместо папки pub. Тогда из браузера можно открыть app/etc/env.php с паролем базы данных и журналы в var/log. Корнем сайта всегда должна быть папка pub.

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

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