Pau*_*aul 4 php rewrite overriding core magento
无法覆盖magento核心配置模型Mage_Core_Model_Config.我有magento 1.9.2.1.这是config.xml
<global>
<helpers>
<peexl_customflatrate>
<class>Peexl_CustomFlatrate_Helper</class>
</peexl_customflatrate>
</helpers>
<models>
<peexl_customflatrate>
<class>Peexl_CustomFlatrate_Model</class>
</peexl_customflatrate>
<core>
<rewrite>
<config>Peexl_CustomFlatrate_Core_Config</config>
</rewrite>
</core>
Run Code Online (Sandbox Code Playgroud)
和类Peexl/CustomFlatrate/Model/Core/Config.php
class Peexl_CustomFlatrate_Model_Core_Config extends Mage_Core_Model_Config
{
}
Run Code Online (Sandbox Code Playgroud)
什么都没发生 :(
Ala*_*orm 11
没错,你做不到.
Magento的类重写系统可以工作,因为几乎所有的Magento对象都是通过Mage::getModel静态类实例化的.但是,如果通过该new方法直接创建对象
$foo = new Some_Class_File_Here;
Run Code Online (Sandbox Code Playgroud)
Magento的类重写将无法替换实例化的类.在没有重写系统的情况下,Magento需要实例化一些对象.Magento需要在没有重写系统的情况下实例化这些类,因为它们是实现重写系统的实际类.
这些课包括
self::$_objects = new Varien_Object_Cache;
self::$_app = new Mage_Core_Model_App();
self::$_events = new Varien_Event_Collection();
self::$_config = new Mage_Core_Model_Config($options);
Run Code Online (Sandbox Code Playgroud)
其中包括Mage_Core_Model_Config课程.如果要修改此类的行为,可以使用两个选项.
首先,您可以创建本地代码池覆盖
app/code/local/Mage/Core/Model/Config.php
Run Code Online (Sandbox Code Playgroud)
具有该类的精确副本app/code/copy/Mage/Core/Model/Config.php,以及您的更改.这样做的缺点是,无论何时升级Magento,您都需要手动更新此类,如果您不小心,可能会破坏核心代码所依赖的功能.
其次,Magento 1的现代版本包含备用配置类的选项.看看Magento实例化配置选项的位置
#File: app/Mage.php
protected static function _setConfigModel($options = array())
{
if (isset($options['config_model']) && class_exists($options['config_model'])) {
$alternativeConfigModelName = $options['config_model'];
unset($options['config_model']);
$alternativeConfigModel = new $alternativeConfigModelName($options);
} else {
$alternativeConfigModel = null;
}
if (!is_null($alternativeConfigModel) && ($alternativeConfigModel instanceof Mage_Core_Model_Config)) {
self::$_config = $alternativeConfigModel;
} else {
self::$_config = new Mage_Core_Model_Config($options);
}
}
Run Code Online (Sandbox Code Playgroud)
您可以看到Magento在$options数组的config_model键中查找类名.您可以通过index.php引导程序文件进行设置
#File: index.php
Mage::run($mageRunCode, $mageRunType, array('config_model'=>'Package_Module_Model_Config'));
Run Code Online (Sandbox Code Playgroud)
这略好于本地代码池覆盖,因为Package_Module_Model_Config可以扩展基本配置类,并且您只能更改所需内容.但是,它确实依赖于您维护自己的index.php引导程序文件,这使得它不适合重新分发.
希望有所帮助!
| 归档时间: |
|
| 查看次数: |
710 次 |
| 最近记录: |