Создание vQmod файла
В этой статье я расскажу как создавать свои vQmod файлы. Что такое vQmod и для чего он нужен можно почитать тут.
Итак, предположим вам нужно внести какие-то изменения в ваш OpenCart. Учитывая то, что в OpenCart нету развитой системы hook-ов или Событий (События появились только с версии 2.0 и находятся в зачаточном состоянии) то у вас есть 2 варианта как внести эти изменения:
1. открыть нужный файл движка и вписать туда все что вам нужно. В других движках это считается просто мега неправильным и ламерским способом но в OpenCart из-за вышеописанных причин это считается почти нормой, так как иногда это вообще единственный способ внести эти изменения.
2. использовать для этого vQmod.
Для создания vQmod файла подойдет самый обычный текстовый редактор, лучше редактор с подсветкой кода. Создаем в нем файл с расширением *.xml, например my_first_fix.xml. Привожу листинг такого файла с комментариями:
<?xml version="1.0" encoding="UTF-8"?> <!-- так можно оставлять комментарии --> <modification> <!-- название модификации --> <id>My first fix</id> <!-- версия этой модификации--> <version>1.0.0</version> <!-- версия vqmod на которой эта модификация должна работать --> <vqmver>2.3.0</vqmver> <!-- автор этой модификации --> <author><a href="mailto:sv2109@gmail.com">sv2109@gmail.com</a></author> <comment><![CDATA[ Тут какой-то комментарий - что именно делает этот файл ]]></comment> <!-- файл в котором нам нужно что-то изменить, таких файлових секций может быть много в этом xml файле --> <file name="admin/model/catalog/product.php"> <!-- операция изменения. Для каждого ихменения своя операция. Таких секций может быть много для этого файла --> <operation> <!-- Где в файле нужно внести изменения. Тут указывается позиция, в данном случае "after" и код, он указывается между <![CDATA[...]]> Это означает что после (after) этого кода нужно что-то добавить. Если добавить нужно перед то в позицию нужно писать "before", а если нужно заменить этот кусок кода то "replace" Важно! Код должен точно соответсвовать коду в этом файле. Один лишний пробел и vQmod ничего не найдет. --> <search position="after"><![CDATA[$product_id = $this->db->getLastId();]]></search> <!-- Тут мы пишем наш код который нужно вставить после, перед или заменить существующий --> <add><![CDATA[ $this->load->model('module/my_module'); $this->model_module_my_module->action($product_id); ]]></add> </operation> </file> </modification>
Вот и все. Это вкратце.
Кроме обычных позиций "before", "after", "replace" можно еще использовать регулярные выражения, а также вставлять (или заменять) код с использованием смещения на определенное к-во строк. Также вместо точного имени файла можно использовать символ "*", например "admin/model/catalog/*.php" это значит изменить все файлы с расширением "php" в папке "admin/model/catalog/".