我会尝试提供尽可能多的上下文.
一直试图覆盖Mage_GoogleShopping_Model_Attribute_Link
2天但我无法让Magento拿起我的文件版本.
Mage_GoogleShopping_Model_Attribute_Link
class在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>
Run Code Online (Sandbox Code Playgroud)
(注意上面的Helper Rewrite非常有效.)
我调试了对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;
}
Run Code Online (Sandbox Code Playgroud)
这是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/
有任何想法吗?
你已经在Mage_GoogleShopping_Model_Type
课堂上发现了一个阻止你重写的错误.根据您的调试,这里是最终被调用以实例化模型的代码
Mage::getModel('googleshopping/attribute_Link')
Run Code Online (Sandbox Code Playgroud)
虽然它在代码中没有强制执行,但它是一个完善的准则,所有类别名('googleshopping/attribute_Link'
是类别名)应该是小写的.因为大写字母L,在attribute_Link
,当Magento的查找类名的重写使用,它将搜索名为节点用大写L.
<attribute_Link>Safoo_Froogle_GoogleShopping_Model_Attribute_Link</attribute_Link>
Run Code Online (Sandbox Code Playgroud)
幸运的是,你可以解决这个问题.只需让你的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>
Run Code Online (Sandbox Code Playgroud)
这样您就可以在表单Mage::getModel('googleshopping/attribute_Link')
和表单中捕获实例化Mage::getModel('googleshopping/attribute_link')
.
为了将来参考,当您正在调试重写时,
Mage_Core_Model_Config::getGroupedClassName
Run Code Online (Sandbox Code Playgroud)
方法
app/code/core/Mage/Core/Model/Config.php
Run Code Online (Sandbox Code Playgroud)
是Magento查找类重写的地方.