1

我知道如何覆盖 Mage 类(其中的任何类app/code/core) 我的问题是如何覆盖 Varien 类?(内的类lib/Varien

如果我想覆盖我在下面Mage_Adminhtml_Block_Page_Menu 创建一个类MyCompany_Adminhtml_Block_Page_Menuapp/code/local/MyCompany/Adminhtml/Block/Page/Menu.php

我把它命名为:

 class MyCompany_Adminhtml_Block_Page_Menu extends Mage_Adminhtml_Block_Page_Menu

现在 Magento 使用我的课程MyCompany_Adminhtml_Block_Page_Menu而不是Mage_Adminhtml_Block_Page_Menu

我的问题是:我应该把新类放在哪里,以及如何命名它,例如覆盖 Varien_Datelib/Varien/Date.php

谢谢

4

1 回答 1

10

如果必须,请将文件和路径复制到本地代码池并进行必要的更改。没有用于更改类名的配置映射。

说明:参见app/Mage.php中的引导。按以下顺序为代码池和库设置了加载顺序:

  1. 应用程序/代码/本地/
  2. 应用程序/代码/社区/
  3. 应用程序/代码/核心/
  4. 库/

通常,Varien_Autoload负责将类名如 , 或映射Varien_Data_Collection_DbMage_Core_Model_Abstract相关Zend_Db_Select文件名(分别为Varien/Data/Collection/Db.phpMage/Core/Model/Abstract.phpZend/Db/Select.php)。然后将这些文件位置传递给include(),它在内部使用引导程序中设置的加载顺序。因此,如果文件Varien/Data/Collection/Db.php存在于“早期”位置之一下,则将使用该版本的类定义。

这些类型的修改可能是合理的,但它们应该经过深思熟虑并记录在案,因为整个定义将归您所有,并且将来需要合并任何升级。最好知道您想更改什么,因为其他人可能有一个侵入性稍小的选项。

于 2012-04-11T12:39:25.910 回答