Opencart OCMOD
Opencart

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

В последнее время всё чаще встречаются вопросы: что такое OCMOD? или как работает OCMOD? Попробуем разобраться, а заодно небольшая инструкция о том, как адаптировать модуль "Упрощенный заказ для Opencart 2" под Ваш шаблон.


OCMOD - принцип работы

OCMOD - это такой программный комплекс, который позволяет изменять (дополнять) интернет-магазин на OpenCart не изменяя и не перезаписывая исходные файлы интернет-магазина. Да! Изменять, не изменяя! 🙂 Если OCMOD дополнение создано правильно, то при его удалении просто восстанавливается предыдущее состояние интернет-магазина. Красота!!!

После установки, файл OCMOD-модификатора создает временный файл в папке system/storage/modification/ который и используется движком Opencart. Эти файлы обновляются каждый раз, когда Вы нажимаете кнопку "Обновить" в "Менеджере дополнений" административной части.

Обратите внимание: если Вы вносите изменения непосредственно в файлы, расположенные в папке system/storage/modification/ Вы потеряете все изменения сразу же после нажатия кнопки! Эти файлы можно использовать для проверки работоспособности вносимых изменений, но затем все изменения должны быть перенесены в OCMOD файл!


Установка OCMOD

OCMOD идёт в стандартной поставке OpenCart 2.x и его не требуется устанавливать! Ветка на github находится здесь.


Из чего состоит OCMOD модификатор

OCMOD модификатор может состоять из одного файла с расширением xml (как пример - local copy ocmod). В этом случае на сервер ничего кроме него не загружается, а только выполняются инструкции из этого файла. Есть обязательное правило для имени такого файла: расширение файла должно быть .ocmod.xml К примеру у модификатора local copy - это файл localcopy.ocmod.xml

Если помимо инструкций нам необходимо загрузить на сервер дополнительные файлы (допустим файлы модуля), тогда файл должен представлять из себя zip-архив с расширением .ocmod.zip (как пример - мой модуль "Упрощенный заказ для Opencart 2"). При этом структура архива тоже должна подчиняться определенным правилам:

  • папка upload, которая содержит все загружаемые на сервер файлы в соответствии со структурой папок OpenCart
  • файл install.xml, который содержит инструкции для модифицирования исходных файлов интернет-магазина.

Помимо этого, OCMOD модификатор может содержать необходимые SQL- и PHP-инструкции, но в этой статье мы их рассматривать не будем.


Ошибка в Установщике дополнений OCMOD - неверный тип файла

Один из способов установки zip-архива дополнения OCMOD - распаковать файл у себя на компьютере, залить через ftp или через панель хостинга содержимое папки uplod на сервер, а затем через установщик дополнений установить xml-файл. Однако, если Вы попытаетесь загрузить install.xml непосредственно в "Установщик дополнений OCMOD" - Вы получите ошибку "неверный тип файла". Как этого избежать? Легко - просто переименуйте файл в, например, buyoneclick.ocmod.xml то есть Вы должны устанавливать только файлы с расширением .ocmod.xml



Перейдём непосредственно к структуре OCMOD XML файла:

К обязательным элементам структуры OCMOD файла относятся:

  • заголовок <?xml version="1.0" encoding="utf-8"?>
  • <modification> </modification> - без параметров
  • <code> </code> - содержит уникальный код (можете придумать любой, состоящий из цифр и латинских букв)
  • <name> </name> - содержит имя модификатоора
  • <version> </version> - версия модификатора
  • <author> </author> - автор модификатора

Необязательные элементы:

  • <link> </link> - ссылка на сайт автора или ещё куда-либо.

Далее идёт код, который отвечает за модификацию файлов:

  • <file path="catalog/controller/common/header.php"> </file> - указывает путь к файлу, в котором необходимо сделать изменения. Если необходимо заменить / изменить одинаковый кусок кода можно использовать звёздочку (*), фигурные скобки и запятые:
    • <file path="catalog/view/theme/*/template/product/product.tpl"> </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 для тега <add> </add>.

Здесь остановимся подробнее применительно к модулю "Упрощенный заказ для Opencart 2". Часто мне задают вопрос: как адаптировать модуль под какую-либо тему. Вот здесь и кроется ответ на этот вопрос! <search> </search> осуществляет поиск вхождения какой-либо части кода. Вот часть кода из файла install.xml:

Данный код осуществляет поиск в файле catalog/view/theme/*/template/product/product.tpl части кода:

Это - код кнопки "в корзину" в файле карточки товара в стандартном шаблоне default.

В других шаблонах / темах этот код может отличаться и отличается в 99% случаев. К примеру, в шаблоне coloring код кнопки выглядит так:

Именно поэтому модуль не может найти необходимое вхождение кода и кнопка "Купить в 1 клик" не появляется в ожидаемом месте.

Обратите внимание: в стандартном шаблоне (default) код кнопки "в корзину" занимал 1 строку, а в теме coloring - 5 строк! Нельзя их просто заменить, необходимо будет указать требуемый отступ, о котором чуть ниже.


Необязательный атрибут тега <search> </search>: index, который необходимо использовать если код, который Вы ищете, не уникальный в данном файле. Допустим, в том же файле product.tpl стандартного шаблона код <div class="row"> встречается 3 раза. Мы можем найти первое вхождение этого кода указав <search index="0"> </search>. Обратите внимание: первое вхождение имеет index="0", а не index="1".


Необязательный атрибут для тега <search> </search>: regex, который позволяет искать часть кода по регулярному выражению.

Опять же возвращаясь к модулю  "Упрощенный заказ для Opencart 2" разберем вот такую часть кода:

В данном случае, осуществляется поиск части кода, который содержится между <div class="button-group"> и </div>. Используются стандартные операторы регулярных выражений. Таким образом, в стандартном шаблоне будет найдена вот эта часть кода в файле category.tpl:

Я рекомендую пользоваться вот этим тестером регулярных выражений http://uvsoftium.ru/php/regexp.php.



Тег <add> </add>:

Как раз в нём указывается код, который будет добавлен в исходный файл. При этом у него есть важный и обязательный атрибут position, который может принимать значения:

  • before - как видно из названия, добавляемый код будет вставлен до кода, найденного тегом <search> </search>
  • after - как видно из названия, добавляемый код будет вставлен после кода, найденного тегом <search> </search>
  • replace - как видно из названия, добавляемый код будет вставлен вместо кода, найденного тегом <search> </search>

Еще раз посмотрим на код:

Как видим: в данном случае код кнопки "купить в 1 клик" добавляется после (after) стандартной кнопки "в корзину".

Необязательный атрибут тега <add> </add>: offset, который позволяет сделать отступ от найденной части кода. Применительно к шаблону coloring, эта часть файла install.xml должна будет выглядеть следующим образом:

Говоря понятным языком: в файле темы coloring <file path="catalog/view/theme/coloring/template/product/product.tpl"> найти вхождение кода <?php if (($product_quantity <= 0) and $disable_cart_button){ ?> и, отступив 4 строки добавить код кнопки "купить в 1 клик".



Добавить комментарий