2011-02-13 120 views
2

請能幫助我這個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; 
    } 
} 
+0

當你實例化Mage :: getModel('catalog/product_type_price')時會發生什麼?你得到一個物體嗎?如果是這樣,它的課程是什麼? – 2011-02-13 17:55:36

回答

10

這是一個猜測在這裏,但根據您的評論它聽起來像你已經成功地重寫了Mage_Catalog_Model_Product_Type_Price類。 但是,Magento的重寫系統並不是你在Ruby/Python中看到的「真正的」鴨子打字/猴子打補丁。只有核心代碼通過類別別名catalog/product_type_price實例化Mage_Catalog_Model_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核心代碼實例化這些對象的位置,並調試發生了什麼。爲您的代碼提供更多的上下文可以幫助這裏的人們幫助您解決這個問題。