PrestaShop — это мощная и гибкая платформа с открытым исходным кодом для создания интернет-магазинов. Понимание архитектуры PrestaShop помогает лучше разобраться в том, как различные компоненты системы работают вместе, обеспечивая бесперебойную работу магазина. В этой статье мы подробно рассмотрим структуру PrestaShop, уделив внимание как фронтальной части (Front Office, FO), так и административной части (Back Office, BO), а также бэкенд системы.
Обзор
PrestaShop можно разделить на две основные логические секции, как это показано на диаграмме ниже:
- Front Office (FO) — публичная часть сайта, видимая пользователями магазина.
- Back Office (BO) — административная панель, где владельцы магазинов управляют всеми аспектами работы.
Каждая из этих секций также делится на две части, как и у большинства веб-приложений:
- Front-end — то, что работает в браузере пользователя.
- Back-end — то, что работает на сервере.
Эта схема разделения изображена в виде пунктирной горизонтальной линии на диаграмме.
Бэкенд
Если мы посмотрим на структуру бэкенда, то обнаружим несколько общих компонентов для BO и FO:
- База данных
- Бизнес-логика
- Модули
PrestaShop сильно зависит от базы данных, как и большинство традиционных веб-приложений. Вся информация о магазине хранится в базе данных, и независимо от того, используется ли она в FO или BO, она является единым источником истины.
На диаграмме база данных изображена вне основного блока, чтобы показать, что это отдельная система, которая может находиться на другом сервере или в кластерной архитектуре.
Фиолетовое облако над базой данных представляет собой Core Business — это основной код, который управляет логикой работы PrestaShop. Он включает модели, контроллеры и вспомогательные классы.
Контроллеры PrestaShop в основном выводят HTML-страницы, но иногда могут выводить данные в формате JSON или XML. Структура этих страниц определяется темами (themes), которые преобразуют данные контроллеров в HTML. Темы влияют как на FO, так и на BO, и могут быть заменены на сторонние для FO.
PrestaShop предоставляет два API-интерфейса:
- BO API — используется для предоставления информации на страницы BO на базе VueJS (например, для управления переводами и складскими запасами).
- Веб-сервисы — интегрируются с внешними сервисами и могут выводить данные в форматах XML или JSON.
Модули — это независимые пакеты, которые расширяют функциональность PrestaShop, взаимодействуя с ядром через так называемые «hooks» или заменяя стандартные компоненты своими.
Фронтенд
На фронтальной стороне реализация зависит от темы. Одни темы основываются на простом HTML с минимальным количеством скриптов, другие — более сложные и активно используют JavaScript. Темы для FO поддерживают сторонние изменения, тогда как темы для BO более ограничены в изменениях.
Стек Core Business
Код PrestaShop разделен на четыре логических подсистемы:
- Legacy-код — старый код, не использующий пространства имен.
- Core-код — новый код, основанный на принципах SOLID.
- Adapter-код — адаптирует старые классы для работы с новым кодом.
- Symfony-код — включает в себя функционал, зависящий от Symfony, такие как формы и контроллеры.
Эта система позволяет PrestaShop постепенно обновлять архитектуру без полного отказа от старого кода, что делает процесс обновления более плавным.
Контроллеры
PrestaShop следует паттерну Model-View-Controller (MVC), где контроллеры обрабатывают запросы и возвращают ответы, делегируя основную работу службам. Контроллеры подразделяются на две категории:
- FO контроллеры — управляют запросами на стороне FO.
- BO контроллеры — управляют запросами в BO, причем могут быть как Legacy, так и Symfony-контроллерами.
Темы
PrestaShop поддерживает две основные виды тем: для FO и BO. В FO используется шаблонизатор Smarty, а в BO — Twig, что связано с переходом системы на Symfony. Стандартная тема FO называется «Classic» и основана на Bootstrap 4, в то время как BO использует собственный UI-kit, основанный на Bootstrap 4.
Модули
Модули в PrestaShop играют важную роль в расширении возможностей системы. Они могут добавлять новые функциональности, изменять интерфейсы и интегрироваться с другими сервисами через hooks. Модули могут взаимодействовать с ядром системы, добавлять свои контроллеры, стили, скрипты и даже переопределять классы.
PrestaShop — это сложная, но гибкая система, которая позволяет адаптировать и настраивать платформу под конкретные нужды бизнеса. Понимание архитектуры — важный шаг к тому, чтобы использовать все возможности платформы на полную.