gpt4 book ai didi

overriding - 在不触及核心和 VQMOD/OCMOD 的情况下修改 OpenCart 的最佳方法

转载 作者:行者123 更新时间:2023-12-03 18:30:39 28 4
gpt4 key购买 nike

有没有比使用 VQMOD 更好的方法?/OCMOD改变OpenCart's核心文件?

是否存在一些“覆盖”文件夹,以便我可以简单地创建任何 PHP文件对应于文件结构并简单地覆盖核心文件? (就像 PrestaShopMagento 一样)。
VQMOD/OCMOD高度 不方便。
有人使用任何黑客和技巧来达到结果吗?

我不想接触任何核心文件以保持系统清洁和可管理。

非常感谢!

最佳答案

我的解决方案是修改 system/startup.php 中的 1 个函数 (modification()),然后您可以将任何现有的 PHP 文件复制到“覆盖”文件夹中并在不更改原始文件的情况下对其进行修改。
我想找到一种仅替换更改/添加的功能的方法,但是 OpenCart 中的 OOP 方法不容易做到这一点。
我已经调整了一些 OCMOD 模块以适应我的覆盖方法(通过应用模块,将更改的文件复制到我的覆盖结构中,然后删除模块),因为我认为它更容易维护和更容易开发,当我创建我自己的模块,我在主结构中创建虚拟文件,在“覆盖”目录中创建实际文件,这意味着我所有的修改/添加都在一个文件夹中,该文件夹保持原始布局的结构。
可以生成创建 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;
}

我的目录结构看起来像这样
/override
/override/admin
/override/catalog
/override/system

关于overriding - 在不触及核心和 VQMOD/OCMOD 的情况下修改 OpenCart 的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32933978/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com