發佈於

Opencart代碼替換系統VQMOD寫法

VQMOD 後來演變 成官方自己寫了個 簡化版的VQMOD 叫OCMOD-使用資料庫來管理,但有看不到修改後源碼的缺點所以反正
2.3.0.2版也能裝VQMOD 我就裝了
VQMOD 安裝
http://o03.test.com/vqmod/install                      WIN下]安裝不了

https://github.com/vqmod/vqmod                     2.62
在vqmod官網下(鏈接:https://github.com/vqmod/vqmod/releases)載了一個自動安裝的vqmod才搞定這個問題:

安裝方法就是:

將vqmod目錄上傳到opencart根目錄,然後在瀏覽器上輸入:xxxxx/vqmod/install

然後瀏覽器上會顯示:VQMOD HAS BEEN INSTALLED ON YOUR SYSTEM!

你第二次或者第三次安裝:xxxxx/vqmod/install,

就會出現:VQMOD ALREADY INSTALLED!

然後,把剛才那兩個xml文件拷貝到vqmod/xml目錄下。

接下來我想要的效果就出來了:
VQMOD 會改變 原版幾個檔案 1個 index.php 多了6行而已
D:\wamp\www\o03\index.php
D:\wamp\www\o03\admin\index.php

<?php
// Version
define(‘VERSION’, ‘2.3.0.2’);
// Configuration
if (is_file(‘config.php’)) {
    require_once(‘config.php’);
}
// Install
if (!defined(‘DIR_APPLICATION’)) {
    header(‘Location: ../install/index.php’);
    exit;
}
// Startup
require_once(DIR_SYSTEM . ‘startup.php’);
start(‘admin’);

<?php
// Version
define(‘VERSION’, ‘2.3.0.2’);
// Configuration
if (is_file(‘config.php’)) {
    require_once(‘config.php’);
}
// Install
if (!defined(‘DIR_APPLICATION’)) {
    header(‘Location: ../install/index.php’);
    exit;
}
//VirtualQMOD
require_once(‘../vqmod/vqmod.php’);
VQMod::bootup();
// VQMODDED Startup
require_once(VQMod::modCheck(DIR_SYSTEM . ‘startup.php’));
前台是start(‘catalog’);     後台是     start(‘admin’);

會多出目錄
vqmod/xml           放VQMOD插件的XML檔
vqmod/logs vqmod日誌目錄
vqmod/vqcache vqmod緩存目錄 自己產生改變後的檔案
vqmod/checked.cache vqmod用於保存已緩存的文件名
vqmod/mods.cache vqmod用於保存緩存文件的序列化源碼

VQMOD 寫法

<?xml version=”1.0″ encoding=”UTF-8″?>
<modification>
    <id>VQMOD CORE FOR OPENCART – DO NOT REMOVE</id>
    <version>1.4.x and above</version>
    <vqmver required=”true”>2.6.0</vqmver>
    <author>vqmod.com</author>
    <file name=”system/startup.php,system/engine/*.php,system/library/*.php,admin/controller/extension/*.php,system/library/template/*.php,catalog/controller/event/theme.php,system/library/template/Twig/*.php” error=”skip”>
        <operation error=”skip” info=”For non OCMod includes/requires”>
            <search position=”replace” regex=”true”><![CDATA[~^(\s*)(require|include)(_once)?(\s+|\()(?!VQMod::modCheck\()(?!modification\()([^);]+)~]]></search>
            <add><![CDATA[$1$2$3$4\\VQMod::modCheck($5)]]></add>
        </operation>
        <operation error=”skip” info=”For OCMod includes/requires – OPERATION MUST BE AFTER NON OCMOD INCLUDES/REQUIRES OPERATION”>
            <search position=”replace” regex=”true”><![CDATA[~(require|include)(_once)?\((?!VQMod::modCheck\()modification\(([^)]+)~]]></search>
            <add><![CDATA[$1$2(\\VQMod::modCheck(modification($3), $3]]></add>
        </operation>
    </file>
    <file name=”system/library/template/Twig/*.php” error=”skip”>
        <operation error=”skip” info=”Add Twig support”>
            <search position=”replace”><![CDATA[dirname(__FILE__).’/../’]]></search>
            <add><![CDATA[DIR_SYSTEM . ‘library/template/’]]></add>
        </operation>
    </file>
    <file name=”system/library/template/Twig/Loader/*.php” error=”skip”>
        <operation error=”skip” info=”Add Twig support”>
            <search position=”replace”><![CDATA[= $realpath;]]></search>
            <add><![CDATA[= VQMod::modCheck($realpath);]]></add>
        </operation>
    </file>
</modification>

vQMOD 參數

        replace 為在搜尋標籤中的資料取代為add標籤上的資料。(預設)
before 為在搜尋標籤中的資料之前插入add標籤上的資料。
after 為在搜尋標籤中的資料之後插入add標籤上的資料。
top 為在文件頂部插入add標籤上的資料。搜尋資料會被忽略。
bottom 為在文件底部插入add標籤上的資料。搜尋資料會被忽略。
all 將完全以add標籤上的資料取代所有資料。搜尋資料會被忽略。
可選offset屬性為要工作的位置
若搜尋位置為before 及 offset 3,其會放置add標籤上的資料在搜尋前3行
若搜尋位置為after 及 offset 3,其會放置add標籤上的資料在搜尋後3行
若搜尋位置為replace 及 offset 3,其會從搜尋行中移除碼及下一個3行以add標籤上的資料取代
若搜尋位置為top 及 offset 3,其會在文件的最前3行下面放置add標籤上的資料
若搜尋位置為bottom 及 offset 3,其會在文件的最後3行前面放置add標籤上的資料
可選index屬性為搜尋標籤的例項將要指定動作標示
若搜尋字串為”echo”,在文件中有5個echo值,而只想取代第1和第3的值,可使用index=”1,3″來標示
多個實例是逗號來分隔,啟始值為”1″
遺漏或設置為false則取代所有例項。(預設)
可選regex屬性用於指定是否要以正規表示法模式來搜尋。
若為 true,則是以有效的正規表示法模式來搜尋
遺漏或設置為false則是使用正常字串來搜尋(預設)
可選trim屬性設置為 true|false
true將修剪遠離空白和換行。
        遺漏或設置為true,則代表要修剪。(預設為 true)

<search position=”replace” regex=”true”> 為在搜尋標籤中的資料取代 且用正規表示法模式來搜尋
<search position=”after”>                 /*after: 在尋找到的字符串後面增加;before:在尋找到的字符串前面增加;replace:替換尋找到的字符串*/
<search position=”after” offset=”6″> /*在尋找到的字符串後面增加
補充:
如要在一個文件中的某句前加入一段代碼,但該文件中搜索到多處有這句,可以使用index=「5」這樣的方式來指定要在第五處的前面加入。
比如:              <search position=”before” index=”2,4,6″><![CDATA[xxxxxxxxxxxx]]></search>即在文件中搜索xxxxxxxxxxxx,在搜索到的第2,4,6處改行前面加入。

#錯誤示範<search position=”after”><add offset=”6″>
#正確示範<search position=”after” offset=”6″><add>

<?xml version=”1.0″ encoding=”UTF-8″?>
<modification>
    <id>backgroundcorrection</id>
    <version>v1.0適用OPENCART2.3.X</version>
    <vqmver required=”true”>2.6.0</vqmver>
    <author>SuffixBig</author>
    <file name=”admin/controller/common/dashboard.php”>
        <operation error=”skip” info=”For non OCMod includes/requires”>
            <search position=”after” offset=”6″><![CDATA[
            if ($width >= 12) {
            ]]></search>
            <add><![CDATA[
if ($width >0  && $width < 12) {
$data[‘rows’][] = $column;//此3行我加的-不足12一行的部分應該也要出現
}
            ]]></add>
        </operation>
    </file>
</modification>

#結果 會在找到字串的下面6行然後加上1行空白和你要替換的內容

            if ($width >= 12) {
                $data[‘rows’][] = $column;
                $width = 0;
                $column = array();
            }
        }
if ($width >0  && $width < 12) {
$data[‘rows’][] = $column;//此3行我加的-不足12一行的部分應該也要出現
}

vQMOD 參數詳細

vQmod支援的參數有:
modification
這是檔案最高級別,也只有一個。
modification / id
這是模組的名稱和描述。
格式:文字形式。(信息)
modification / version
這是模組的版本。
格式:數字或Decimal (1.0.0)
modification / vqmver
這是最短VirtualQMod所需版本的腳本。
格式:數字或Decimal (1.0.0)
modification / author
這是模組的作者。
格式:文字形式。(信息)
modification / file
此為要變更的檔案名稱
需名稱屬性其為檔案文件名稱如index.php檔案的相對位置(如catalog/controller/product/product.php)。 名稱屬性支援建立動態路徑萬用字元(*)。每個萬用字元僅限於一個單一的目錄級別。
– catalog/view/theme/*/template/product/product.tpl
– catalog/view/theme/*/*/product/product.tpl
等等….
在一個 XML檔案中可標記多個標籤,每個檔案都可有自己的一套操作。
modification / file / operation
這是實際發生的操作包裝。
可以有多個相同檔案標籤。
可選的”error”屬性設置為skip | log | abort
skip意含所有其他操作將不可應用。將不會在log顯示錯誤。
log相同於skip,但會記錄錯誤。
abort意含記錄錯誤日誌和恢復到初始的來源。(預設)
modification / file / operation / search
這為所需操作的第一步。
只能搜尋單一行。但可使用offset 及 index屬性來協助。
自動修剪空白和換行
一個操作的標籤
推薦使用CDATA標籤來包裝程式碼。
需位置屬性來設置為before|after|replace|top|bottom|all幾種型式。
replace 為在搜尋標籤中的資料取代為add標籤上的資料。(預設)
before 為在搜尋標籤中的資料之前插入add標籤上的資料。
after 為在搜尋標籤中的資料之後插入add標籤上的資料。
top 為在文件頂部插入add標籤上的資料。搜尋資料會被忽略。
bottom 為在文件底部插入add標籤上的資料。搜尋資料會被忽略。
all 將完全以add標籤上的資料取代所有資料。搜尋資料會被忽略。
可選offset屬性為要工作的位置
若搜尋位置為before 及 offset 3,其會放置add標籤上的資料在搜尋前3行
若搜尋位置為after 及 offset 3,其會放置add標籤上的資料在搜尋後3行
若搜尋位置為replace 及 offset 3,其會從搜尋行中移除碼及下一個3行以add標籤上的資料取代
若搜尋位置為top 及 offset 3,其會在文件的最前3行下面放置add標籤上的資料
若搜尋位置為bottom 及 offset 3,其會在文件的最後3行前面放置add標籤上的資料
可選index屬性為搜尋標籤的例項將要指定動作標示
若搜尋字串為”echo”,在文件中有5個echo值,而只想取代第1和第3的值,可使用index=”1,3″來標示
多個實例是逗號來分隔,啟始值為”1″
遺漏或設置為false則取代所有例項。(預設)
可選regex屬性用於指定是否要以正規表示法模式來搜尋。
若為 true,則是以有效的正規表示法模式來搜尋
遺漏或設置為false則是使用正常字串來搜尋(預設)
可選trim屬性設置為 true|false
true將修剪遠離空白和換行。
遺漏或設置為true,則代表要修剪。(預設為 true)
modification / file / operation / add
這為所需操作的第三步。
可多行
一個操作的標籤
add標籤上的資料取決於屬性搜尋的位置。
使用CDATA標籤來包含程式碼。
可選trim屬性可設置為 true|false
true將修剪遠離空白和換行。
遺漏或設置為true,則代表要修剪。(預設為 true)
<![CDATA[ ]]>
此被稱為CDATA tags和其被用來指定xml資料。建議增加資料則是使用 search及 add operation tags
發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *