Архитектура PrestaShop
Архитектура PrestaShop
Общая архитектура PrestaShop основана на принципе MVC - «Модель-представление-контроллер». Не смотря на то, что Prestashop не строго придерживаться этого принципа, его понимание полезно для общего представления работы скрипта.
Модель
Модели в Prestashop представляют собой классы потомки базового класса «ObjectModel». Класс ObjectModel предоставяет базовые функции для инкапсуляции таблиц базы данных, составляющих основу магазина. Он обеспечивает CRUD (Create, Read, Update и Delete) функциональность, а также реализацию проверки данных и поддержки многоязычности. Расширяя базовую функциональность, конкретные классы создаются для управления данными, используемыми в магазине. Модели PrestaShop расположены в директории /classes и управлют привязанными к ним данными, хранящимися в базе данных (например категория, товар, заказ и т.д.). Каждый класс хранится в PHP файле, имя которого соответствует имени класса, который содержится в нем, например файл Order.php содержит класс OrderCore, отвечающий за управление заказами.
При первом обращении к классу происходит автоматическое подключение, содержащего его файла (реализацию см. в config/autoload.php). Благодаря такому подходу существует возможность переопределения классов ядра. То есть можно вносить изменения в базовую функциональность движка, не изменяя при этом оригинальные файлы, что позволяет обновить PrestaShop, не потеряв внесенные изменения.
Для переопределения базовых классов нужно создать в директории override/classes (для моделей) или override/controllers файл, с тем же названием, что и изменяемый базовый класса, содержащий класс-потомок. Например:
class Tools extends ToolsCore { static public function link_rewrite($str, $utf8_decode = false) { if (preg_match('/[А-Яа-я]+/', $str)){ $cyr = array('а', 'б', 'в',...); $lat = array('a', 'b', 'v',...); $str = mb_strtolower($str, 'utf-8'); $str = str_replace($cyr, $lat, $str); } return parent::link_rewrite($str, $utf8_decode); } }
В данном примере производится замена функции Tools::link_rewrite() для транслитерации ЧПУ.
Представление
Представление данных из PrestaShop производится при помощи механизма шаблонов Smarty. Использование шаблонов позволяет отделить бизнес-логику от отображения информации. Файлы шаблонов Prestashop по большей части хранятся в директории /themes, в поддиректории с определенной темой, которая может быть выбрана в админ панели. Многие модули также хранить свои собственные файлы шаблонов в собственной директории. Шаблоны модулей могут быть переопределены при помощи шаблонов выбранной темы.
Контроллер
Контроллер - это основа бизнес-логики страницы или набора страниц, с общим назначением. Они отвечают за взаимодействие с моделями для получения данных, применяют бизнес-логику к ним и передают выходные данные представлению. В PrestaShop 1.4 контроллеры находятся в директории controllers и являются потомками базового класса FrontController. Для обеспечения совместимости с версией 1.3 в корневой директории содержатся заглушки, которые содержать вызов соответствующего контроллера.
~~DISCUSSION~~