我会尝试提供尽可能多的上下文。
现在试图覆盖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/
有什么想法吗?
答案 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查找类重写的地方。