OpenCart中的VQMod偏移问题

时间:2015-09-22 07:12:03

标签: opencart vqmod

我试图用我自己编写的自定义代码替换模型上的一大块代码。

这是代码。我工作,但它留下了很多抵消。 也许有更好的方法来做到这一点

<operation info="Example of the vQmod">
<search position="replace" offset="3"><![CDATA[
Some code I want to Replace
Some code I want to Replace
Some code I want to Replace
]]></search>
<add><![CDATA[
Replaced Code
Replaced Code
Replaced Code
]]></add>
</operation>

2 个答案:

答案 0 :(得分:0)

Vqmods偏移值用于替换一行和后面的x行,但搜索仅用于一行。 Vqmod与搜索中的多行不匹配。

示例:

输入

 public function index() {
        $a = rand();
        $b = rand();
        if ($a == $b) {
            echo 'oh noes';
            return false;
        }
    }

<强> 脚本

 <?xml version="1.0" encoding="UTF-8"?>
    <modification>
        <id>Replace many lines with one</id>
        <version>1.0</version>
        <vqmver>2.X</vqmver>
        <author>xxx</author>
        <file name="path/to/testfile.php">
            <operation info="Replace index function">
                <search position="replace" offset="7"><![CDATA[
                public function index() {
                ]]></search>
                <add><![CDATA[
                public function index($arr = array()) {
                    foreach ($arr as $a) {
                        echo $a;
                        }
                }
                ]]></add>
            </operation>
        </file>
    </modification>

<强> 输出

 public function index($arr = array()) {
        foreach ($arr as $a) {
            echo $a;
            }
    }

注意:仍有7个空白行。偏移量从输入中清除了额外的7行代码,但添加的替换代码代替了初始行。因此在新代码之后会有7个额外的空格,但它不会影响代码功能,只会影响vqcache文件的外观并不重要。

答案 1 :(得分:0)

在Opencart中,您无法搜索多行代码并将其替换为新的多行代码。它只能搜索一行,然后用一行或多行代码替换或添加。

偏移是搜索单行代码,然后偏移下面的行数,然后替换或添加新编码。像这样:

   <operation info="Example of the vQmod">
    <search position="replace" offset="3"><![CDATA[
    code I want to Replace at offset line 3
    ]]></search>
    <add><![CDATA[
    Replaced Code
    add code
    add code
    ]]></add>
    </operation>