2015-10-04 300 views
3

有没有更好的方法,然后用VQMOD/OCMOD更改OpenCart's核心文件?最好的方式来修改OpenCart而不用触摸核心和VQMOD/OCMOD

是否存在一些“覆盖”文件夹,以便我可以简单地创建与文件结构对应的任何PHP文件,并简单地覆盖核心文件? (如可能在PrestaShopMagento)。

VQMOD/OCMOD高度不方便。 是否有人使用任何黑客&技巧来实现结果?

我不想触摸任何核心文件来保持系统清洁和易于管理。

非常感谢!

+0

从来没有听说过这样的事情 –

回答

-2

解决了这个使用一个自定义的黑客(并且写了关于这个there):

例如,您需要申请一个很大的变化在catalog/controller/common/header.php文件。好消息 - 你不需要制作一个.ocmod.xml文件来实现这一点。

只需将原始文件复制到system/storage/modification/catalog/controller/common/header.php并更改任何您需要的东西!

所以你可以覆盖任何文件(控制器,模型,语言,模板,助手),并创建自己的文件在核心目录之外!

注意:你可能会失望,为什么它现在可能无法正常工作。这是因为OpenCart的修改系统关闭了。要打开它,只需打开OpenCart的管理面板:扩展 - >修改并点击蓝色刷新按钮!

注2:因为它擦掉你的文件后,任何更改都system/storage/modification目录下取得不要刷新点击!

+2

当然,如果有人点击刷新,并且您实际上已经在修改文件夹中使用了整个站点,这个建议可能会成为灾难的秘诀吗? 也不是一些新的OC插件不需要刷新ocmod文件?我可能是错的。 – Adrian

+1

@阿德里安,你没有错。但我的意思是只有一个开发时间。在新功能准备就绪后,值得使用'diff'工具将更改编译到OC模块并像往常一样安装。 –

0

您可以在OpenCart中使用Vqmod或Ocmod。两者都在OpenCart中工作以覆盖代码。

对于vqmod:

阅读本官方Opencart的文档。 http://docs.opencart.com/administration/vqmod/

对于ocmod:

OCMOD独立工作。您必须创建带有“.ocmod.xml”扩展名的ocmod xml文件,然后您可以使用opencart管理面板中的“Extension Installer”上载该文件。

您必须清除并刷新修改缓存以更新系统并使扩展工作。您可以通过管理面板上的分机>修改页面右上角的按钮清除并刷新。

+0

谢谢你,但我我试图避免使用'Vqmod'和'Ocmod',它们对我来说是无法使用的。有很多RegExp规则需要使用'install.xml' /'.ocmod.xml'文件。不幸的是,这些系统不支持多行搜索。而如果有一天在更新后它将开始匹配错误的字符串...更多的问题,然后实际编程:) –

0

如果一个替代方案存在其他地方,是不是可以识别一个控制器文件?您可以使用vq/ocmod一次编写一个脚本,指出“如果替代核心文件存在于xyz位置,请使用它,否则,使用基本文件夹中的核心文件”,然后将新的核心文件添加到您创建的mods目录中。 。只是一个想法..

5

如果你想跟随的OC结构系统内调用你的函数,避免查找/替换MODS的,请尝试使用新的Opencart的活动(又称挂钩)来代替:

https://github.com/opencart/opencart/wiki/Events-(script-notifications)-2.2.x.x

但是,您仍然可以使用Opencart override engine(由第三方开发人员)。

+0

年后,它仍然是一个问题。文档很差,很少更新。现在在oc 3x上 - 如果使用事件系统对tpl/twig文件进行简单更改会怎么样...如何替换/插入一行代码?没有任何有意义的文档,或者这是一个有效的例子。 OC不断更新其核心代码,但未能更新文档并帮助社区。 vQmod是我的方法,很容易,但由于OC的失控而被推出,@ jaygilford在这方面做得很好,这真是一个耻辱。 OCmod是越野车和复杂,事件记录不完善。 – mackwizard

2

我的解决方案是修改system/startup.php中的1个函数(修改()),然后允许您将任何现有的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 
+0

好方法!感谢分享 –

+0

真棒,谢谢! – kanenas