Изменение ядра OpenCart с помощью модуля vQmod

29 Мая 2022г. в 05:07

vQmod – популярное расширение, с помощью которого можно вносить изменения, не редактируя напрямую файлы ядра. Цитата с официального сайта vQmod:

«vQmod (или Virtual Quick Mod) система перезаписи, спроектированная таким образом, чтобы не редактировать файлы ядра. Концепция очень простая… вместо изменения файлов ядра изменения создаются в виде xml файлов-скриптов, которые находят необходимые участки и заменяют их. Эти скрипты парсятся во время загрузки страницы, пока исходный файл ядра загружается с помощью php функций include или require. Во время выполнения временный файл заменяется на оригинал. Исходный файл никогда не меняется. Таким образом, происходит виртуальное изменение ядра во время выполнения без реальной модификации файлов ядра.»

Крайне полезное расширение. Оно делает процесс обновления OpenCart плавным, даже если вы изменили файлы ядра.

Принцип работы vQmod
Прежде чем мы узнаем, как использовать vQmod вместе с OpenCart, давайте поймем принцип работы этого расширения. vQmod делает все через XML файлы. Вам необходимо создать XML файлы заданным способом, а дальше vQmod возьмет весь функционал на себя. Давайте узнаем, как должны выглядеть XML файлы. Это простая демонстрация, чтобы вы поняли, как можно заменять определенные куски кода в файле.

<?xml version="1.0" encoding="UTF-8"?>
<modification>
<id>Example of the vQmod</id>
<version>1.0</version>
<vqmver>2.X</vqmver>
<author>Tuts+</author>
<file name="targetfile.php">
<operation info="Example of the vQmod">
<search position="replace"><![CDATA[
I am original content.
]]></search>
<add><![CDATA[
I am replaced content!!
]]></add>
</operation>
</file>
</modification>

<?xml version="1.0" encoding="UTF-8"?>
<modification>
<id>Example of the vQmod</id>
<version>1.0</version>
<vqmver>2.X</vqmver>
<author>Tuts+</author>
<file name="targetfile.php">
<operation info="Example of the vQmod">
<search position="replace"><![CDATA[
I am original content.
]]></search>
<add><![CDATA[
I am replaced content!!
]]></add>
</operation>
</file>
</modification>
Как видите, файл начинается со стандартного тега <?xml>. Далее идет <modification> и другие теги (<id>, <version> и <author>). Не редактируйте <vqmver>, здесь указана версия vQmod.

Интересное начинается с тега <file>. Атрибут name указывает на имя файла, в котором будет произведена замена. Возможно, вам нужно будет изменить один файл в нескольких местах. Здесь нам поможет <operation>. Атрибут info позволяет добавить сообщение.

В этом примере тег <search> используется для операции replace. С помощью атрибута position в расширение vQmod можно передать выполняемую операцию. Контент внутри <search> будет заменен контентом из тега <add>.

Вы могли заменить, что контент поиска и замены окружен в тег CDATA. То есть этот контент не будет восприниматься как разметка, это символьные данные. Давайте рассмотрим другие опции атрибута position:

before – вставляет контент перед поисковой строкой

after – вставляет контент после поисковой строки

top – вставляет данные в верхнюю часть файла. В нашем случае тег search не нужен. Даже если он будет, он будет проигнорирован

bottom – вставляет данные в конец файла. нашем случае тег search не нужен. Даже если он будет, он будет проигнорирован

ibefore – данные вставляются прямо перед поисковыми данными на этой же строке

iafter – данные вставляются сразу после поисковых данных на этой же строке

Тег search принимает необязательные атрибуты. Давайте быстро по ним пробежимся.

offset – атрибут для работы вместе с position. Например, если position задан в before, а offset в 3, тогда контент будет вставлен перед тремя строками поисковых данных

index – иногда нужно заменить лишь пару вхождений определенной строки, а не все ее появления в поисковых данных. Например, есть 5 вхождений переменной $abc в поисковых данных, но вам нужно заменить лишь первые 2 на $def. Для этого вам необходимо задать index 1,2

regex – атрибут для выполнения поиска операций на основе регулярного выражения. Для этого необходимо задать regex TRUE

Мы быстро пробежались по основным настройкам vQmod.

OpenCart и vQmod
Давайте установим расширение vQmod в OpenCart, а также посмотрим, как с помощью vQmod изменить ядро OpenCart.

Установка
Загрузите и извлеките OpenCart библиотеку vQmod

Загрузите папку vqmod в корневую папку установки OpenCart

Проверьте, чтобы у папки vqcache, которая расположена внутри vqmod, были права на запись с сервера

Откройте //www.myopencartsite.com/vqmod/install, должно отобразиться сообщение об успешности. Если его нет, скорее всего, проблемы с доступом

Теперь вы готовы использовать расширение vQmod или создать свое.

Использование
Теперь вы вооружены, давайте разберем пример на практике. Создайте XML файл vqmod_homepage.xml в папке vqmod/xml. Вставьте следующий код в созданный файл.

<?xml version="1.0" encoding="UTF-8"?>
<modification>
<id>Replace the css property in heading title in Home page</id>
<version>1.0</version>
<vqmver>2.X</vqmver>
<author>Tuts+</author>
<file name="catalog/view/theme/default/template/common/home.tpl">
<operation info="Replace the css property in heading title in Home page">
<search position="replace"><![CDATA[
<h1 style="display: none;">
]]></search>
<add><![CDATA[
<h1>
]]></add>
</operation>
</file>
</modification>

<?xml version="1.0" encoding="UTF-8"?>
<modification>
<id>Replace the css property in heading title in Home page</id>
<version>1.0</version>
<vqmver>2.X</vqmver>
<author>Tuts+</author>
<file name="catalog/view/theme/default/template/common/home.tpl">
<operation info="Replace the css property in heading title in Home page">
<search position="replace"><![CDATA[
<h1 style="display: none;">
]]></search>
<add><![CDATA[
<h1>
]]></add>
</operation>
</file>
</modification>
Откройте домашнюю страницу, должен отобразиться заголовок h1. По умолчанию там написано Your Store. Все файлы в папке vqmod/xml автоматически обнаруживаются, и к ним применяются изменения. Кэшированные версии файлов лежат в vqmod/vqcache.

Если открыть vqmod_homepage.xml, можно увидеть, что все очень просто. Мы применяем операцию replace к файлу home.tpl. Важно отметить, что путь к файлу берется относительно папки vqmod.

Вишенка на торте
На данном этапе вы уже должны уметь изменять ядро OpenCart с помощью XML файлов в vQmod. Подобным образом вы можете создать свои модули OpenCart на основе vQmod.

Скачайте парочку расширений на основе vQmod с сайта OpenCart, чтобы изучить их. На vQmod основано более 2 500 расширений.

Помимо этого, если вам лень создавать vQmod XML файл, в OpenCart есть расширение vQmod Generator, Editor and Log Viewer, в котором можно это делать через панель администратора.