Теги модифікатора 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 розширити можливості, не торкаючись оригінальних файлів, а для повернення у вихідний стан вам буде достатньо видалити його.