Дата публікації
10.06.2023
Переглядів:
119

Теги модифікатора OCMOD та їх функціональність

Тег - File

Вказує, у якому файлі чи файлах потрібно внести зміни. Обов'язковий атрибут path містить шлях до файлу, що змінюється. Може вказувати на один файл або кілька. Для вказівки кількох файлів, розміщених у різних папках, використовується символ " | ". Наприклад, внести зміни до category.php, manufacturer.php, search.php і special.php .

<file path = "catalog/controller/product/category.php|catalog/controller/extension/module/special.php" > 

Для скорочення коду можна використовувати фігурні дужки, які дозволяють вказати кілька значень через кому: Наприклад, внести зміни відразу в чотири файли category.php, manufacturer.php, search.php і special.php . при цьому суфікс .php можна винести за фігурні дужки.

<file path = "catalog/controller/product/{category,manufacturer,search,special}.php" > 

Також можна використовувати символи " * " та " ? ", щоб вказати шлях по "масці". Буває корисним для модифікації файлів шаблонів.

<file path = "catalog/view/theme/*/template/product/category.twig" > 

Так як ми не знаємо заздалегідь, які саме теми встановлені в OpenCart, ми вказали " * " після " theme ", тоді модифікуватимуться всі category.twig у всіх шаблонах, що знаходяться в папці " theme ".

Наприклад так:

<file path = "catalog/controller/product/*.php" >

 означає ми будемо шукати у всіх контролерах у папці product

можна і так

<file path = "catalog/controller/product/{category,manufacturer,search,special,product}.php" >


Тег - Operation

Вказує початок секції модифікації, що виробляється. Всередині файлу секцій <operation> може бути кілька. Тобто, ми можемо робити відразу кілька змін в одному файлі. Тег operation може мати необов'язковий атрибут error , який може приймати значення:

skip - у разі помилки пропустити поточну секцію <operation> та перейти до наступної <operation>

log (за замовчуванням) - у разі помилки пропустити всю секцію <file> та перейти до наступного <file>

abort - у разі помилки перервати усі модифікації у xml файлі

Наприклад, знайти у файлі category.twig код " <div class="caption"> " і якщо його немає, тоді пропустити і перейти до наступної операції і знайти " <p class="price"> "

<file path = "catalog/view/theme/*/template/product/category.twig" > 
<operation error = "skip" >
<search> <![CDATA[ <div class = "caption">]]>< /search>
<add position = "after" ><![CDATA[ 
 <span class = "sku" > {{product.sku}} </span>     ]]>
</add>
</operation>
<operation error = "skip">
<search><![CDATA[ <p class   = "price" > ]]> </search>
<add position = "before" > <![CDATA[
 <span class = "sku" > {{product.sku}} </span>]]>
</add >
</operation>
</file>  

Якщо не вказати атрибут error="skip" , тоді першому пошуку тексту " <div class="caption"> " вся секція <file> буде перервана і проігнорована.

Тег - Search

Вказує, який текст потрібно знайти у поточній операції. Містить кілька правил використання тега:

Тег search може бути використаний лише 1 раз усередині секції operation .

Пошук можна робити лише 1 рядка повністю або частини рядка (не можна шукати кілька рядків одночасно).

Шуканий текст необхідно розміщувати виключно між <![CDATA[ і ]]> .

Пробіли та переноси рядка до тексту, що шукається, і після шуканого тексту ігноруються, текст можна написати або відразу після CDATA або з нового рядка після CDATA , якщо тільки не вказано атрибут trim="false" .

Зміни застосовуються до всіх знайдених у файлі рядків коду або їх частин, якщо не вказано атрибут index .

Спеціальні теги <![CDATA[ і ]]> - використовуються в xml файлах для вказівки будь-яких символьних даних, що означає, що між ними може знаходитися будь-який текст, що містить дужки, значки більше, менше та інші, у тому числі html і php код .

Тег search містить наступні атрибути, які використовуються для точного визначення місця внесення зміни:

index - вказує, у якому порядку знайденому тексті внести зміни. Тобто. якщо у файлі потрібний текст зустрічається кілька разів, тоді index дозволяє вказати номер знайденого по порядку тексту (0 завжди перший знайдений текст, 1 - другий і т.д.) Можна також вказати кілька номерів через кому.

Без параметра index - операція застосовується до всіх співпадань у файлі, тобто якщо буде 5 однакових співпадань, то всі 5 буде замінено. Якщо треба лише перше співпадання, вказуємо index ="0", третє - вказуємо index ="2"

trim - вказує ігнорувати ( true ) чи ні ( false ) прогалини та переноси рядків до та після шуканого тексту.

regex - якщо встановлено значення true, отже шуканий текст є регулярним виразом для пошуку.

Приклад: пошук атрибутом index серед подібних рядків коду.

<file path = "admin/controller/common/column_left.php" >
<operation> <search index = "0" trim = "true" > <![CDATA[ $data['menus'][] = array(]]> </search>
<add position = "before" > <![CDATA[
         $data['menus'][] = array(
        'id' => 'new_menu',
        'icon' => 'fa-menu',
        'name' => 'New Menu',
        'href' => 'new-menu/'
      );
    ]]>
</add>
</operation>
</file>

  

У прикладі по index знайдено перший рядок коду $data['menus'][] = array( " і перед нею додаємо свій код.

Тег - Add

Тег add містить текст, який буде замінений або доданий до або після тексту.

Так само, як і тег search , тег add повинен містити <![CDATA[ і ]]>, між якими вставляється текст коду, який буде доданий або на який буде замінено шуканий текст.

Тег add має свої атрибути:

position - може набувати значень:

o replace (за замовчуванням) – заміна знайденого тексту

o before – додати текст перед знайденим текстом

o after – додати текст після знайденого тексту

offset - означає усунення щодо знайденого тексту на вказану кількість рядків. Якщо position="before" , тоді усунення буде вгору від знайденого тексту, якщо position="after" або position="replace" , тоді усунення буде вниз від знайденого тексту.

trim - вказує ігнорувати ( true ) чи ні ( false ) прогалини та переноси рядків до та після шуканого тексту.

Приклад: Додамо посилання " Link " у футер на передній частині.

<file path = "catalog/view/theme/default/template/common/footer.twig" >
<operation>
<search index = "1" trim = "true" ><![CDATA[<ul class = "list- unstyled" > ]]></search>
<add position = "after" offset = "1" trim = "true" >
<![CDATA[
       <li> <a href = "#" > Link </a></li> 
    ]]>
</add>
</operation> 
</file>

Атрибут index="1" знаходить 2-й код код <ul class="list-unstyled">, потім використовуючи атрибут offset="1" на один рядок нижче знайденого тексту додає код <li><a href="#" >Link</a></li> .

Модифікатор OCMOD дозволяє в OpenCart розширити можливості, не торкаючись оригінальних файлів, а для повернення у вихідний стан вам буде достатньо видалити його.