OCMod - Opencart 代码调整系统
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