Невозможно переписать класс Mage_GoogleShopping_Model_Attribute_Link - PullRequest
2 голосов
/ 01 ноября 2011

Я постараюсь предоставить как можно больше контекста.

Я пытался переопределить Mage_GoogleShopping_Model_Attribute_Link в течение 2 дней, но я не могу заставить Magento забрать мою версию файла.

Mage_GoogleShopping_Model_Attribute_Link класс находится в приложении / коде / ядре / Маге / GoogleShopping / Модель / Атрибут / Link.php

Я поместил свой класс Safoo_Froogle_GoogleShopping_Model_Attribute_Link в / app / code / local / Safoo / Froogle / GoogleShopping / Model / Attribute / Link.php

Тогда мой config.xml :

<global>
...
 <models>
        <safoofroogle>
            <class>Safoo_Froogle_Model</class>
        </safoofroogle>
        <googleshopping>
            <rewrite>
              <attribute_link>Safoo_Froogle_GoogleShopping_Model_Attribute_Link</attribute_link>
            </rewrite>
      </googleshopping>
    </models>
    <helpers>
      <googleshopping>
            <rewrite>
              <price>Safoo_Froogle_GoogleShopping_Helper_Price</price>
            </rewrite>
      </googleshopping>
    </helpers>

(Обратите внимание, что переписывание помощника выше работает отлично.)

Я отладил вызов модели Link в Mage_GoogleShopping_Model_Type::_createAttribute

protected function _createAttribute($name)
{
    $modelName = 'googleshopping/attribute_' . $this->_prepareModelName($name);
    $useDefault = false;
###LOGGING###
    Mage::log($modelName); 
    Mage::log(get_class(Mage::getModel($modelName)  )); 
###LOGGING###
    try {
        $attributeModel = Mage::getModel($modelName);
        $useDefault = !$attributeModel;
    } catch (Exception $e) {
        $useDefault = true;
    }
    if ($useDefault) {
        $attributeModel = Mage::getModel('googleshopping/attribute_default');
    }
    $attributeModel->setName($name);

    return $attributeModel;
}

И это результат двух операторов журнала:

2011-11-01T06:57:17+00:00 DEBUG (7): googleshopping/attribute_Link 2011-11-01T06:57:17+00:00 DEBUG (7): Mage_GoogleShopping_Model_Attribute_Link

Так что Mage::getModel('googleshopping/attribute_Link') все еще загружается Mage_GoogleShopping_Model_Attribute_Link.

Единственный способ переопределить класс - скопировать файл Link.php в соответствующий каталог local: app / code / local / Mage / GoogleShopping / Model / Attribute /Link.php, но хотел этого избежать.

Просто не работает. My Helper Overload работает. И я подумал, что смогу переопределить этот класс, как показано здесь:

http://www.magentocommerce.com/boards/viewthread/222046

http://www.magentocommerce.com/boards/viewthread/35787/

Есть идеи?

1 Ответ

6 голосов
/ 01 ноября 2011

Вы обнаружили ошибку в классе Mage_GoogleShopping_Model_Type, из-за которой не удалось применить переписывание. Основываясь на вашей отладке, вот код, который в итоге вызывается для создания экземпляра модели

Mage::getModel('googleshopping/attribute_Link')

Хотя это не везде применяется в коде, это хорошо установленное правило, согласно которому все псевдонимы классов ('googleshopping/attribute_Link' - псевдоним класса) должны быть строчными. Из-за заглавной буквы L в attribute_Link, когда Magento ищет имя класса для использования при перезаписи, он ищет узел с именем с заглавной буквы L .

<attribute_Link>Safoo_Froogle_GoogleShopping_Model_Attribute_Link</attribute_Link>

К счастью, вы можете обойти это. Просто сделайте так, чтобы ваш config.xml раздел перезаписи выглядел так, и ваше переписывание должно работать

<googleshopping>
    <rewrite>
        <attribute_Link>Safoo_Froogle_GoogleShopping_Model_Attribute_Link</attribute_Link>
        <attribute_link>Safoo_Froogle_GoogleShopping_Model_Attribute_Link</attribute_link>
    </rewrite>
</googleshopping>

Таким образом, вы поймаете экземпляры в форме Mage::getModel('googleshopping/attribute_Link') И в форме Mage::getModel('googleshopping/attribute_link').

Для дальнейшего использования, когда вы отлаживаете перезаписи,

Mage_Core_Model_Config::getGroupedClassName

метод в

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

- это место, где Magento выполняет поиск переписываний классов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...