进行修改时,我是否必须将整个类复制到“本地”代码池
题
有人可以为我回答吗?
如果我在本地代码池中创建自己的法师/核心文件版本,它是否会完全覆盖法师/核心文件?还是我的代码中未重新定义的方法仍然从核心文件继承?
例子。以下文件(exception.php)包含几种方法(函数)。
~ app
-> code
-> core
-> Mage
-> Customer
-> Exception.php
我想在这里放置自己的版本:
~ app
-> code
-> local
-> Mage
-> Customer
-> Exception.php
我的版本只包含1个方法(_beforeSave()
)。核心文件包含许多。所有其他方法是否仍可从原始文件中使用?
希望这很清楚!谢谢。
解决方案
如果将文件放在文件夹中 local
(或者 community
)与某些文件相同的路径 core
核心文件将使毫无用处。
订单Magento搜索文件是 app/code/local
, app/code/community
, app/code/core
, lib
. 。如果您只想覆盖一种方法,请不复制该文件 local
文件夹。
这是一个不错的教程 这向您展示了如何正确覆盖某些东西。
其他提示
Magento中基本上有三种不同的“有效”程序逻辑修改方式
- 使用事件
- 使用类或控制器重写
- 通过将完整文件复制到
local
代码池,然后对其进行修改。
我建议您更喜欢1.超过2.超过2.超过3.,因为您可以正确隔离更改,并且在更新Magento版本时会引起问题。 2.(正如马里乌斯(Marius)所述,仍然比复制到本地要好,因为不风险其他扩展或更新破坏事物。
使用时 local
池,您始终必须维护完整的类代码(如果更新)。
在您的情况下,您应该检查是否可以使用事件添加您应用的代码 Mage_Customer
对象调用 customer_save_before
.