Основные понятия
В документации и в коде Magento постоянно встречаются одни и те же слова: витрина, область, модуль, тема, режим. Без них трудно читать следующие уроки, поэтому разберём их заранее. Кода здесь почти нет — только смысл.
Сайт, магазин, витрина
Одна установка Magento может обслуживать несколько магазинов. Для этого есть три уровня:
| Уровень | В коде | Что различается |
|---|---|---|
| Сайт | website | Домен, цены, покупатели, способы оплаты |
| Магазин | store (группа) | Корневая категория каталога |
| Витрина | store view | Язык и оформление |
Пример: компания продаёт одежду на example.com и технику на tech.example.com — это два сайта. У сайта одежды есть английская и немецкая версии — это две витрины.
Сразу после установки существует по одному элементу каждого уровня. Управляют ими в панели: «Магазины → Все магазины» (Stores → All Stores).
Эти уровни важны для разработчика: настройку модуля или название товара можно задать отдельно для каждой витрины. В коде текущую витрину даёт Magento\Store\Model\StoreManagerInterface.
Области
Область (area) — часть приложения со своими настройками и страницами. Один и тот же модуль может вести себя по-разному в каждой из них.
| Область | Что это |
|---|---|
frontend | Витрина, которую видит покупатель |
adminhtml | Панель управления |
webapi_rest | REST API |
graphql | GraphQL API |
crontab | Задачи по расписанию |
Область видна в путях файлов. Настройки из etc/frontend/routes.xml действуют только на витрине, из etc/adminhtml/routes.xml — только в панели, а файл прямо в etc действует везде. Шаблоны витрины лежат в view/frontend, шаблоны панели — в view/adminhtml.
Модуль
Модуль — папка с кодом и настройками, которая решает одну задачу: каталог, корзина, отзывы. Имя модуля состоит из поставщика и названия: Magento_Catalog, Acme_Hello. Модуль можно включить и отключить командой.
Тема
Тема отвечает за внешний вид: шаблоны, стили, картинки. В поставке есть две темы витрины — Magento/blank и Magento/luma. Свою тему наследуют от одной из них и меняют только нужные файлы.
Режимы работы
| Режим | Для чего |
|---|---|
default | Включён после установки; подходит только для первого запуска |
developer | Разработка: ошибки на экране, файлы собираются на лету |
production | Рабочий сервер: всё собрано заранее, ошибки только в журнале |
Текущий режим показывает команда:
bin/magento deploy:mode:showОна печатает строку вида Current application mode: default.
Частая ошибка
Слова «магазин» и «витрина» легко перепутать: в коде store обычно означает именно витрину (store view), а не группу. Например, код витрины default и константа ScopeInterface::SCOPE_STORE относятся к уровню витрины. Когда в документации написано «store ID», почти всегда имеется в виду номер витрины.