Как Opencart разработчику снизить риск возникновения конфликтов с OCMod модификатором? 😱
Пара простых советов для начинающих Opencart разработчиков которые помогут снизить вероятность возникновения конфликтов чужих OCMod с разрабатываемым модификатором.
Я довольно много успел поработать с CMS Opencart. Разрабатывал модули под все ветки — начиная с версии 1.5 и вплоть до последних релизов третьей ветки.
За это время я набрал практического опыта и в этой статье хочу поделиться с вами советами о том, как избежать ситуаций с конфликтами модификаций, возможное решение которых я описывал в предыдущей статье.
Как правило, большинство конфликтов модификаторов можно обойти, некоторые конфликты могут не оказать какого–либо заметного негативного эффекта, тем не менее — всегда следует писать код с учётом его дальнейшего использования.
1. Аккуратнее с точкой зацепа! ☠️
По моему опыту, большинство подобных проблем возникает из–за изменения точки зацепа (значение в теге search).
Если вы разрабатываете модификатор для Opencart, обязательно убедитесь, что ваши изменения не так сильно затрагивают код в месте зацепа.
В идеале — ваш модуль вообще не должен изменять код с помощью replace, но когда это необходимо — обязательно указывайте информацию об этом в инструкции к модулю.
Это значительно облегчит поиск и дебаг возникших конфликтов у пользователей вашего модуля! 👍
Кроме того, может помочь приём с комментированием заменяемого кода, вместо его полной замены:
<!-- вместо -->
<operation>
<search><![CDATA[$this->load->language('extension/module/mymodule');]]>
<add position="replace"><![CDATA[$this->load->language('extension/module/anothermodule');]]>
</operation>
<!-- лучше так: -->
<operation>
<search><![CDATA[$this->load->language('extension/module/mymodule');]]>
<add position="replace"><![CDATA[
// $this->load->language('extension/module/mymodule');
$this->load->language('extension/module/anothermodule');
]]>
</operation>
2. Аккуратнее со звёздочками!
Многие разработчики используют в атрибутах path звёздочки для применения модификаторов сразу к нескольким файлам.
Самый частый и оправданный кейс — модификация файлов в темах Opencart:
<file path="catalog/view/theme/*/template/extensions/modules/mymodule.twig">
<!-- код модификатора -->
</file>
Поскольку тем может быть множество, то и файлы могут располагаться где угодно. Это, пожалуй, единственный оправданный случай использования звёздочки.
Если вам нужно применить модификатор к нескольким файлам в разных папках, то гораздо надёжнее использовать перечисление путей, либо glob паттерны:
<!-- пример перечисления -->
<file path="catalog/controller/catalog/product.php|catalog/controller/catalog/category.php">
<!-- пример glob паттерна -->
<file path="catalog/controller/catalog/{product,category}.php">
3. Используйте весь функционал OCMOD! 👻
Хоть OCMod это и упрощённая версия VQMod, он всё же позволяет делать многие полезные вещи!
Возьмём к примеру тег ignoreif. Я его практически никогда не встречал, однако он тоже может оказаться полезен.
С помощью этого тега вы можете пропускать операцию изменения в случае, если в обрабатываемом файле найдено содержимое этого тега:
<operation>
<search><[CDATA[$this->language->load('something');]]></search>
<ignoreif><[CDATA[$this->language->load('other');]]></ignoreif>
<add position="after"><![CDATA[$this->language->load('something');]]></ignoreif>
</operation>
Ознакомьтесь со всеми возможностями OCMod на сайте проекта — https://github.com/opencart/opencart/wiki/Modification-System
Стоит всегда помнить — OCMod опасная штука! 🔥
Opencart даёт не самую плохую базу для разработки, однако подходы используемые в этой CMS могут быть довольно опасны для новичков.
OCMod скрипт, отлично сработавший в тестовом магазине, может запросто отвалиться на рабочей версии сайта, поэтому всегда всесторонне проверяйте свои модификаторы!