Модификаторы в OpenCart 2

Использовать модификаторы при работе с системой OpenCart совершенно не обязательно (имеется ввиду их написание), но понимать принцип их работы необходимо каждому разработчику.

Почему необходимо знать про модификаторы?

Модификаторы в OpenCart — одна из наиболее важных тем для понимания системы. Многие  плагины (дополнения) активно используют модификаторы, которые не всегда могут подходить именно для вашего, сайта. Как итог, будет возникать необходимость редактирования файлов функциональности, которая спрятана в файл модификатора.

Если вы только начинаете разбираться с OpenCart, важное внимание следует уделить системе модификаторов. Необходимо знать о том, что такое модификатор, как его написать, обновить, удалить. В этой статье я постараюсь ответить на все эти вопросы.

Что такое модификатор и для чего он используется?

Чтобы понять что такое модификаторы, сначала давайте разберем для чего они необходимы.

OpenCart — система управления сайтом (CMS), которая имеет довольно большое число разработчиков, которые участвую в её развитии, путем написания и распространения своих плагинов. Плагин — набор файлов, которые расширяют функциональность системы, добавляя в нее новые функции. О том, как написать плагин, думаю, я еще успею рассказать в одной из будущих статей. Иногда, для того, чтобы добавить новую функциональность на сайт — следует внести изменения в уже существующий код, что делать категорически нельзя. Догадываетесь почему? Если два разработчика плагинов перепишут один и тот-же системный файл — при установке обеих плагинов на сайт — системный файл будет перезаписан, и останется лишь один файл, на сайте появятся ошибки, функциональность одного из двух установленных плагинов будет нарушена.

Для того, чтобы избежать таких конфликтов — были придуманы модификаторы.

Модификатор (файл модификации) — файл, который имеет формат xml, в котором описываются изменения, которые следует внести в другие системные файлы. Модификаторы дают возможность нам, разработчикам, расширять возможности системы, путем изменения системных файлов, не изменяя сами файлы при этом.

В файле модификаций описываются такие данные:

  1. Файл, в который внести изменение
  2. Участок кода, над которым проводится операция
  3. Какое изменение следует вносить

Не пугайтесь, если все еще не понятно, понимание прийдет с первым примером.

Терминология:

  • Модификатор — файл, который имеет формат xml, который содержит информацию о изменениях, которые необходимо вносить в систему (Подробнее будет описано ниже).
  • Операция над файлом — это процедура модификации одного участка кода в исходном файле.
  • Синтаксис модификаторов — Правила написания модификатора. Синтаксис определяет какие теги можно использовать и с какими атрибутами.
  • Обновить модификатор — выполнить действие в админ части сайта по обновлению модификаторов.
  • Дополнение — расширение для CMS OpenCart, которое добавляет новые возможность в систему. Я называю дополнения «плагинами» (по аналогии с WordPress), но сама система называет их «Дополнения» (Extensions)

Пример модификатора для cms OpenCart.

Пора разбавить статью примерами. Давайте посмотрим на один пример модификатора.

Пример файла модификации:
<?xml version="1.0" encoding="utf-8"?>
<modification>
    <name>Название модификатора</name>
    <version>1.0</version>
    <author>Имя автора модификатора</author>
    <link>ссылка на сайт автора</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>

Как говорилось выше, модификатор — xml файл, которые описывает изменения в системных файлах. Кроме самого описания, в таком файле описываются некоторые метаданные:

  1. name — Название модификатора (должно быть уникальным из всех установленных);
  2. version — Версия модификатора;
  3. author — Имя автора;
  4. link — ссылка на сайт автора (лучше указать ссылка на статью, в которой описываются детали плагина или модификатора, в прочем, можно не указывать ничего)

Основной частью любого файла является тег <file> и его содержимое.

<file path="catalog/controller/common/home.php">
  <operation>
    <search><![CDATA[
    $data['column_left'] = $this->load->controller('common/header');
    ]]></search>
    <add position="replace"><![CDATA[
    //эта строка будет вставлена вместо содержимого "$data['column_left'] = $this->load->controller('common/header');" в файле "catalog/controller/common/home.php"
    ]]></add>
  </operation>
</file>

В самом теге есть атрибут path, который указывает путь к файлу, над которым будет производиться процедура модификации; В одном файле модификаций можно описать изменения в нескольких файлов.

Пример операций над несколькими файлами в модификаторе:
<?xml version="1.0" encoding="utf-8"?>
<modification>
    <name>...</name>
    <version>...</version>
    <author>...</author>
    <link>...</link>

    <file path="путь_к_первому_файлу">
        <operation>
            ...
        </operation>
    </file>

  <file path="путь_к_второму_файлу">
        <operation>
            ...
        </operation>
    </file>
  <file path="путь_к_третьему_файлу">
        <operation>
            ...
        </operation>
    </file>
</modification>

Тег <operation> внутри тега <file> описывает начало операции, которую мы производим над файлом, над одним файлом можно проводить несколько операций. Во время выполнения одной операции мы выполняем некоторые действия над файлом, подробнее о действиях мы поговорим в теме синтаксиса модификаторов (ниже на этой странице). Для описания операции используются два тега:

  1. <search> — внутри тега указывается строка кода, над которой и будет производиться операция. Помните о том, что внутри тега <operation> следует указывать только один тег <search>.
  2. <add> — внутри этого тега указывается код, который будет заменять (добавлять после или добавлять до) строчку кода, которая находится в теге <search>.
Пример нескольких операций над одним файлом:
<file path="путь_к_первому_файлу">
  <operation>
    <search>
    <![CDATA[
    некоторый код
    ]]></search>
    <add>
    <![CDATA[
    некоторый код
    ]]></add>
  </operation>

  <operation>
    <search>
    <![CDATA[
    некоторый код
    ]]></search>
    <add>
    <![CDATA[
    некоторый код
    ]]></add>
  </operation>

  <operation>
    <search>
    <![CDATA[
    некоторый код
    ]]></search>
    <add>
    <![CDATA[
    некоторый код
    ]]></add>
  </operation>
</file>

Обратите внимание на то, что код обернут в в CDATA. По сути — это часть синтаксиса XML файла. Более подробно об этом можно почитать на википедии.

Синтаксис модификаторов OpenCart

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

Атрибуты тега <operation>

  • error=»skip|abort» — указывает на то, что следует сделать при ошибке в поиске данных. Skip — пропустит текущую операции и перейдет к новой, abort — остановит выполнение модификатора. О статусе ошибки будет записано в лог файл модификаторов.

Атрибуты тега <search>

В атрибуты тегу <search> можно передать такие данные:

  • trim=»(true|false)» — указывает на то, следует ли удалять пробелы в искомом тексте
  • index=»(number)» — указывает на то, к какому совпадению применить изменение. В файле может быть несколько одинаковых строк, используется для того, чтобы выбрать одну. В значение к атрибуту можно передать индекс (номер) найденного текста, над которым будет производиться операция. Если не указать индекс, а в файле, который Вы модифицируете есть несколько строк кода — операция будет произведена над всеми найденными строками.
  • regex=»(true|false)» — так-же можно искать по регулярных выражениях. Если передать значение true, то внутрь тега search можно прописать регулярное выражение. (если Вы не знаете регулярных выражений, этим лучше не пользоваться)

Атрибуты тега <add>

В теге <add> следует указать один обязательный атрибут:

position=»(replace|before|after)» — указывает что делать с найденной строкой.

  • replace — заменить строку в теге search на строку из тега add;
  • before — вставить строку из тега add перед найденой строкой из тега search
  • after — вставить строку из тега add после найденой строкой из тега search

Необязательные атрибуты тега <add>

  • trim=»(true|false)» — указывает на необходимость удаления ненужных пробелов перед вставкой кода
  • offset=»(число)» — указывает количество строчек, которые следует отступить от кода, который указан в теге search. Если тег «add» будет иметь атрибут position=»before» и offset=«3», будет найдена искомая строка, перед ней будут добавлены три строки отступа, и вставлен код с тега add.

Как работают модификаторы в OpenCart

Модификаторы — не заменяют содержимое самого файла. Вместо этого — создается новый файл, который можно найти пути оригинального файла, но в папке «/system/storage/modification/»

Например, если модифицировался файл «catalog/controller/common/home.php», то его копию, которая и будет работать на сайте вместо него можно найти по пути «system/storage/modification/catalog/controller/common/home.php»

Не редактируйте файлы модификаций (все файлы, которые находятся в system/storage/modification). Вместо этого — редактируйте модификаторы и обновляйте их. Если изменить файл, который был сгенерирован модификатором — при следующем обновлении модификаторов — изменения будут удалены.

OpenCart хранит модификаторы в двух местах: 

  1. В папке /system, сюда можно внести свой модификатор, которые Вы разрабатываете для определенного плагина.
  2. В базе данных (таблица oc_modification). Все модификаторы плагинов записываются в базу данных и хранятся там как xml строка. В базу попадают все модификаторы, которые были установлены посредством стандартного загрузчика плагинов в ОС. 

При редактировании модификатора — не забывайте очищать кеш. При очистке кеша считываются и выполняются все модификации над описанными внутри них файлами.

Как обновить модификаторы в OpenCart

За обновление модификаторов отвечает специально созданный раздел в админ панели, который можно найти, в меню «расширения» — «модификаторы».

Для обновления модификаторов следует нажать на синюю кнопку в правом верхнем углу страницы.

Также на этой странице можно удалить модификаторы, которые уже есть или отключить те, которые по вашему мнение не следует использовать.

Заключение

Модификаторы — совсем не сложная тема для понимания. Если после прочтения статьи у вас остались вопросы — задавайте их в комментариях к этой статье.

Anatolii Koziura

Антураж-куражмонтаж в мире web разработки.

2 thoughts to “Модификаторы в OpenCart 2”

  1. Добрый день. Для какой версии здесь написано как обновлять дополнения? У меня ocStore 2.3.0.2 — там обновление дополнений находиться в разделе менеджер дополнений

    1. Добрый!
      Да, в разных сборках раздет с обновлением модификаторов может называться по разному.
      Скриншот в статье из сборки OpenCart Pro 2.3.0.2, но раздел с обновлением дополнений всегда находиться в разделе «дополнения», там его можно и найти, если у Вас отличается название пункта.

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *