Последние статьи

Редактирование главной страницы OpenCart

Редактирование главной страницы OpenCart

29.09.2025 1815 2 1 мин.

Редактирование главной страницы OpenCart настройка текста заголовков H1 и Title, вывод тов..

Как удалить Powered by OpenCart

Как удалить Powered by OpenCart

03.09.2025 2816 3 1 мин.

Удалите Powered by OpenCart и настройте футер: редактирование шаблона, использование редак..

Как удалить модули в OpenCart

Как удалить модули в OpenCart

28.08.2025 1395 3 1 мин.

Пошаговая инструкция по удалению модулей в OpenCart 3 через админку, вручную и из базы дан..

Какой хостинг выбрать для OpenCart

Какой хостинг выбрать для OpenCart

25.08.2025 1134 3 1 мин.

Узнайте какой хостинг выбрать для OpenCart интернет-магазина. Требования, критерии выбора,..

Как работает OCMOD: инструкция для разработчика

40923 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 консультант 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). Може хтось допомогти?
Ответ Администратора

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

Популярные модули Opencart

Популярные модификаторы OpenCart

Featured in the Press by
  • Forbes
  • PayPal
  • BBC
  • Business.com