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

發表迴響

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