← Повернутись до блогу

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

July 2018 6 хвилин на читання 249 переглядів

Використовувати модифікатори при роботі з системою OpenCart зовсім не обов’язково (мається на увазі їх написання), але розуміти принцип їх роботи необхідно кожному розробнику.

Чому необхідно знати про модифікатори?

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

Якщо ви тільки починаєте розбиратися з OpenCart, важливу увагу слід приділити системі модифікаторів. Необхідно знати про те, що таке модифікатор, як його написати, оновити, видалити. У цій статті я постараюся відповісти на всі ці питання.

Що таке модифікатор і для чого він використовується?

Щоб зрозуміти що таке модифікатори, спочатку давайте розберемо для чого вони необхідні.

OpenCart — система управління сайтом (CMS), яка має досить велику кількість розробників, які беруть участь у її розвитку, шляхом написання та розповсюдження своїх плагінів. Плагін — набір файлів, які розширюють функціональність системи, додаючи в неї нові функції. Про те, як написати плагін, думаю, я ще встигну розповісти в одній з майбутніх статей. Іноді, для того, щоб додати нову функціональність на сайт — слід внести зміни в уже існуючий код, що робити категорично не можна. Здогадуєтесь чому? Якщо два розробники плагінів перепишуть один і той самий системний файл — при встановленні обох плагінів на сайт — системний файл буде перезаписаний, і залишиться лише один файл, на сайті з’являться помилки, функціональність одного з двох встановлених плагінів буде порушена.

Для того, щоб уникнути таких конфліктів — були придумані модифікатори.

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

У файлі модифікацій описуються такі дані:

  1. Файл, в який внести зміну
  2. Ділянка коду, над якою проводиться операція
  3. Яку зміну слід вносити

Не лякайтеся, якщо все ще не зрозуміло, розуміння прийде з першим прикладом.

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

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

  • Операція над файлом — це процедура модифікації однієї ділянки коду у вихідному файлі.

  • Синтаксис модифікаторів — Правила написання модифікатора. Синтаксис визначає які теги можна використовувати і з якими атрибутами.

  • Оновити модифікатор — виконати дію в адмін частині сайту з оновлення модифікаторів.

  • Доповнення — розширення для CMS OpenCart, яке додає нові можливості в систему. Я називаю доповнення «плагінами» (за аналогією з WordPress), але сама система називає їх «Доповнення» (Extensions)

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

Час розбавити статтю прикладами. Давайте подивимося на один приклад модифікатора.

Приклад файлу модифікації:

<?xml version="1.0" encoding="utf-8"?>
<modification>
    <n>Назва модифікатора</n>
    <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>
    <n>...</n>
    <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> можна передати такі дані:

  • 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

За оновлення модифікаторів відповідає спеціально створений розділ в адмін панелі, який можна знайти, в меню «розширення» — «модифікатори». Для оновлення модифікаторів слід натиснути на синю кнопку в правому верхньому куті сторінки. Також на цій сторінці можна видалити модифікатори, які вже є або вимкнути ті, які на вашу думку не слід використовувати.

Висновок

Модифікатори — зовсім не складна тема для розуміння. Якщо після прочитання статті у вас залишилися питання — задавайте їх у коментарях до цієї статті.

2018–2025 (c) Списуй але не один в один