RizVN Login



OpenCart 2.3 - несколько особенностей перевода модулей

OpenCart 2.3 - несколько особенностей перевода модулейПериодически при выходе релизов CMS можно наткнуться на такие модификации ядра, что поддержать их внутри модуля простым хаком не получится. И OpenCart 2.3 это не стало исключением. Теперь, для всех модулей является обязательным добавление прослойки в виде каталога "extension", чтобы запрятать файлы "еще глубже и дальше". А если серьезно, то проблема этого перехода в самой особенности реализации MVC у опенкарта. И поэтому вначале хотелось бы вставить пару своих "фи", а уже затем описать аспекты.

Примечание: Ради справедливости, стоит сказать, что подобного рода вещи происходят практически со всеми CMS, так что не стоит делать некорректные выводы из моей статьи.

Не считая необходимости файла контроллера в другом месте, сами названия классов контроллеров и моделей зависят от количества каталогов. Это означает, что вы попросту не можете сделать простой if-else в зависимости от версии. Это простое обстоятельство приводит к тому, что вам, в общем-то, необходимо поддерживать отдельный архив с модулем, подобно тому, как это происходит при поддержке версий 1.5 и 2.0. Возможно, замыслы авторов идут дальше и это окажется весьма полезным, но сейчас эта затея оборачивается лишь дополнительным временем (перенос с повторной проверкой функциональности, поддержка и прочее).

Конечно, существуют альтернативные варианты и давно известные механизмы. К примеру, для разделения модулей сделать необходимость в дополнительном файле конфигурации, который позволял бы избавиться от хаоса в адмике во вкладке "Модули"/"Дополнения". Так и совместимость была бы проще и поддерживать было бы легче, но...

Примечание: Ради справедливости, стоит сказать, что обойти эти ограничения можно с небольшими нюансами, как минимум, четырьмя методами, но перечислять я их не буду, чтобы не плодить монстров. Пусть уж будет отдельный каталог, чем в версии 2.4 случится опять нечто подобное.

Примечание: Так же стоит отметить, что с каждым таким "погружением" проблемы полных путей становятся все реальнее (ограничение количества символов у операционных систем, задача вытаскивания файлов обратно в свой модуль и прочее).

Кстати, если ваш модуль без каталога "extension" установился и каким-то чудом открылся, то не спешите радоваться. Методы "install" и "uninstall" в таком случае не вызываются, плюс многие url будут некорректными.

 

Вот несколько моментов перевода модулей для OpenCart 2.3

1. Необходимость прослойки в виде каталога "extension". Как уже говорилось, теперь, для всех файлов необходимо удлинять пути и, соответственно, корректировать код (после чего его повторно с нуля проверять). И это касается не только контроллеров, но и моделей, и перевода, и вьюх. Далее из их документации.

Касаемо расположения. Что было:

admin/controller/module/xxx.php
admin/model/module/xxx.php
admin/language/en-gb/module/xxx.php
admin/view/template/module/xxx.tpl

Как теперь:

admin/controller/extension/module/xxx.php
admin/model/extension/module/xxx.php
admin/language/en-gb/extension/module/xxx.php
admin/view/template/extension/module/xxx.tpl

Касаемо имен контроллеров и моделей, теперь необходимо добавлять Extension. Чтобы из ControllerModuleMyMod получилось ControllerExtensionModuleMyMod, а из ModelModuleMyMod стало ModelExtensionModuleMyMod. То самое ограничение в именах классов.

Касаемо подключения моделей, теперь необходимо добавлять приставку "extension/", например, $this->load->model('extension/module/MyMod'). Это так же отражается и на создании динамических переменных объектов класса. Т.е. вместо model_module_MyMod, теперь нужно использовать model_extension_module_MyMod.

Этот пункт касается не только административной части "admin", но и основной части, т.е. каталога "catalog".

Примечание: В принципе, если бы не было необходимости в этом пункте, то поддержка версии 2.3 для многих стала бы подобна поддержки версии 2.2.

2. Теперь summernote необходимо подключать отдельно. Справиться с этой задачей достаточно легко. Просто добавить подключение необходимых скриптов:

$this->document->addStyle('view/javascript/summernote/summernote.css');
$this->document->addScript('view/javascript/summernote/summernote.min.js');
$this->document->addScript('view/javascript/summernote/opencart.js');

3. Модификация левого меню в админке. Теперь, меню в админке располагается не по адресам "controller/common/menu.php" и "view/template/common/menu.tpl", а в "controller/common/column_left.php" и "view/template/common/column_left.tpl". Стоит отметить, что меню теперь строится динамически в шаблоне по данным контроллера, т.е. не просто представлено в виде перечисления тегов ul-li. Так что тем, кто делал ручные правки и вставки в шаблон, придется его отложить и внимательно изучить контроллер, а именно структуру отдельных записей меню.

Так же стоит отметить, что судя по структуре кода контроллера и шаблона, вполне возможно, что в некотором будущем может появиться отдельная таблица с настройками левого меню, что реализуется достаточно просто и существенно упростит жизнь всем (код станет меньше, правки можно делать в "install" без перезаписи файлов и прочее).

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

1 1 1 1 1 1 1 1 1 1 Рейтинг 5.00 (1 Голос)

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

Комментарий - это вежливое и наполненное смыслом сообщение (правила).


Введите защитный код

Обновить
Защитный код

Каталог программ