Создание модуля для OpenCart 2 (OCMOD). Modification opencart


Как создать модуль для Опенкарт. Модификаторы OCMOD Часть 1

Как создать модуль для Опенкарт

От автора: приветствую вас, друзья. Итак, мы продолжаем цикл статей, посвященных знакомству с одной из популярнейших CMS для создания интернет-магазинов – OpenCart (Оперкарт). В этой статье мы поговорим о том, как вывести артикул в OpenCart.

В одной из предыдущих статей мы с вами решили задачу вывода артикула в карточку товара. При этом все изменения в коде мы делали непосредственно в файлах Опенкарт, что является не совсем правильным путем. Изменять исходные файлы движка – контроллеры, модели, шаблоны дефолтной темы – не рекомендуется. Чтобы изменить существующий функционал или добавить новый – рекомендуют использовать модификаторы OCMOD.

Модификаторы OCMOD не изменяют исходные файлы движка, а делают их копии и все нужные изменения вносятся в копии файлов, оставляя при этом исходные файлы в исходном состоянии. Модификатор может быть представлен либо в виде единственного файл XML, либо в виде архива. В этой статье мы с вами создадим модификатор в виде одного файла.

Название файла модуля должно иметь следующий вид: name.ocmod.xml. Вместо name вы пишете какое-либо наименование модуля, ну а ocmod.xml – это обязательная часть. В файле XML корневым тегом является тег modification. В него помещается шапка и все операции с файлами. В качестве шапки мы можем указать следующее:

Интернет-магазин на OpenCart!

Создайте интернет-магазин на самой популярной CMS – OpenCart с нуля!

Приступить к созданию

<?xml version="1.0" encoding="utf-8"?> <modification> <name>Вывод артикула</name> sku_wfm <version>1.0</version> <author>Andrey</author> <link>https://webformyself.com </link> </modification>

<?xml version="1.0" encoding="utf-8"?>

<modification>

    <name>Вывод артикула</name>

sku_wfm

    <version>1.0</version>

    <author>Andrey</author>

    <link>https://webformyself.com </link>

</modification>

Полагаю, здесь все должно быть понятно. В тегах name, code, version, author и link указывается служебная информация: название, идентификатор, версия, автор и сайт автора модуля.

После шапки мы можем записывать операции с файлами. Для этого используется тег file. В значении атрибута path этого тега мы указываем путь к файлу, который хотим модифицировать. Например, в статье по работе с артикулом мы изменяли файл контроллера товара — catalog/controller/product/product.php. Если то же самое мы хотим сделать модификатором, тогда нужно записать следующее:

<file path="catalog/controller/product/product.php"> </file>

<file path="catalog/controller/product/product.php">

 

</file>

Двигаемся дальше. В тегах file мы можем использовать тег operation, внутри которого указываем саму операцию над искомым файлом. Ну а внутри тега operation мы уже описываем эту операцию с помощью тегов search и add. Первый тег позволяет найти нужный участок кода в файле, ну а второй тег позволяет добавить наш код.

Оба тега имеют ряд атрибутов. Например, тег search имеет полезный атрибут index, значение которого мы можем указать номер позиции найденной строки. Это может быть полезно, если в файле есть, к примеру, 3 одинаковые строки кода, а нам нужна именно вторая. В этом случае в качестве значения index указывается index=”1”. Нумерация позиций найденного начинается с нуля, поэтому вторая позиция будет иметь индекс с номером 1.

Тег add позволяет использовать такой полезный атрибут, как position с возможными значениями replace (заменить найденный код), before (добавить перед найденным кодом) и after (вставить после найденного кода). В рамках статьи я не описываю все доступные атрибуты и возможности модификаторов. Я описываю лишь те, которые пригодятся нам для решения поставленной задачи – вывести артикул в карточку товара. Если вы хотите познакомиться со всеми атрибутами и возможностями, тогда на нашем канале YouTube можно найти ряд уроков по теме.

