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 клик».



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