请允许其中一位magento专家帮助我。这一直让我疯狂!!!
我试图覆盖Mage_Catalog_Model_Product_Type_Price,我尝试的任何东西都不起作用。我之前已经做了好几次这样的事情,我对自己的代码是正确的有信心,但我显然错过了一些东西。
控制器工作正常,如果我实例化模型,它也可以正常工作。它似乎是实际的重写本身无法正常工作。
我使用的是Magento 1.5.1。
以下是我的模块配置文件中的代码:
<?xml version="1.0" encoding="utf-8"?>
<config>
<modules>
<MyNs_MyMod>
<version>0.1.0</version>
</MyNs_MyMod>
</modules>
<global>
<models>
<catalog>
<rewrite>
<product_type_price>MyNs_MyMod_Model_Price</product_type_price>
</rewrite>
</catalog>
</models>
</global>
<frontend>
<routers>
<mymod>
<use>standard</use>
<args>
<module>MyNs_MyMod</module>
<frontName>mymod</frontName>
</args>
</mymod>
</routers>
</frontend>
</config>
这是模型代码剥离到最低限度:
<?php
class MyNs_MyMod_Model_Price extends Mage_Catalog_Model_Product_Type_Price
{
public function getPrice($product = null) {
Mage::log('Made it into getPrice()');
return 0;
}
}
答案 0 :(得分:10)
这是猜测,但根据您的评论,您听起来已成功重写了Mage_Catalog_Model_Product_Type_Price
课程。 但是,Magento的重写系统不是你在Ruby / Python中看到的“真正的”鸭子打字/猴子修补。只有在核心代码通过类别Mage_Catalog_Model_Product_Type_Price
实例化 catalog/product_type_price
时,重写才有效。它不适用于作为继承自 Mage_Catalog_Model_Product_Type_Price
的类的实例的对象。
所以,请考虑这个
#File: app/code/core/Mage/Catalog/Model/Product/Type/Configurable/Price.php
<?php
class Mage_Catalog_Model_Product_Type_Configurable_Price extends Mage_Catalog_Model_Product_Type_Price
我的猜测是你正在加载的页面实例化Mage_Catalog_Model_Product_Type_Configurable_Price
。这就是为什么在单独实例化catalog/product_type_price
时你的重写似乎有效,但是当系统实例化catalog/product_type_configurable_price
时你的重写没有(也不能)被触发。
长话短说,请尝试重写catalog/product_type_configurable_price
模型,看看你是否有更多运气。
如果这不起作用,您需要追踪Magento核心代码实例化这些对象的位置,并调试正在进行的操作。为代码提供更多上下文可以帮助人们帮助您解决该问题。