Добавляем в OpenCart ORM библиотеку

При разработке проекта на opencart у меня возникает сильный дискомфорт, так как отсутствуют столь привычные вещи, к которым достаточно быстро привыкаешь. На этот раз я раскритиковал понятие моделей в данной CMS и решил интегрировать в проект какую нибудь популярную ORM.

Немного изучив исходники нашел, что opencart может работать с PDO и по этому я решил взять популярный Propel ORM, так как он так же использует PDO для своей работы.

Первое что надо сделать, это его установить, я брал 2 версию

Дальше нужно сделать конфиг для настройки.
Я в корне сайта сделал propel.php и сделал базовую настройку

Константы не сработают по этому нужно туда добавить настройки текущего подключения как есть, но в проекте в итоге мы это исправим.

Теперь так как у нас база готовая есть, сгенерируем схему БД, она нам понадобится для генерации моделей:

Появится папка generated-reversed-database, а в ней файл со схемой schema.xml

Теперь сделаем модели данных, я сложил их в папку system/entity

где schema-dir пупка с сгенерированной темой и output-dir папка с кучкой свеженьких моделей.

Теперь последний шаг для приготовления propel — сгенерировать стартовый конфиг.

Получим на выходе generated-conf/config.php который я перенес в корень и переименовал как propel-config.php и вот в него уже можно войти и заменить значения настроек бд на константы опенкарта. Собственно на этом propel приготовлен и внедряем все это дело в проект.

Наши модельки нужно как то подгрузить, по этому отредактируем файл composer.json

И сгенерируем файл автолоада

Тут потребуется подредачить ядро, так как куда то нужно воткнуть автолоад композера, я поставил в файл ядра system/startup.php у меня все под git и в случае обновления я увижу что моя вставка была удалена и поставлю её на место.

Хотя замечу, что там есть папка для композера и его автозагрузка, но система её вынесла выше уровня, а я наткнулся на неё уже после того как установил композер в корень. Ну да ладно, вы можете поступить умнее и править ядро вам не понадобится 🙂

Теперь интегрируем все дело в Opencart. Для этого нам нужно создать новый драйвер для бд и указать его в конфиге.

И в конфигах указываем что наш драйвер это propel

На этом настройка закончена, вся система работает как и работала, никаких изменений делать не требуется, разница лишь в том, что теперь у вас для вашего кода доступны удобные модели, генераторы запросов и прочие ништячки хорошей орм.

Для чего же нужно это мне? Я не привык, что система сама решает какие данные мне нужны, а орм это удобный инструмент для работы с данными из базы, как с объектами. Такие решения конечно нельзя распространять в маркетах и на продажу, но для проектов заказчиков очень пригодится и сократит множество человекачасов и самое главное ошибок.

Опенкарт, как по мне достаточно кривоват и скорее всего я добавлю статьи по роутингу, расширениям twig и созданию шаблонов twig по феншую, а не как сейчас через пятую точку, так что следите за обновлениями 🙂

И пользуйтесь на здоровье!

Напоследок, кусочек кода с propel который проставит категорию всем товарам у которого атрибут имеет заданное значение.

 

1 thought on “Добавляем в OpenCart ORM библиотеку

  1. Pavel

    Спасибо. Это действительно полезно когда работы и так валом, еще сырые запросы писать к БД. Значительно ускоряет разработку.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *