编程

OCMod - Opencart 代码调整系统

1662 2022-10-18 14:36:23

 OCMOD 与 VQMOD 的不同

OCMOD 是简化版的 VQMOD。

主要差别:

保留

Replace, Before, After, Regex, Offset, Limit, ignoreif, error

缺少

属性 top, bottom, ibefore, iafter

可以查看文档的 XML 部分,查阅 OCMODS 的全部特性。

VQMOD 项目主页如下:

https://github.com/vqmod/vqmod/wiki/Scripting

OCMOD 文件

OCMOD 文件可以由 opencart 管理员通过如下路径上传:

Extensions / Installer (中文:扩展功能/安装器)

上传的 OCMOD 文件必须是 .ocmod.zip。

文件结构

OCMOD 压缩文件目录结构:

  • upload
  • install.xml

upload

该目录下的所有文件都会被上传到Opencart安装目录中。

install.xml

XML 修改文件。

系统文档如下:

XML

该文件为需要修改的文件新建一个虚拟的副本。使用该系统避免覆盖默认安装文件。多次修改可作用于同一文件。

OCMOD file 示例:

<?xml version="1.0" encoding="utf-8"?>
<modification>
    <name>Modification Default</name>
    <version>1.0</version>
    <author>OpenCart Ltd</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[
            test123
            ]]></add>
        </operation>
    </file>  
</modification>

标签

File 文件

你可以使用逗号分隔设置多个文件路径。该调整系统使用 PHP 函数 glob.

http://hk1.php.net/manual/en/function.glob.php

示例:

直接文件路径。

<file path="catalog/controller/common/home.php">

使用分隔符就能选中多个文件,这样就不用多次重复代码了。

<file path="system/engine/action.php|system/engine/loader.php|system/library/config.php|system/library/language.php">

同时也支持花括号

<file path="system/{engine,library}/{action,loader,config,language}*.php">

请注意,所有文件路径必须以 admin, catalog 或 system 开始。你也可以使用通配符 * ,搜索多个目录和文件。 

Search 搜索 

搜索代码

可用属性

  • trim="(true|false)"
  • regex="(true|false)"
  • index="(number)"

示例:

<?xml version="1.0" encoding="utf-8"?>
<modification>
    <name>Modification Default</name>
    <version>1.0</version>
    <author>OpenCart Ltd</author>
    <link>http://www.opencart.com</link>
    <file path="catalog/controller/common/home.php">
        <operation>
            <search trim="true|false" index="1"><![CDATA[
            $data['column_left'] = $this->load->controller('common/column_left');
            ]]></search>
            <add position="replace" offset="1"><![CDATA[
            test123
            ]]></add>
        </operation>
    </file>  
</modification>

Add

用以替代的代码

可用属性

  • trim="(true|false)"
  • position="(replace|before|after)"
  • offset="(number)"

(注意,如果搜索属性中正则设置为true,那position 将不可用).

示例

<?xml version="1.0" encoding="utf-8"?>
<modification>
    <name>Modification Default</name>
    <version>1.0</version>
    <author>OpenCart Ltd</author>
    <link>http://www.opencart.com</link>
    <file path="catalog/controller/common/home.php">
        <operation>
            <search trim="true|false"><![CDATA[
            $data['column_left'] = $this->load->controller('common/column_left');
            ]]></search>
            <add position="replace|before|after" trim="true|false" offset="2"><![CDATA[
            test123
            ]]></add>
        </operation>
    </file>  
</modification>

Regex

可用属性

  • limit="(number)"

示例:

<?xml version="1.0" encoding="utf-8"?>
<modification>
    <name>Regex Example</name>
    <version>1.0</version>
    <author>OpenCart Ltd</author>
    <link>http://www.opencart.com</link>
    <file path="system/{engine,library}/{action,loader,config,language}*.php">
        <operation>
            <search regex="true" limit="1"><![CDATA[
            ~(require|include)(_once)?\(([^)]+)~
            ]]></search>
            <add><![CDATA[
            $1$2(modification($3)
            ]]></add>
        </operation>
    </file>
</modification>

如果你使用了正则,属性 position, trim 或 offset 将不可用。limt 属性仍然可用。

比如你需要将下行中的第三个 ‘foo’ 改成 ‘bar’ :

lorem ifoopsum foo lor foor ipsum foo dolor foo
^1      ^2      ^3         ^4        ^5

运行:

s/\(.\{-}\zsfoo\)\{3}/bar/

结果:

lorem ifoopsum foo lor barr ipsum foo dolor foo
^1      ^2      ^3=bar     ^4        ^5

更多OCMOD 使用的PHP正则表达式函数,可查看:

http://hk2.php.net/manual/en/function.preg-replace.php

正则表达式的更多信息, 查看此处:

http://www.regular-expressions.info