Ser*_*hyk 6 overriding core opencart vqmod opencart2.x
有没有比使用VQMOD/ OCMOD更改OpenCart's核心文件更好的方法?
是否存在一些"覆盖"文件夹,以便我可以简单地创建PHP与文件结构相对应的任何文件,并简单地覆盖核心文件?(就像它可能在PrestaShop和Magento).
VQMOD/ OCMOD是高度不便.有人使用任何黑客和技巧来实现结果吗?
我不想触摸任何核心文件以保持系统清洁和可管理.
非常感谢!
如果你想在遵循OC结构的系统中调用你的函数,避免搜索/替换mods,尝试使用新的Opencart事件(也称为钩子):
https://github.com/opencart/opencart/wiki/Events-(script-notifications)-2.2.xx
或者,您仍然可以使用Opencart覆盖引擎(由第三方开发人员).
小智 5
我的解决方案是修改system / startup.php中的1个函数(modification()),然后使您可以将任何现有的PHP文件复制到“ override”文件夹中并对其进行修改,而无需更改原始文件。
我想找到一种方法来替换已更改/添加的功能,但是OpenCart中的OOP方法不能轻易实现这一点。
我已经修改了一些OCMOD模块以适合我的覆盖方法(通过应用该模块,将更改的文件复制到我的覆盖结构中,然后删除该模块),因为我认为这样更容易维护,并且在开发时以及创建自己的模块,在主结构中创建虚拟文件,在“ override”目录中创建实际文件,
可能会生成创建OCMOD的文件差异,但我还没有时间这样做。我确实标记了所有更改,因此可以通过手动重新应用更改来升级到较新版本(通常这是“一件好事”(c),并且有可能与其他扩展名发生冲突,因此手动标记更改意味着我也可以将更改应用于OCMOD修补文件,我的修改功能如下所示:
function modification($filename) {
$mod_dirs = array(
DIR_MODIFICATION,
dirname(DIR_SYSTEM).'/override/' // do this second in case there are other over-rides needed for modules
);
foreach($mod_dirs as $mod) {
if (!defined('DIR_CATALOG')) {
$file = $mod . 'catalog/' . substr($filename, strlen(DIR_APPLICATION));
} else {
$file = $mod . 'admin/' . substr($filename, strlen(DIR_APPLICATION));
}
if (substr($filename, 0, strlen(DIR_SYSTEM)) == DIR_SYSTEM) {
$file = $mod . 'system/' . substr($filename, strlen(DIR_SYSTEM));
}
if (is_file($file)) {
return $file;
}
}
return $filename;
}
Run Code Online (Sandbox Code Playgroud)
我的目录结构看起来像这样
/override
/override/admin
/override/catalog
/override/system
Run Code Online (Sandbox Code Playgroud)