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


UPDATE! Для Opencart 3.x

В Opencart 3x добавился редактор шаблонов (Theme Editor), позволяющий редактировать их файлы прямо из администраторской части.

Проблема в том, что при его использовании совершенно не учитываются изменения в файлах, вносимые через OCMOD. То есть если какой-то OCMOD модификатор меняет этот же файл шаблона - на выходе этих изменений не будет, несмотря на фактическую отработку OCMOD и наличие измененного файла в его кеше.

Рекомендую использовать следующий патч - Fix Theme Editor - патч редактора тем в Opencart 3x



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

  1. Добрый день
    OpenCart Version 3.0.3.2 (trs-3.0.2.0)
    Тема Fanes
    В карточке товара кнопка быстрый заказ есть а больше нигде нет
    product.twig
    часть кода

    {{ entry_qty }}

    -

    +

    {{ button_cart }}

    {% if minimum > 1 %}
    {{ text_minimum }}
    {% endif %}
    {% if review_status %}

    {% for i in 1..5 %}

  2. Здравствуйте. Установил модуль, внес правки под свою тему - кнопка появилась в карточке товара, но она не активна - после нажатия ничего не происходит. Пример:
    https://dobro-stroy.dp.ua/ikopal-bitumnaya-cherepica-cambridge-xtreme-aged-redwood
    Версия Версия ocStore 2.3.0.2 ставил версию модуля 4.0.3
    В чем может быть проблема?

  3. Здравствуйте. Установил модуль, все по инструкции, кнопка появилась но письма не отправляются. Шаблон дефолтный версия 3, файл использовал версия модуля 4.0.4

    1. зайдите в модифицированные файлы, посмотрите в catalog/view/theme/*/template/common/header.twig
      там есть закрывающий head?

      Возможно какой-то иной модификатор его удалил

  4. Так а что здесь прописать

    {{ title }}
    {% if robots %}

    {% endif %}

    {% if description %}

    {% endif %}
    {% if keywords %}

    {% endif %}

    {% if og_image %}

    {% else %}

    {% endif %}

    {% for style in styles %}

    {% endfor %}
    {% for script in scripts %}

    {% endfor %}

    {% for link in links %}

    {% endfor %}
    {% for analytic in analytics %}
    {{ analytic }}
    {% endfor %}

  5. Полный листинг МОДИФИЦИРОВАННОГО catalog/view/theme/*/template/common/header.twig покажите.
    Модифицированные - которые в storage лежат.

  6. а как вам его показать?
    Ну там совсем другое прописано не как в главном хедере

  7. Здравствуйте!

    Кнопка быстрого заказа везде появляется. Кликабельна. Но, ничего не происходит после клика

    1. У вас какой-то из модификаторов изменил footer, в котором скрипт вызова окна должен быть. Попробуйте отключить модификаторы - всё должно заработать. Не забывайте обновлять.

  8. Добрый день!
    Такая же ситуация как и у Евгения
    Кнопка быстрого заказа везде появляется. Кликабельна. Но, ничего не происходит после клика.
    установлено немного модулей:

    Auto Fill URL
    Buy One Click for OpenCart 3.x
    Export/Import Tool (V3.22) for OpenCart 3.x
    Localcopy OCMOD Install Fix

    Подскажите пожалуйста какой может мешать работе ?

    1. Здравствуйте, Евгения!

      Странно что кнопка не кликабельна. Тема дефолтная?
      Если дефолтная - попробуйте установить Fix Theme Editor - https://opencartforum.com/files/file/5390-fix-theme-editor-patch-redaktora-tem-v-opencart-3x/

  9. Подскажите, как добавить в форму быстрого заказа пару полей и кнопку?
    Допустим это будет город и отделение службы доставки, которое я хочу подгружать аяксом по кнопке.
    В настройках поля сильно ограничены. Как наименее безболезненно влезть ручками?
    Спасибо

    1. Добрый день, Сергей!

      Вы хотите добавить город и отделение во всплывающую форму?

  10. Добрый день!
    Установила Fix Theme Editor, всё заработало!
    Большое спасибо за помощь!

  11. > Вы хотите добавить город и отделение во всплывающую форму?
    Добрый день, XDomus
    Да, Вы меня поняли правильно.
    Возможно ли добавить свои поля для этой цели? Есть ли решение?
    В форме быстрого заказа очень нужны эти поля.
    Спасибо

    1. Добрый вечер, Сергей!

      Ну, к сожалению не всё так просто.
      Как добавить, например, поле город. Город - это не просто поле, это некий select уже имеющихся городов, ведь при оформлении заказа стандартным способом нам не предоставляют пустое поле, в которое мы вписываем город, а дают сначала страну, потом регион и только потом город. При этом все эти поля - страна, регион, город - уже есть в базе данных и они зависимы друг для друга. К примеру нельзя выбрать страну Россия, а город Нью-Йорк. Следовательно чтобы выводить поле, а точнее select города в форме нам придётся предварительно подгружать их из нашей базы. Значит нам нужна будет функция в контроллере которая это делает и лишь потом выводит поле "город".
      С полем отделения связи всё ещё хуже... Если некие отделения связи внесены в модуль доставки, тогда нам надо будет получать их оттуда, а значит нам опять же понадобится контроллер обработчик.

      Конечно же всё решаемо, но это не тот вариант, который можно описать в комментариях...

  12. Здравствуйте, XDomus.
    Кнопку настроил пока для карточки товара.
    Всё установилось и работает на ОС3, однако, после клика по кнопке "Заказать" система генерирует два одинаковых по содержанию заказа с разными номерами.
    Подскажите, пожалуйста, в каком направлении копать?
    Спасибо.
    С уважением.

    1. Судя по всему у вас продублировался js код что и вызывает дважды создание заказа. Проверьте через инспектор кода.

  13. Доброго дня, XDomus.
    Точно - переборщил с копированием js при интеграции с шаблоном.
    Вопрос: а можно Ваш модуль привязать к кнопкам "Оформить заказ" в корзинах (+миникорзина в шапке)?
    Спасибо большое!

    1. Привязать сейчас нет... Поддерживается только 1 товар. В дальнейшем планирую сделать поддержку товаров из корзины.

    1. Где можно подписаться на рассылку по новым версиям Ваших разработок?

      Только здесь проверять...

  14. Здравствуйте, XDomus.
    А сколько денег будет стоить настройка Вашего модуля с привязкой к кнопкам "Оформить заказ" в корзинах (+миникорзина в шапке) для одного конкретного сайта?
    С уважением

    1. Настройка / адаптация стоят от 500 руб. Мало вводных данных, надо смотреть Ваш интернет-магазин.

  15. Добрый день, при нажатии кнопки Отправить, после ввода данных, пишет SENDING, ERROR, но заказ виден в панели, сообщение о заказе не появляется. Версия 4.0.4

    Как исправить? Спасибо

  16. Здравствуйте, установил ваш модуль Версия 4.0.3. Установлено Шаблон Modern Aridius.
    В карточке товара при нажатии "Отправить" в кнопке появляется надпись ERROR и Валидация номера телефона тоже не работает. Подскажите пожалуйста в чем может быть проблема?
    Спасибо.

    1. Прочитайте описание модуля - для шаблонов, отличных от дефолтного требуется адаптация.
      Как адаптировать - есть статья на сайте.
      Или платно могу я адаптировать.

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *