OCMOD - это система, которая позволяет владельцам магазинов изменять их, загружая сжатый файл, содержащий файлы XML, SQL и PHP.
Если OCMOD разработан правильно, он может изменить работу пользовательского хранилища OpenCart без изменения каких-либо основных файлов. Это означает, что если модификация удалена, ни один из исходных файлов OpenCart не должен быть восстановлен или исправлен.
OCMOD основан на системе Qphoria VQMOD.
OCMOD был создан как упрощенная урезанная версия VQMOD.
Основные отличия
Replace, Before, After, Regex, Offset, Limit, ignoreif, error
Attributes top, bottom, ibefore, iafter
Вы должны проверить раздел XML документации, чтобы увидеть полный список возможностей OCMODS.
Домашнюю страницу проекта VQMOD можно найти здесь: https://github.com/vqmod/vqmod/wiki/Scripting
Файлы OCMOD могут быть загружены через администратора opencart в: Расширения / Установщик
Для загрузки файла OCMOD расширение файла должно быть .ocmod.zip. Это сделано для того, чтобы файлы OCMOD не загружались администратору магазина.
Пример структуры файла для сжатых файлов OCMOD.
Все файлы в этом каталоге будут загружены в каталог Вашей установки OpenCart.
Файл модификации XML.
Вы можете просмотреть документацию для этой системы ниже.
Это файл, который создает виртуальную копию любых файлов, которые требуют изменений. Используйте эту систему вместо перезаписи любых файлов установки по умолчанию. Несколько изменений могут быть применены к одному и тому же файлу.
Пример файла OCMOD:
<?xml version="1.0" encoding="utf-8"?>
<modification>
<name>Modification Default</name>
<version>1.0</version>
<author>OpenCart Ltd</author>
<link>http://www.opencart.com</link>
<file path="catalog/controller/common/home.php">
<operation>
<search>
<![CDATA[
$data['column_left'] = $this->load->controller('common/column_left');
]]>
</search>
<add position="replace">
<![CDATA[
test123
]]>
</add>
</operation>
</file>
</modification>
Вы можете установить несколько местоположений файлов, разделив их запятыми. Система модификации использует PHP-функцию glob.
http://hk1.php.net/manual/en/function.glob.phpПример:
Прямой путь к файлу <file path="catalog/controller/common/home.php">
Использование фигурных скобок позволяет выбрать несколько файлов и не нужно повторять код операции несколько раз <file
path="system/engine/action.php|system/engine/loader.php|system/library/config.php|system/library/language.php">
также позволяет фигурные скобки <file path="system/{engine,library}/{action,loader,config,language}*.php">
Обратите внимание, что все пути к файлам должны начинаться с администратора, каталога или системы. Вы также можете использовать подстановочный знак * для поиска в нескольких каталогах и файлах.
Поиск кода
trim="(true|false)"
regex="(true|false)"
index="(number)"
Пример:
<?xml version="1.0" encoding="utf-8"?>
<modification>
<name>Modification Default</name>
<version>1.0</version>
<author>OpenCart Ltd</author>
<link>http://www.opencart.com</link>
<file path="catalog/controller/common/home.php">
<operation>
<search trim="true|false" index="1"><![CDATA[
$data['column_left'] = $this->load->controller('common/column_left');
]]></search>
<add position="replace" offset="1"><![CDATA[
test123
]]></add>
</operation>
</file>
</modification>
Код для замены поиска.
trim="(true|false)"
position="(replace|before|after)"
offset="(number)"
(позиция примечания не может быть использована, если регулярное выражение установлено в true в атрибуте поиска).
Пример:
<?xml version="1.0" encoding="utf-8"?>
<modification>
<name>Modification Default</name>
<version>1.0</version>
<author>OpenCart Ltd</author>
<link>http://www.opencart.com</link>
<file path="catalog/controller/common/home.php">
<operation>
<search trim="true|false"><![CDATA[
$data['column_left'] = $this->load->controller('common/column_left');
]]></search>
<add position="replace|before|after" trim="true|false" offset="2"><![CDATA[
test123
]]></add>
</operation>
</file>
</modification>
limit="(number)"
Пример:
<?xml version="1.0" encoding="utf-8"?>
<modification>
<name>Regex Example</name>
<version>1.0</version>
<author>OpenCart Ltd</author>
<link>http://www.opencart.com</link>
<file path="system/{engine,library}/{action,loader,config,language}*.php">
<operation>
<search regex="true" limit="1"><![CDATA[
~(require|include)(_once)?\(([^)]+)~
]]></search>
<add><![CDATA[
$1$2(modification($3)
]]></add>
</operation>
</file>
Если Вы используете регулярное выражение, Вы не можете использовать атрибуты position, trim или offset, поскольку они обрабатываются кодом регулярного выражения, который Вы пишете. Атрибут limit все еще доступен.
Если, например, Вы хотите изменить 3-й 'foo' на 'bar' в следующей строке:
lorem ifoopsum foo lor foor ipsum foo dolor foo
^1 ^2 ^3 ^4 ^5
Запустить:
s/\(.\{-}\zsfoo\)\{3}/bar/
Результат:
lorem ifoopsum foo lor barr ipsum foo dolor foo
^1 ^2 ^3=bar ^4 ^5
Вы можете найти больше информации о PHP-функции регулярного выражения, которую использует OCMOD, можно найти здесь: http://hk2.php.net/manual/en/function.preg-replace.php
Более подробную информацию о регулярном выражении можно найти здесь: http://www.regular-expressions.info