2012-04-27 106 views
2

我正在使用Magento,我想重寫Mage_Catalog_Block_Product_Price,但社區codePool模塊已經重寫了該塊。我知道,在我的XML,我需要Magento重寫社區代碼池重寫

<config> 
    <global> 
     <blocks> 
      <WHAT_GOES_HERE?> 
       <rewrite> 
        <product_price>Display_Price_Block_Product_Price</product_price> 
       </rewrite> 
      </WHAT_GOES_HERE?> 
     </blocks> 

但我不知道什麼應該被放入classgroup節點(我已經標記WHAT_GOES_HERE?)社區模塊是沒有< [classgroup]>聲明,所以我不確定我錯過的節點中應該發生什麼。

在此先感謝您的幫助。

回答

4

所有的配置XML都以一種方式合併成一個DOM結構,這意味着衝突的xpaths將覆蓋它們的文本值。一個例子:

該社區模塊當前正在經由配置重寫解決類名:

<config> 
    <global> 
     <blocks> 
      <catalog> 
       <rewrite> 
        <product_price>Community_Module_Block_Example_Price</product_price> 
       </rewrite> 
      </catalog> 
     </blocks> 
    </global> 
</config> 

該框架使用Mage_Core_Model_Layout::createBlock()調用塊類,在這種情況下是catalog/product_price參數(注意這兩個字符串如何映射到配置)。社區模塊正在改變從該信息計算出的類名,並將其指向指定的類名,即Community_Module_Block_Example_Price。然後將該類名稱提供給PHP new以調用一個類。

你需要做的就是這個確切的配置複製到您的模塊配置 - 指定的塊類名 - 確保發生以下情況(重要!):

  1. 配置加載社區模塊的配置和
  2. 您的類從社區模塊的類擴展。

如何確保您的模塊配置在社區模塊之後加載?只需打開應用程序/ etc/modules中的社區模塊聲明文件,請注意<modules>節點下的節點名稱(在上例中,幾乎肯定是Community_Module),然後在您的模塊聲明文件中(也在app/etc/modules中),添加到您的模塊聲明:

<depends> 
    <Community_Module /> <!-- e.g. --> 
</depends> 

HTH

+0

HTH, 感謝您的幫助,我不知道該節點,但我敢肯定,會在方便將來很多次。 – Sean 2012-04-27 16:56:05