Навігація

Останні статті

Редагування головної сторінки OpenCart
29.09.2025 2666 3 3 хв.

Редагування головної сторінки OpenCart налаштування тексту заголовків H1 та Title, виведен..

Як видалити Powered by OpenCart
03.09.2025 4135 3 3 хв.

Видаліть Powered by OpenCart та налаштуйте футер: редагування шаблону, використання редакт..

Як видалити модулі в OpenCart
28.08.2025 2117 3 2 хв.

Покрокова інструкція з видалення модулів в OpenCart 3 через адмінку, вручну та з бази дани..

Який хостинг вибрати для OpenCart
25.08.2025 1436 3 3 хв.

Дізнайтеся, який хостинг вибрати для OpenCart інтернет-магазину. Вимоги, критерії вибору, ..

Як працює OCMOD: інструкція для розробника

42376 2 4 хв.
Як працює OCMOD: інструкція для розробника

Принцип роботи 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>
ChatGPT консультант

Коментарі

Залиште свій коментар або запитання
Как выполнить sql-запрос при установки ocmod в opencar 3? В opencart 2 в ocmod можно было добавлять install.sql и install.php с sql-запросами, но в 3-ке это не работает. Как теперь добавлять строки, столбцы и новые талицы в бд через ocmod? Мне подсказали что можно создать методы install и unistal в моделе и вызывать их при установке ocmod, но мне не хватает опыта, чтобы самому додуматься. Пытался разобрать бесплатные модули на опенкарт 3 для примера, но их очень мало и я не нашел модуля с sql запросами ALTER TABLE А всего-то, надо просто добавить 1 столбец в oc_product....
Відповідь Адміністратора

Расширенный установщик посмотрите тут.

Ніяк не можу вивести значення кількості переглядів на головну сторінку в один з модулів (модуль tt_product_cat). Може хтось допомогти?
Відповідь Адміністратора

Написати коментар

Популярні модулі