VirtualQMod, или "vQmod" - это нововведение в сфере разработки модулей на PHP. Это как универсальные хуки для любого проекта.

Принцип vQmod заключается в внесении изменений в файл на лету во время вызова include(), include_once(), require(), require_once(). Все изменения вносятся во временный файл, а уже он подключается вместо реального файла.

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

Установка

И так, приступим. Установка vQmod на OpenCart может быть ручная и автоматическая. Начнем с автоматической.
1) Скачиваем vQmod с оф. сайта
2) Распаковываем архив и копируем папку vqmod в корень нашего магазина.
3) Даем права(777) на запись в папки:
/vqmod
/vqmod/vqcache
4) Иногда бывает нужно установить права на запись для /index.php и /admin/index.php
5) Переходим по url http://site.zona/vqmod/install
6) Вы должны увидеть сообщение о успешной установке. На этом автоматическая установка закончена.
Папку install удалять не нужно, она не опасна. Установку vQmod нужно будет перезапускать всякий раз после апгрейда OpenCart

скачать vqmod-2.4.1-opencart

Другие версии vqmod
http://code.google.com/p/vqmod/downloads/list

Все версии Opencart и OcStore
http://sourceforge.net/projects/ocstore/files/

Использование

vQmod скрипты базируются на системе .xml файлаов, которая изначально построена на SMF(система управления сервисами) методах модификации. Это простая концепция, которая доступна в использовании. Однако, помните, что в отличие от SMF, vQmod - это штука виртуальная и незатрагивает реальных файлов.

Помещаете скачанные файлы .xml в дирректории /vqmod/xml/ на сайте.

Все! если никаких изменений не произошло, возможно файл .xml предназначен для другой версии OpenCart, просто удалите его.

Посмотрим, какие теги файла .xml, что означают:

<modification> - самый главный родитель, он может быть только один во всем файле
<id> - это название и идентификатор модуля. Это любой текст.
<version> - версия модификации в формате "1.0.0"
<vqmver> - это минимальная версия vQmo в формате "1.0.0"
<author> - имя автора
<file> - имя изменяемого файла. Задается от корня сайта, где лежит index.php (например catalog/controller/product/product.php). Этот тег можо несколько раз использовать во всем .xml файле
<operation> - это обертка над конкретной операцией с файлом, определенном в теге file. Аттрибут "errors" может иметь два значения "skip"(пропустить ошибку и продолжить работу модуля) и "abort"(откатить все изменения)
<search> - первый шаг выполнения модификации. Найти можно только одну строку. Автоматически обрезаются пробелы и разрывы строк. Этот тег может быть только один по отношению к тегу <operation>. Рекомендуется использовать CDATA для оборачивания кода. Обязательный атрибут - "position", может принимать значения before, after, replace, top, bottom и all.

    * replace - заменит весь код указанный в <search> на код указанные в теге <add>. Используется по умолчанию.
    * before - вставит данные из <add> перед данными из <search>
    * after - вставит данные из <add> после данными из <search>
    * top - вставит данные из <add> в самом начале файла. Данные из <search> будут проигнорированны.
    * bottom - вставит данные из <add> в конце файла. Данные из <search> будут проигнорированны.
    * all - заменит все данные в файле данными из <add>. Данные из <search> будут проигнорированны.

Необязательный атрибут - "offset", используется для работы с позицией вставки кода.

    * Если в "position" установлено "before" и "offset" установлено 3, тогда данные из <add> будут вставлены на 3 строки до искомых данных
    * Если в "position" установлено "after" и "offset" установлено 3, тогда данные из <add> будут вставлены на 3 строки после искомых данных
    * Если в "position" установлено "replace" и "offset" установлено 3, тогда будут искомые данные будут заменены на данные из <add>
    * Если в "position" установлено "top" и "offset" установлено 3, тогда данные вставятся после 3 строк от начала файла
    * Если в "position" установлено "bottom" и "offset" установлено 3, тогда данные вставятся после 3 строк с конца файла

Необязательный атрибут - "index", для указания, какие найденные экземпляры кода из тегов <search> должны быть учтены. Если мы ищем "echo" и найдено 5 "echo", но нам нужны только первое и третье, тогда мы можем использовать index="1,3". Запятая для определения нескольки елементов. Для работы со всеми найденными елементами нужно использовать index="false".
Необязательный атрибут - "regex". Устанавливается в true, если поеск выполнятся с помощью регулярного выражени. Чтобы выполнять обычный поиск установите параметр в false(стоит по умолчанию)
Необязательный атрибут - "trim". Если нужно искать без обрезания пробелов - устанавливаем в false. По умолчанию пробелы обрезаются и параметр установлен в true. <add> - Это второй этам нашей работы с файлом. Может состоять из нескольких линий. Обязательно только один на одну операцию с файлом. Нужно оборачивать код в CDATA.
Необязательный атрибут - "trim". Используется также, как и при поиске, но по умолчанию установлен false(пробелы не обрезаются)
<![CDATA[ ]]> - это CDATA xml теги. Означает, что данные в них не нужно обрабатывать как xml

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