2012-09-26 19 views
1

我想在例如一個單一的方法中改變一行代碼。班級Mage_Reports_Model_Resource_Product_Collection。最簡單的方法似乎是整個類文件複製到app/code/local/...,但後來我有更換原來的類,而不是覆蓋的方法。如何用盡可能少的複製粘貼覆蓋Magento模型類?

我如何可以創建自例如繼承一個新的類Mage_Reports_Model_Resource_Product_Collection並只覆蓋一種方法?並且還告訴Magento使用我的新課程而不是原來的課程。

+0

創建模塊或將您的覆蓋方法添加到其中一個使用的模塊。或者,您可以在'app/design'中編輯模板文件,您的代碼正在調用。 – doktorgradus

+0

你應該閱讀有關在Magento類重寫,這裏的鏈接艾倫風暴的博客 - http://alanstorm.com/magento_upgrade_rewrite_override –

+0

謝謝,我已經試過了,但不知道如何重寫上面提到的類。 –

回答

1

這裏是工作的代碼重寫產品集合:

<global> 
    <models> 
     <reports_resource> 
      <rewrite> 
       <product_collection>Company_ModelName_Model_Resource_Product_Collection</product_collection> 
      </rewrite> 
     </reports_resource> 
    </models> 
</global> 

應該爲Mage::getResourceModel('reports/product_collection')調用工作。

是的,我沒有包括<config>標籤,我認爲你應該已經有<global>一個,所以我覺得沒有必要。

+0

這應該是XML定義和工廠調用中的'reports',而不是'catalog'。 –

+0

謝謝@尤爾根!我錯過了它是報告模塊產品收集的事實,而不是目錄一。我已經修復了回覆 –

+0

經過一段時間的調試之後,似乎這個類沒有通過'Mage :: getResourceModel'加載,而是被例如'Mage_Reports_Model_Resource_Product_Ordered_Collection' ...因爲我想修改超類,這是否意味着我們正在尋找多繼承類型的情況? –

0

理論上該模型的改寫將...

<config> 
    <global> 
     <models> 
      <reports> 
       <rewrite> 
        <resource_product_collection>Namespace_Extension_Model_Resource_Product_Collection</resource_product_collection> 
       </rewrite> 
      </reports> 
     </models> 
    </global> 
</config> 

我從來沒有親自改寫資源模型的,所以我也不敢保證它會奏效。這將非常依賴於集合如何加載。