2012-04-11 75 views
1

我知道如何重写法师类(内app/code/core任何类) 我的问题是如何覆盖瓦瑞恩类? (内lib/Varien类)我可以重写Magento Varien类吗?

如果我要重写Mage_Adminhtml_Block_Page_Menu 我下app/code/local/MyCompany/Adminhtml/Block/Page/Menu.php

创建一个类MyCompany_Adminhtml_Block_Page_Menu我的名字是这样的:

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

感谢

+0

抱歉不同意,但复制到本地不是可接受的方式来覆盖Magento的核心 – OSdave 2012-04-11 16:19:11

回答

9

如果必须,复制文件和路径当地 codepool并进行必要的修改。没有配置映射来更改类名称。

说明:请参阅app/Mage.php的引导。有一个加载顺序为以下顺序的codepools和库设置:

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

典型地,Varien_Autoload负责映射类名如Varien_Data_Collection_DbMage_Core_Model_Abstract,或Zend_Db_Select到相对文件名(瓦瑞恩/数据/收集/ db.php中法师/核心/型号/ Abstract.php,和的Zend/DB /选择。分别为php)。然后,将这些文件位置被传递到include(),其内部使用的加载顺序在自举设置。因此,如果该文件瓦瑞恩/数据/收集/ db.php中存在的“早期”的地点之一,版本的类定义将被使用下。

这些类型的修改可能是合理的,但他们应该被充分考虑,并记录在案,作为整个定义将被你拥有的任何升级将需要在未来合并。很高兴知道你想要改变什么,因为其他人可能会有一些侵入性稍差的选择。

+0

谢谢,我的更改必须在我的模块文件夹内,因为我正在创建一个可再发行的模块。 – skafandri 2012-04-11 13:02:51

+1

@skafandri如果你需要更改内核你可能做错了 – 2012-04-11 14:28:07

+0

没错!我绝对不想改变核心,我只是想重新定义一些类,我正好想重新定义一些toHtml()方法。 – skafandri 2012-04-11 14:42:52