/ opencart

浅析vqmod原理及优化思路

前几天有个朋友要我帮忙给opencart增加一个小功能,需求很简单,分分钟就搞定了。

PS:我看过的第一个PHP开源系统的代码应该就是opercart,大学时代还用opencart的引擎(框架)写过一个小网站。

在opencart的后台,看到有opencart的文档链接,好奇点了进去。

然后我就发现了一个有趣的东西:vqmod,http://docs.opencart.com/display/opencart/vQmod

根据文档的描述,vqmod技术可以在不修改系统文件的情况下,对原系统的功能做任意更改,这样做的一个很大的好处是新系统不会因为二次开发而不能把系统升级到最新版本。

vqmod在官方wiki上有简单介绍原理https://code.google.com/p/vqmod/wiki/About

大概原理就是把原系统中的所有include(_once)、require(_once)中的文件路径替换成VQMod::modCheck(),参数就是该文件路径,该函数会根据用户定义的规则,把相关文件修改之后存一份缓存,然后返回缓存文件的路径,这样就可以实现对原系统的修改。

从代码层面来看,首先是执行了VQMod::bootup(),这个函数会扫描vqmod/xml文件夹下所有的xml文件,解析xml文件后放入静态属性$_mods中。而VQMod::modCheck这个函数根据文件路径,生成一个缓存文件的路径,如果该缓存文件存在并且未过期就直接返回缓存文件路径,否则检查静态属性$_mods中是否存在对该文件修改的规则,存在就根据规则生成新文件存入缓存文件,并返回缓存文件路径,否则返回原文件路径。

vqmod需要dom扩展的支持,用于解析xml文件,如果一个php运行环境不支持dom扩展,则vqmod就不能使用。个人认为这个完全可以用php或json来替代,使用php可以直接用一个return array()来返回需要的信息;而使用json的唯一问题是引号,会导致规则编写不方便。这个也比较容易解决,可以做一个vqmod规则生成页面,用工具来生成对应的规则文件。

浅析vqmod原理及优化思路
Share this