Не удается переопределить модель конфигурации ядра 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>

И класс Peexl / CustomFlatrate / Model / Core / Config.php

class Peexl_CustomFlatrate_Model_Core_Config extends Mage_Core_Model_Config
{

}

Ничего не произошло 🙁

4

Решение

Это верно, вы не можете.

Система переписывания классов Magento работает, потому что почти все объекты Magento создаются с помощью Mage::getModel статический класс. Однако, если объект создается напрямую через new метод

$foo = new Some_Class_File_Here;

Переписывание классов 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);

Который включает в себя Mage_Core_Model_Config учебный класс. Если вы хотите изменить поведение этого класса, у вас есть два варианта.

Во-первых, вы можете создать переопределение локального кода

app/code/local/Mage/Core/Model/Config.php

с точной копией класса из 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);
}
}

Вы можете видеть, что Magento ищет имя класса в $options массива config_model ключ. Вы можете установить это через index.php файл начальной загрузки

#File: index.php
Mage::run($mageRunCode, $mageRunType, array('config_model'=>'Package_Module_Model_Config'));

Это немного лучше, чем переопределение локального пула кода, так как Package_Module_Model_Config Можно расширить базовый класс конфигурации, и вы можете изменить только то, что вам нужно. Тем не менее, это зависит от вас, поддерживая свой собственный index.php файл начальной загрузки, что делает его не очень хорошим для распространения.

Надеюсь, это поможет!

10

Другие решения

Прежде всего, ваша перезапись не будет работать, потому что она была настроена неправильно.
Имя перезаписываемого класса в config.xml не совпадает с именем класса в файле, отсутствует слово «Модель».
Так должно быть:

                <rewrite>
<config>Peexl_CustomFlatrate_Model_Core_Config</config>
</rewrite>
0

По вопросам рекламы [email protected]