Категории

Система Модификаций

OCMOD - это система, которая позволяет владельцам магазинов изменять их, загружая сжатый файл, содержащий файлы XML, SQL и PHP.

Если OCMOD разработан правильно, он может изменить работу пользовательского хранилища OpenCart без изменения каких-либо основных файлов. Это означает, что если модификация удалена, ни один из исходных файлов OpenCart не должен быть восстановлен или исправлен.

OCMOD основан на системе Qphoria VQMOD.

Различия между OCMOD и 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

Файлы OCMOD могут быть загружены через администратора opencart в: Расширения / Установщик

Для загрузки файла OCMOD расширение файла должно быть .ocmod.zip. Это сделано для того, чтобы файлы OCMOD не загружались администратору магазина.

Файловая структура

Пример структуры файла для сжатых файлов OCMOD.

  • upload

    Все файлы в этом каталоге будут загружены в каталог Вашей установки OpenCart.

  • install.xml

    Файл модификации XML.

Вы можете просмотреть документацию для этой системы ниже.

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>

Regex

Разрешенные атрибуты
  • 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