發佈於

前台-拿掉加入商品最愛和商品比較這2個按鈕-的OCMOD寫法

<?xml version=”1.0″ encoding=”utf-8″?>
<modification>
<name>前台-拿掉加入商品最愛和商品比較這2個按鈕</name>
<code>no_fa_fa-heart_fa-exchange</code>
<version>v1.0.2適用OPENCART2.3.x</version>
<author>suffixbig</author>
<!– #最新商品 –>
<file path=”catalog/view/theme/*/template/extension/module/latest.tpl”>
<operation>
<search><![CDATA[
<button type=”button” data-toggle=”tooltip” title=”<?php echo $button_wishlist; ?>” onclick=”wishlist.add(‘<?php echo $product[‘product_id’]; ?>’);”><i class=”fa fa-heart”></i></button>
]]></search>
<add position=”replace”><![CDATA[]]></add>
</operation>
<operation>
<search><![CDATA[
<button type=”button” data-toggle=”tooltip” title=”<?php echo $button_compare; ?>” onclick=”compare.add(‘<?php echo $product[‘product_id’]; ?>’);”><i class=”fa fa-exchange”></i></button>
]]></search>
<add position=”replace”><![CDATA[]]></add>
</operation>
</file>
<!– #推薦商品 –>
<file path=”catalog/view/theme/*/template/extension/module/featured.tpl”>
<operation>
<search><![CDATA[
<button type=”button” data-toggle=”tooltip” title=”<?php echo $button_wishlist; ?>” onclick=”wishlist.add(‘<?php echo $product[‘product_id’]; ?>’);”><i class=”fa fa-heart”></i></button>
]]></search>
<add position=”replace”><![CDATA[]]></add>
</operation>
<operation>
<search><![CDATA[
<button type=”button” data-toggle=”tooltip” title=”<?php echo $button_compare; ?>” onclick=”compare.add(‘<?php echo $product[‘product_id’]; ?>’);”><i class=”fa fa-exchange”></i></button>
]]></search>
<add position=”replace”><![CDATA[]]></add>
</operation>
</file>
<!– #商品分類頁 –>
<file path=”catalog/view/theme/*/template/product/category.tpl”>
<operation>
<search><![CDATA[
<button type=”button” data-toggle=”tooltip” title=”<?php echo $button_wishlist; ?>” onclick=”wishlist.add(‘<?php echo $product[‘product_id’]; ?>’);”><i class=”fa fa-heart”></i></button>
]]></search>
<add position=”replace”><![CDATA[]]></add>
</operation>
<operation>
<search><![CDATA[
<button type=”button” data-toggle=”tooltip” title=”<?php echo $button_compare; ?>” onclick=”compare.add(‘<?php echo $product[‘product_id’]; ?>’);”><i class=”fa fa-exchange”></i></button>
]]></search>
<add position=”replace”><![CDATA[]]></add>
</operation>
</file>
<!– #頁頭上方-商品備忘 –>
<file path=”catalog/view/theme/*/template/common/header.tpl”>
<operation>
<search><![CDATA[
<li><a href=”<?php echo $wishlist; ?>” id=”wishlist-total” title=”<?php echo $text_wishlist; ?>”><i class=”fa fa-heart”></i> <span class=”hidden-xs hidden-sm hidden-md”><?php echo $text_wishlist; ?></span></a></li>
]]></search>
<add position=”replace”><![CDATA[]]></add>
</operation>
<operation>
<search><![CDATA[
<button type=”button” data-toggle=”tooltip” title=”<?php echo $button_compare; ?>” onclick=”compare.add(‘<?php echo $product[‘product_id’]; ?>’);”><i class=”fa fa-exchange”></i></button>
]]></search>
<add position=”replace”><![CDATA[]]></add>
</operation>
</file>
</modification>

發佈於

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
發佈於

自寫關閉預設會員註冊功能