Ну что же, давайте попробуем что-нибудь сделать, пока в качестве теста. Например, в самом начале класса контроллера добавим PHP комментарий. Итоговый код модификатора в этом случае будет таким:

<?xml version="1.0" encoding="utf-8"?> <modification> <name>Вывод артикула</name> sku_wfm <version>1.0</version> <author>Andrey</author> <link>https://webformyself.com </link> <file path="catalog/controller/product/product.php"> <operation> <search> <![CDATA[class ControllerProductProduct extends Controller {]]> </search> <add position="after"> <![CDATA[//comment from module]]> </add> </operation> </file> </modification>

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

<?xml version="1.0" encoding="utf-8"?>

<modification>

    <name>Вывод артикула</name>

sku_wfm

    <version>1.0</version>

    <author>Andrey</author>

    <link>https://webformyself.com </link>

    <file path="catalog/controller/product/product.php">

        <operation>

            <search>

                <![CDATA[class ControllerProductProduct extends Controller {]]>

            </search>

            <add position="after">

                <![CDATA[//comment from module]]>

            </add>

        </operation>

    </file>

</modification>

В теге search мы ищем строку class ControllerProductProduct extends Controller {, ну а в теге add мы указываем, что в позицию после найденной строки следует добавить комментарий. Попробуем установить модификатор. Для этого идем в меню Дополнения – Установка Дополнений и загружаем созданный файл XML. Если мы нигде не ошиблись, то должны увидеть следующую картину:

После установки модификатора обязательно необходимо обновить кэш модулей. Для этого переходим в меню Дополнения – Менеджер дополнений и в правом верхнем углу жмем кнопку Обновить. На этой же странице мы должны увидеть наш модуль в списке установленных дополнений.

Оригинальный файл контроллера при этом никак не изменился. Но по пути /system/storage/modification/catalog/controller/product/product.php должна быть копия файла с комментарием кода, который был добавлен модулем.

Ну что же, теперь вы имеете общее представление о том, как создаются дополнения для Опенкарт. В следующей статье мы продолжим тему и создадим полноценный модификатор OCMOD, который будет выводить артикул в карточку товара. Больше об OpenCart вы можете узнать из наших бесплатных или платных уроков.

Интернет-магазин на OpenCart!

Создайте интернет-магазин на самой популярной CMS – OpenCart с нуля!

Приступить к созданию

Интернет-магазин на OpenCart

Создание магазина с уникальным шаблоном на CMS OpenCart

Научиться

webformyself.com

Модификации OCMOD в OpenCart 2.0

В предыдущих статьях я уже писал об отличиях между OpenCart 1.5.6 и OpenCart 2.0, а также о том как перенести модуль с Opencart 1.5.6 на OpenCart 2.0. В этой статье речь пойдет об отличиях между vQmod и OCMOD.  

 

Где что используется?

vQmod используется на OpenCart 1.5.х и является сторонней программой, которую перед использованием нужно скачать с репозитория разработчика и установить. 

OCMOD используется в OpenCart 2.0, он уже встроен в ядро, устанавливать его не нужно.

 

Установка модификаций

В OpenCart 2.0, модификации OCMOD устанавливается через админку, меню Установка расширений. На этой странице есть возможность загрузить как отдельный xml файл OCMOD так и архив с несколькими файлами: OCMOD, установка таблиц в базе данных, php код установки. 

После загрузки информация о новой модификации пишется в базу данных в таблицу modification.

И новая модификация доступна в меню Модификации

 

Страница модификаций

Опишу принцип работы с этой страницей, так как многие действия там не очевидны:

 

Критика такого подхода

 

Плюсы такого подхода

 

Режим для разработчиков

В OpenCart 2.0.1.1. для упрощения этого немного неудобного подхода добавлен режим для разработчиков. В этом режиме не нужно каждый раз загружать файл OCMOD, достаточно его записать в папку /system и назвать *.ocmod.xml и система после обновления кеша внесет изменения из этого файла в кеш. Правда, такой файл не появится на странице Модификаций.  

 

Файловая структура

 

Отличия файлов vQmod и OCMOD

Атрибуты:

Все атрибуты не обязательны, но крайне желательны так как они отображаются на странице модификаций. Модификацию без названия система устанавливает но на странице модификаций она отображается пустой строкой, то есть это ошибка, так быть не должно, возможно в следующих версиях появится проверка. 

 

Другие отличия

1. Позиция указывается не в элементе search

<search position="replace">

а в элементе add

<add position="replace">

 

2. Название файла указывается не через свойство name

<file name="catalog/controller/product/search.php">

а через path

<file path="catalog/controller/product/search.php">

 

sv2109.com

Создание модуля для OpenCart 2 (OCMOD)

Привет всем! Недавно перешел с одной сборки Opencart на другую, с сожалением осознав, что все мои правки на прошлой сборки канули в лету. Решил разобраться с тем, как работают модули в OpenCart 2. Мне понадобился функционал простейших модулей на xml, которые бы просто добавляли или удаляли какой-либо код в исходные файлы. В этом посте я опишу создание простого модуля, который фиксит проблему циклической ссылки с главной страницы, которая ведет, соответственно, на главную (это может негативно сказаться на SEO).Для начала теория.

Структура XML модуля выглядит так:

<?xml version="1.0" encoding="utf-8"?><modification><name>Homepage link fix</name><code>mymodule</code><version>1.0</version><author>Awakum for OpenCart Pro CMS</author><link>//www.opencart.pro</link><file path="catalog/view/theme/default/template/common/header.tpl"><operation><search trim="true"><![CDATA[<div>]]></search><add position="replace"><![CDATA[sqooqa.ru]]></add></operation></file></modification>

Тэги Name, Code, Version, Author и Link исключительно информативные, поэтому не вижу смысла расписывать их подробно. Только меняйте Name и Code в каждом новом модуле, иначе OCMOD будет ругаться.

Далее следует тэг File, в котором указывается путь к файлу, который нам необходимо изменить. При указании пути действуют маски. Например, если указать «catalog/view/theme/default/template/{common,information}/header.tpl», то система будет пытаться найти файл header.tpl и в папке common, и в information.Маска «catalog/view/theme/default/template/common/*.tpl» укажет системе искать все файлы с расширением .tpl в указанной папке.А если указать заменить звездочкой папку «catalog/view/theme/default/template/*/header.tpl», то система будет искать файл header.tpl во всех вложенных в папку template подпапках.

В тэге Operation находятся все данные о манипуляциях с файлом. Он может иметь один атрибут error. Если мы напишем его в открывающем тэге, то любые возникшие в ходе работы модуля ошибки будут игнорироваться, система пропустит неверный код и продолжит выполнять указанные операции.

Тэг Search даст системе команду найти необходимую строку в файле. В нашем примере мы велим модулю найти строку<div>в файле header.tpl.Данный тэг может иметь некоторые атрибуты:Атрибут trim="(true|false)" — удалять лишние пробелы в указанном тексте или нет. Не обязателен.regex="(true|false)" — позволяет использовать регулярные выражения при поиске.index="(номер)" — указывает какое именно вхождение будет редактироваться. Например, если в исходном файле строка<div>встречается дважды, то данным атрибутом мы должны указать с каким именно вхождением нужно работать. Внимание: Если вхождение искомой строки в файле только одно, не указывайте значение index="1" — в логе будет выдаваться ошибка, что код не найден.

Следующий тэг: Add. В нем указывается что необходимо сделать после того как искомая строка будет найдена. Он тоже имеет атрибуты:Не обязательный и уже названный trim="(true|false)". Функционал см. выше.position="(Replace|After|Before)" — указывает нужно ли заменить найденный текст (Replace), вставить что-либо после него (After) или перед ним (Before).offset="(число)" — сообщает системе сколько строк нужно отступить (или на сколько подняться наверх) после того как искомая в Search строка будет найдена. Может принимать отрицательное значение.Если мы укажем, например , то указанный в тэге текст будет вставлен на три строки выше искомой строки. А вот интересный момент: сообщив OCMOD , мы тем самым заменим искомую строку и еще три строки ниже. Это нам понадобится в сегодняшнем примере.

Стоит добавить, что искомый и сравниваемый текст ставится между открывающим <![CDATA[ и закрывающим кодом ]].

А теперь перейдем к практике. Приступим к созданию модуля!Напомню, что я взялся пофиксить циклическую ссылку главной страницы, которая ссылается сама на себя, с помощью модуля OCMOD для Opencart.Чтобы исправить этот баг, необходимо написать модуль, который в файле catalog/view/theme/default/template/common/header.tplнайдет код:<div><?php if ($logo) { ?><a href="<?php echo $home; ?>"><img src="<?php echo $logo; ?>" title="<?php echo $name; ?>" alt="<?php echo $name; ?>" /></a><?php } else { ?><h2><a href="<?php echo $home; ?>"><?php echo $name; ?></a></h2><?php } ?></div>

И исправит его на это:<div><?php if ($logo) { ?><?php if ($class == "common-home") { ?><img src="<?php echo $logo; ?>" title="<?php echo $name; ?>" alt="<?php echo $name; ?>" /><?php } else { ?><a href="<?php echo $home; ?>"><img src="<?php echo $logo; ?>" title="<?php echo $name; ?>" alt="<?php echo $name; ?>" /></a><?php } ?><?php } else { ?><h2><a href="<?php echo $home; ?>"><?php echo $name; ?></a></h2><?php } ?></div>

Пишем модуль:<?xml version="1.0" encoding="utf-8"?><modification><name>Homepage link fix</name><code>mymodule</code><version>1.0</version><author>Sqooqa.ru for OpenCart Pro CMS</author><link>//www.opencart.pro</link><file path="catalog/view/theme/default/template/common/header.tpl"><operation><search trim="true"><![CDATA[<div>]]></search><add position="replace" trim="true" offset="6"><![CDATA[<div><?php if ($logo) { ?><?php if ($class == "common-home") { ?><img src="<?php echo $logo; ?>" title="<?php echo $name; ?>" alt="<?php echo $name; ?>" /><?php } else { ?><a href="<?php echo $home; ?>"><img src="<?php echo $logo; ?>" title="<?php echo $name; ?>" alt="<?php echo $name; ?>" /></a><?php } ?><?php } else { ?><h2><a href="<?php echo $home; ?>"><?php echo $name; ?></a></h2><?php } ?></div>]]></add></operation></file></modification>Принцип работы. Высота искомого кода 7 строк. Модуль находит строку<div>, и заменяет её и 6 строчек ниже правильным кодом. Всё! Теперь сохраняем файл, назвав его (произвольное_имя).ocmod.xls. Имя лучше писать на латинице. Далее заходим в админку Opencart -> Модули -> Установка модулей, указываем на только что созданный файл, нажимаем на кнопку обновления сверху.

На всякий случай открываем лог в соседней вкладке, там должен быть указан искомый текст и соответствующий ему номер строки в файле.

Модуль нашел код и отдал номер строкиМодуль нашел код и отдал номер строки

Для корректировки кода, вы можете посмотреть как изменился файл под воздействием модуля. Наш файл будет находиться тут: system/storage/modification/catalog/view/theme/default/template/common/header.tpl. Как вы уже наверняка поняли, весь изначальный путь расположения файла повторяется после system/storage/modification/, поэтому если вы будете подключать модули к другим файлам, ищите их в другом расположении.

Важное замечание! Нельзя внести изменения в .css и .js файлы посредством OCMOD. А жаль.

Вот и всё что я хотел донести. Если у вас возникли проблемы, пишите в комментариях. Всем Успехов! 🙂

sqooqa.ru


Prostoy-Site | Все права защищены © 2018 | Карта сайта