Принцип роботи OCMOD
Останнім часом все частіше трапляються питання: що таке OCMOD? або як працює OCMOD? Спробуємо розібратися.
OCMOD – це такий програмний комплекс, який дозволяє змінювати (доповнювати) інтернет-магазин на OpenCart, не змінюючи та не перезаписуючи вихідні файли інтернет-магазину. Так! Змінювати, не змінюючи! Якщо OCMOD доповнення створено правильно, то при його видаленні просто відновлюється попередній стан інтернет-магазину. Краса!
Після встановлення, файл OCMOD-модифікатора створює тимчасовий файл у папці system/storage/modification/ який і використовується двигуном OpenCart. Ці файли оновлюються щоразу, коли ви натискаєте кнопку "Оновити" в "Менеджері додатків" адміністративної частини.
Зверніть увагу: якщо Ви вносите зміни безпосередньо до файлів, розміщених у папці system/storage/modification/ Ви втратите всі зміни відразу після натискання кнопки "Оновити"! Ці файли можна використовувати для перевірки працездатності змін, але потім всі зміни повинні бути перенесені в OCMOD файл!
Установка OCMOD
OCMOD йде в стандартному постачанні OpenCart, починаючи з 2-ої версії і його не потрібно встановлювати! Гілка на github знаходиться тут.
З чого складається OCMOD модифікатор
OCMOD модифікатор може складатися з одного файлу з розширенням xml. У цьому випадку на сервер нічого, крім нього, не завантажується, а тільки виконуються інструкції з цього файлу. Є обов'язковим правилом для імені такого файлу: розширення файлу має бути .ocmod.xml
Якщо крім інструкцій нам необхідно завантажити на сервер додаткові файли (припустимо файли модуля), тоді файл повинен являти собою zip-архів з розширенням .ocmod.zip. При цьому структура архіву також має підкорятися певним правилам:
- папка upload, яка містить всі файли, що завантажуються на сервер, відповідно до структури папок OpenCart (до версії OpenCart 3 папка upload обов'язкова і без неї архів неможливо завантажити через установник в адмінці. І навіть якщо доповнення не має власних файлів і файли завантажувати непотрібно, вона повинна бути обов'язково порожня)
- файл install.xml, який містить інструкції для зміни вихідних файлів інтернет-магазину.
- файл install.sql, який містить запити SQL, що виконуються під час встановлення доповнення.
- файл install.php, який містить PHP код, що виконується під час встановлення доповнення.
Окрім цього, OCMOD модифікатор може містити необхідні SQL та PHP-інструкції, але в цій статті ми їх розглядати не будемо.
Помилка в Інсталяторі додатків OCMOD — неправильний тип файлу
Один із способів встановлення zip-архіву доповнення OCMOD – розпакувати файл у себе на комп'ютері, залити через ftp або через панель хостингу вміст папки uplod на сервер, а потім через інсталятор додатків встановити xml-файл. Однак, якщо ви спробуєте завантажити install.xml безпосередньо в "Установник додатків OCMOD" - Ви отримаєте помилку "неправильний тип файлу". Як цього уникнути? Легко — просто перейменуйте файл у, наприклад, name.ocmod.xml , тобто Ви повинні встановлювати тільки файли з розширенням .ocmod.xml
Перейдемо безпосередньо до структури OCMOD файлу XML
<?xml version="1.0" encoding="utf-8"?>
<modification>
<name>Кількість переглядів у товарі</name>
<code>product-page-views</code>
<version>1.0</version>
<author>https://ocmod.net</author>
<link>https://ocmod.net</link>
<file path="catalog/controller/product/product.php">
<operation>
<search>
<![CDATA[$data['images'] = array();]]>
</search>
<add position="after">
<![CDATA[
$data['view'] = $product_info['viewed'];
]]>
</add>
</operation>
</file>
<file path="catalog/language/en-gb/product/product.php">
<operation>
<search>
<![CDATA[$_['text_search']]]>
</search>
<add position="before">
<![CDATA[
$_['text_view'] = 'View:';
]]>
</add>
</operation>
</file>
<file path="catalog/language/ru-ru/product/product.php">
<operation>
<search>
<![CDATA[$_['text_search']]]>
</search>
<add position="before">
<![CDATA[
$_['text_view'] = 'Переглядів: ';
]]>
</add>
</operation>
</file>
<file path="catalog/language/uk-ua/product/product.php">
<operation>
<search>
<![CDATA[$_['text_search']]]>
</search>
<add position="before">
<![CDATA[
$_['text_view'] = 'Переглядів: ';
]]>
</add>
</operation>
</file>
<file path="catalog/view/theme/*/template/product/product.twig">
<operation>
<search index="2">
<![CDATA[{% if review_status %}]]>
</search>
<add position="before">
<![CDATA[
<h4>{{ text_view }}{{ view }}</h4>
]]></add>
</operation>
</file>
</modification>До обов'язкових елементів структури OCMOD файлу належать:
- заголовок <?xml version="1.0" encoding="utf-8"?>
- <modification> </modification> - без параметрів
- <code> </code> - містить унікальний код (можете придумати будь-який, що складається з цифр та латинських літер)
- <name> </name> - містить ім'я модифікатора
- <version> </version> — версія модифікатора
- <author></author> - автор модифікатора
Необов'язкові елементи:
- <link> </link> — посилання на сайт автора або ще будь-куди.
Далі йде код, який відповідає за модифікацію файлів:
- <file path="catalog/controller/product/product.php"> </file> — вказує шлях до файлу, в якому необхідно внести зміни. Якщо необхідно замінити / змінити однаковий шматок коду можна використовувати зірочку (*), фігурні дужки та коми:
- <file path="catalog/view/theme/*/template/product/product.twig"> </file> (зручно використовувати для заміни у всіх темах).
- <file path="catalog/controller/module/{bestseller.php,featured.php,latest.php,special.php}"> </file> (Зверніть увагу: перерахування має бути без пробілів!!!)
- <operation> </operation> — оскільки до одного й тому файлу можуть застосовуватися різні операції, таких тегів може бути дещо в одному файлі.
Тег <search> </search>
Далі йде пошук входження: <search></search> .
Зверніть увагу: пошук здійснюється за одним цілим рядком, якщо необхідно замінити більше одного рядка, необхідно використовувати або атрибут regex для тега <search> </search> , або атрибут offset .
Тут зупинимося докладніше. Часто запитують: як адаптувати модуль під будь-яку тему. Ось тут і криється відповідь на це запитання! <search> </search> здійснює пошук входження будь-якої частини коду. Ось частина коду із файлу install.xml:
<file path="catalog/view/theme/*/template/product/product.twig">
<operation>
<search index="2">
<![CDATA[{% if review_status %}]]>
</search>
<add position="before">
<![CDATA[
<h4>{{ text_view }}{{ view }}</h4>
]]></add>
</operation>
</file>Цей код здійснює пошук у файлі catalog/view/theme/*/template/product/product.twig частини коду:
{% if review_status %}Це код перевірки наявності відгуків у товару. У стандартному шаблоні він трапляється 3 рази.
В інших шаблонах/темах цей код може зустрічатися більш-менш разів. Саме тому модифікатор не може знайти необхідне входження коду та додати кількість переглядів у товарі у потрібному нам місці.
Необов'язковий атрибут тега <search> </search> : index, який необхідно використовувати, якщо код, який Ви шукаєте, не унікальний у даному файлі , як у нашому випадку. Ми можемо знайти перше входження цього коду, вказавши <search index="0"> </search> .
Зверніть увагу: перше входження має index="0", а не index="1".
Необов'язковий атрибут для тега <search> </search> : regex, який дозволяє шукати частину коду за регулярним виразом.
Рекомендуємо користуватися цим тестером регулярних виразів http://uvsoftium.ru/php/regexp.php
Тег <add> </add>:
Якраз у ньому вказується код, який буде додано у вихідний файл. При цьому він має важливий і обов'язковий атрибут position , який може приймати значення:
- before — як видно з назви, код, що додається, буде вставлений до коду, знайденого тегом <search> </search>
- after — як видно з назви, код, що додається, буде вставлений після коду, знайденого тегом <search> </search>
- replace — як видно з назви, код, що додається, буде вставлений замість коду, знайденого тегом <search> </search>
Ще раз подивимось на код:
<file path="catalog/view/theme/*/template/product/product.twig">
<operation>
<search index="2">
<![CDATA[{% if review_status %}]]>
</search>
<add position="before">
<![CDATA[
<h4>{{ text_view }}{{ view }}</h4>
]]></add>
</operation>
</file>Як бачимо: у даному випадку код кількості переглядом додається перед (before) третім входженням коду для перевірки наявності відгуків
Необов'язковий атрибут тега <add> </add>: offset , який дозволяє зробити відступ від знайденої частини коду.
<file path="catalog/view/theme/*/template/product/product.twig">
<operation>
<search index="2">
<![CDATA[{% if review_status %}]]>
</search>
<add position="before" offset="4">
<![CDATA[
<h4>{{ text_view }}{{ view }}</h4>
]]></add>
</operation>
</file>Говорячи зрозумілою мовою, знайти входження коду
{% if review_status %}і, відступивши 4 рядки додати код
<h4>{{ text_view }}{{ view }}</h4>













































Коментарі