Добавляем в 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 который проставит категорию всем товарам у которого атрибут имеет заданное значение.

 

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

  1. Pavel

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

  2. Мағжан

    Добрый день! Спасибо очень помогли настроить ORM
    У меня вопрос, какие фалы за gitinore-ить?
    Файл schema.xml ее удалить или она всегда должна стоять?
    Зачем нужен файл propel.php в корне сайта, и что он из себя представляет?

    1. aisamiery Автор записи

      Игнорить можно все за чем не нужно вести контроль версий или переносить с площадки на площадку. Можно удалить — это схема данных снятая с БД. Файл propel.php это конфиг для пропеля

Добавить комментарий для Pavel Отменить ответ

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