Magento - 模型覆盖不起作用

时间:2011-02-13 17:41:09

标签: magento

请允许其中一位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;
    }
}

1 个答案:

答案 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核心代码实例化这些对象的位置,并调试正在进行的操作。为代码提供更多上下文可以帮助人们帮助您解决该问题。