无法重写Mage_GoogleShopping_Model_Attribute_Link类

时间:2011-11-01 18:01:30

标签: magento

我会尝试提供尽可能多的上下文。

现在试图覆盖Mage_GoogleShopping_Model_Attribute_Link 2天但我无法让Magento拿起我的文件版本。

Mage_GoogleShopping_Model_Attribute_Link课程位于 app / code / core / Mage / GoogleShopping / Model / Attribute / 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>

(注意上面的Helper Rewrite效果很好。)

我在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;
}

这是2个日志语句的结果:

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但想避免这种情况。

只是不工作。我的助手重载工作。而且我认为我应该能够覆盖这个类,如下所示:

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

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

有什么想法吗?

1 个答案:

答案 0 :(得分:6)

您在Mage_GoogleShopping_Model_Type课程中发现了一个阻止您重写的错误。根据您的调试,这里是最终被调用以实例化模型的代码

Mage::getModel('googleshopping/attribute_Link')

虽然代码中没有强制执行,但是所有类别名('googleshopping/attribute_Link'都是类别名)都应该是小写的,这是一个很好的指导原则。由于attribute_Link中的大写字母L,当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查找类重写的地方。