S.Tominoff

Frontend / Backend developer

Что нас ждёт в Opencart 4?

Краткий обзор новых возможностей и изменений в разрабатываемой версии Opencart 4.0.0.0-b

Решил ознакомиться с текущим положением дел у движка Opencart, поставил последнюю master версию из гита и немного поковырялся.

 

ЭТО СЫРАЯ ВЕРСИЯ OPENCART ДЛЯ РАЗРАБОТЧИКОВ! ⚠️

 

Это обзор самой последней версии, доступной только через github.

 

Версия Opencart в обзоре не является законченной, протестированной, а поэтому не предназначена для использования!

 

На данный момент, рекомендуемая версия Opencart — 3.0.3.7, доступная на официальном сайте проекта.

 

Судя по всему, в мире Opencart грядёт масса интересного и четвёртая версия этого прекрасного e-commerce движка даже в очень сыром виде может подсказать нам в каком направлении движутся core разработчики и чего примерно ожидать.

 

#1: PHP 8

 

Это минимально допустимая версия PHP для запуска Opencart 4.0.0.0-b. В общем-то нет причин не использовать самые свежие релизы интерпретатора этого языка.

 

Думаю в финальном релизе восьмёрка так и останется минимальной версией, хотя при этом я не заметил в коде чего–то радикально нового, разве что теперь используются пространства имён и чуть–чуть типизация, но всё это есть и в семёрке.

 

 

#2: Вшитый CKEditor

 

Я думаю, многие пользователи этого ждали.

 

Summernote был ужасен — я не помню ни одного Opencart сайта из тех, с которыми мне приходилось работать, где пользователи были довольны вшитым редактором.

 

На всех проектах в итоге устанавливались модули для замены Summernote на CKEditor или что-то подобное.

 

Теперь это часть движка и все эти окмоды для подмены редактора больше не нужны 👍

 

CKEditor — теперь из коробки!

 

 

#3: Переопределение переводов из админки

 

Вот это — по настоящему неплохая вещь. Зачастую клиенты просили переименовать ту или иную надпись на сайте, которая генерится из языковых файлов.

 

В 4-ке больше не понадобится городить ocmod.xml файлы для модификации переводов, или лезть в файлы переводов — теперь это можно легко сделать в панели администрирования!

 

Кроме того, для поддержки этой функции, разработчикам модулей не придётся дополнительно что–то делать, функция доступна для всех файлов с переводами из коробки.

 

Теперь можно переписать любую строку перевода!

 

#4: Изменения в настройках seo url

 

Немного доработали форму редактирования алиасов для системных url, по сути, разбили поле запроса на ключ и значение. Пока что правда не очень понятно как быть с запросами в которых несколько пар ключей/значений.

 

Появилась вкладка Seo Profiles, с помощью которой, как я понял, можно задавать правила генерации/обработки урлов.

 

 

#5: Поддержка вариативности продуктов

 

С помощью этой функции можно создавать клоны товаров с предзаданными значениями опций и изменёнными данными (к примеру, описания, ean и проч.).

 

Пока что работает это не очень хорошо — цена в отображении магазина не отличается между вариантом и базовым товаром, хотя корзина всё считает корректно

 

 

 

#6: Зачатки нормальных обновлений

 

В разделе обслуживания сайта появился новый раздел "Upgrade". Судя по всему это подсистема для автоматического обновления CMS и установленных модулей. 

 

 

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

 

В случае апгрейда на следующую мажорную версию, например с 1.5 в 2.3, требовалось, по сути, создать новый сайт на свежей платформе и постепенно мигрировать настройки и данные.

 

 

Теперь это будет решаться с помощью админки и официального маркетплейса модулей.

 

Не очень понятно пока что как это будет работать со сторонними модулями, ведь как известно, в СНГ вообще–то довольно мало кто покупает модули в офф–сторе, предпочитая местные комьюнити сайты, вроде opencartforum.

 

 

#7: Управление фоновыми задачами Cron

 

 

 

#8: Переосмысление модулей Opencart

 

Если у вас возник резонный вопрос — как они хотят обновлять движок и модули, учитывая что всё размазано по одной плоскости и склеено через OCMod, то спешу обрадовать — наконец–то в Opencart добавили адекватности в систему модулей! 🔥

 

Разработчики наконец–то поняли, что запись модулей напрямую в папки CMS это плохое решение и изменили подход к работе с модулями.

 

Сами ocmod файлы остались без структурных изменений — это всё те же старые добрые zip файлы с папкой upload и файлом install.xml, но вот их расположение изменилось.

 

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

 

extension и файлы модуля

 

В качестве эксперимента, я решил разработать простейший модуль и посмотреть что нового нам предлагает Opencart 4 в этом вопросе.

Первое, что сразу бросается в глаза — использование пространств имён.

 

Да, движок наконец–то отказывается от давным давно устаревшей системы специального именования классов, вроде ControllerExtensionModuleMyModule, и предлагает вместо этого писать примерно так:

 

<?php

namespace Opencart\Admin\Controller\Extension\Test\Module;

class MyModule extends \Opencart\System\Engine\Controller {
  // ... код
}

 

Однако, использование загруженных классов всё такое же ужасное:

 

<?php

$this->load->model('setting/setting');

$this->model_setting_setting->editSetting(/*...*/);

 

Не очень, конечно, понятно почему они так и не начали использовать какой нибудь DI–контейнер или ту же автозагрузку с namespace, но думаю это ещё впереди.

 

В итоге я набросал по образцу модуль и оставался вопрос как это всё установить — в рассматриваемой версии нет возможности загрузить ocmod.zip файл через админку. После некоторых изысканий оказалось что нужно поместить ocmod в папку system/storage/marketplace

 

 

После чего, модуль уже можно будет установить через панель администрирования и попробовать в действии

 

 

 

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

 

Вот весь код фронт контроллера:

<?php

namespace Opencart\Catalog\Controller\Extension\Test\Module;

class Test extends \Opencart\System\Engine\Controller {
  public function index (): string {
    $this->load->language('extension/test/module/test');

    return $this->load->view('extension/test/module/test', [
      'title' => 'Hello!',
      'description' => 'Is it work?'
    ]);
  }
}

 

А вот Twig шаблон:

<div>
  <h1>{{ heading_title }}</h1>
  <hr>
  <h3>{{ title }}</h3>
  <p>{{ description }}</p>
</div>

 

Попробуем встроить его в макет главной страницы:

 

 

А теперь перейдём на главную страницу фронт части и посмотрим работает ли наш модуль:

 

 

Как я говорил ранее, мы можем легко изменить заголовок (heading_title) и любую строку, заданную в файле переводов, с помощью нового инструмента Language Editor 

 

 

Ожидаемо, на фронт части мы получаем обновлённый заголовок модуля:

 

 

 

Посмотреть исходники тестового модуля можно на Github — https://github.com/ikenfin/opencart-4-example-module.