<?xml version=”1.0″ encoding=”utf-8″?>
<modification>
<name>自寫關閉預設會員註冊功能</name>
<version>2.4</version>
<link> </link>
<author><![CDATA[SuffixBig suffixbig@gmail.com]]></author>
<code>shutdown_accountregister2</code>
<!–註解:修改檔案–>
<file path=”catalog/view/theme/*/template/account/register.tpl”>
<operation>
<search><![CDATA[<h1><?php echo $heading_title; ?></h1>]]></search>
<add position=”replace”><![CDATA[
<!–<h1><?php echo $heading_title; ?></h1>
]]></add>
</operation>
<operation>
<search><![CDATA[<?php echo $content_bottom; ?></div>]]></search>
<add position=”replace”><![CDATA[
<?php echo $content_bottom; ?>–></div>
]]></add>
</operation>
</file>
</modification>

發佈於

OCMOD

OCMOD 是 opencart 系統的程式碼修改系統,遵循GPL3協議免費使用。
如果 OCMOD 外掛開發正確,那麼使用者就可以在不更改系統核心程式碼的情況下增刪相關程式功能,
這也代表如果移除了某 OCMOD 外掛,則 opencart 的原始程式是不需要恢復或修復的。
OCMOD 是基於 Qphoria 的 VQMOD 系統。
OCMOD 是簡化版的 VQMOD. 主要區別:
保留了 Replace, Before, After, Regex, Offset, Limit, ignoreif, error
去掉了 Attributes top, bottom, ibefore, iafter
OCMOD 檔案可以透過 opencart 網站管理後台的[擴充功能]上傳:
若要上傳 OCMOD 檔案,則該檔案的附檔名必須為 .ocmod.zip 或者 .ocmod.xml。
這是為了避免非 ocmod 的檔案上傳到網站後台。

#OCMOD 的xml檔上傳之後 資料是存到資料庫 modification
系統檔案
system\storage\modification
後台相關檔案
D:\wamp\www\o03\admin\model\extension

#找到3個相同怎辦

可選index屬性為搜尋標籤的例項將要指定動作標示
若搜尋字串為”echo”,在文件中有5個echo值,而只想取代第1和第3的值,可使用index=”0,2″來標示
<search index=’2′><![CDATA[$data[‘header’] = $this->load->controller(‘common/header’);]]></search>
index=’2′ 改找到的第3個
<search index=”0″>0的結果是 只改第1個找到的

OCMOD 也是有 暫存檔 因為OCMOD改哪個檔-該檔案就會變成 直接改後上傳也無用要按更新才會改動
\system\storage\modification\admin\controller\common\column_left.php

#行數計算
===
                ‘edit’          => $this->url->link(‘sale/order/edit’, ‘token=’ . $this->session->data[‘token’] . ‘&order_id=’ . $result[‘order_id’] . $url, true)
            );
        }
#要加在}之前的話-要設 <add position=”after” offset=”1″> 本身找到那行是0 );後是1
/*
<file path=”catalog/controller/common/home.php”> 目標檔案
<add position=”replace”>
after : 在尋找到的字符串後面增加;     這裡有疑問 也有寫法是 Ater
before:在尋找到的字符串前面增加;
replace:替換尋找到的字符串
<add position=”replace”><![CDATA[
test123
]]></add>
*/

#以下為寫法範例

<?xml version=”1.0″ encoding=”utf-8″?>
<modification>
  <name>test 01</name>
  <code>test 01</code>
  <version>1.0</version>
  <author><![CDATA[作者suffixbig suffixbig@gmail.com]]></author>
  <link>http://www.opencart.com</link>
  <file path=”catalog/controller/common/home.php”>
    <operation>
      <search>
        <![CDATA[
        $data[‘column_left’] = $this->load->controller(‘common/column_left’);
        ]]>
      </search>
      <add position=”replace”>
        <![CDATA[
        echo ‘test123’;
        ]]>
      </add>
    </operation>
  </file>
</modification>

後台檔案也能是修改目標

    <file path=”admin/controller/sale/return.php”>
        <operation>
            <search><![CDATA[
                protected function getList() {
                ]]>
            </search>
            <add position=”before” offset=”6″>
                <![CDATA[
                if(isset($this->request->get[‘next’]) && $this->request->get[‘next’] == ‘guest/guestreturn’) {
                    $next = $this->request->get[‘next’];
                    $this->response->redirect($this->url->link($next, ‘token=’ . $this->session->data[‘token’], true));
                }
                ]]>
            </add>
        </operation>
    </file>

找到字之後的下幾行  offset=偏移量

<add position=”after ” offset=”6″>
position=」before」 (位置為之前)和偏移為3行。找到【$var = 『123』;】的位置向上偏移3行插入add裡面的數據
position=」after「  (位置為後面)和偏移為3行。找到【$var = 『123』;】的位置向下偏移3行插入add裡面的數據
position=」replace「(位置為替換)和偏移為3行。找到【$var = 『123』;】的位置從當前位置到向下偏移3行全部清除,並用add裡面的數據替換
#被去掉了
position=」top「    (位置為頂部)和偏移為3行。找到【$var = 『123』;】的位置從頂部向下偏移3行的頂部
position=」bottom「 (位置為底部)和偏移為3行。找到【$var = 『123』;】的位置從底部上方3行文件的底部
錯誤原因
Parse error: syntax error, unexpected end of file, expecting function (T_FUNCTION) in /usr/local/www/public/system/storage/modification/admin/controller/common/dashboard.php on line 88
<add position=”after ” offset=”6″> 打成 <add position=”ater ” offset=”6″>

同一檔改2段要這樣寫,你只寫一個<operation>的話,第2段不會執行

<?xml version=”1.0″ encoding=”utf-8″?>
<modification>
    <name>自寫關閉預設會員註冊功能</name>
    <version>2.4</version>
    <link> </link>
    <author><![CDATA[SuffixBig suffixbig@gmail.com]]></author>
    <code>shutdown_accountregister2</code>
    <!–註解:修改檔案–>
    <file path=”catalog/view/theme/*/template/account/register.tpl”>
        <operation>
            <search><![CDATA[<h1><?php echo $heading_title; ?></h1>]]></search>
            <add position=”replace”><![CDATA[
            <!–<h1><?php echo $heading_title; ?></h1>
            ]]></add>
        </operation>
        <operation>
            <search><![CDATA[<?php echo $content_bottom; ?></div>]]></search>
            <add position=”replace”><![CDATA[
      <?php echo $content_bottom; ?>–></div>
            ]]></add>
        </operation>
    </file>
</modification>

NOT FOUND – OPERATIONS ABORTED! 找不到問題
換行和空格 所有範例目前 沒找到有2行的 \r\n 換行該如何處理

FILE: catalog/view/theme/default/template/account/register.tpl
CODE: <div class=”form-group”>
            <label class=”col-sm-2 control-label” for=”input-fax”><?php echo $entry_fax; ?></label>
            <div class=”col-sm-10″>
              <input type=”text” name=”fax” value=”<?php echo $fax; ?>” placeholder=”<?php echo $entry_fax; ?>” id=”input-fax” class=”form-control” />
            </div>
          </div>
NOT FOUND – OPERATIONS ABORTED!
找不到

\r\n 這樣也不對

FILE: catalog/view/theme/default/template/account/register.tpl
CODE: <script type=”text/javascript”><!–\r\n$(‘button[id
NOT FOUND – OPERATIONS ABORTED!

#xml 中 name 不能有&符號

<?xml version=”1.0″ encoding=”utf-8″?>
<modification>
    <name>Facebook登入&註冊</name>
    <version>v1.0適用OPENCART2.3.0.2</version>
    <code>03032016002158</code>
    <author>suffixbig 此插件其實沒修改任何檔案</author>
    <link></link>
</modification>

#再附上一個成功案例

<?xml version=”1.0″ encoding=”utf-8″?>
<modification>
    <name>將訂單內容地址數字部分取代為星號</name>
    <version>1.0</version>
    <link></link>
    <author>SuffixBig – suffixbig@gmail.com</author>
    <code>Theorderaddressnumberispartiallyreplaced</code>
    <!–註解:修改目標檔案–>
    <file path=”catalog/controller/account/order.php”>
    <!–地址2–>
        <operation>
            <search><![CDATA[
            ‘address_1’ => $order_info[‘payment_address_1’]
            ]]></search>
            <add position=”replace”><![CDATA[
            ‘address_1’ => preg_replace(‘@\d@’,’*’,$order_info[‘payment_address_1’])
            ]]></add>
        </operation>
        <operation>
            <search><![CDATA[
            ‘address_1’ => $order_info[‘shipping_address_1’]
            ]]></search>
            <add position=”replace”><![CDATA[
            ‘address_1’ => preg_replace(‘@\d@’,’*’,$order_info[‘shipping_address_1’])
            ]]></add>
        </operation>
    </file>
</modification>

VQMOD 看 修改後的檔案 源碼 /vqmod/vqcache 目錄下有暫存檔
OCMOD 看 修改後的檔案 源碼 完全不知道該如何才有辦法看到 (因為谷哥大神完全查不到 事隔一個月20170704 才查到位置 )

OCMOD 也是有 暫存檔 因為OCMOD改哪個檔-該檔案就會變成 直接改後上傳也無用要按更新才會改動
\system\storage\modification\admin\controller\common\column_left.php