2012-09-07 70 views
3

我試圖重寫Mage_Catalog_Block_Product_Price_Template塊和模板,我的模塊中提供新的,覆蓋塊是確定通過設置配置:Overrriding Magento的模塊和模板

<global> 
    <blocks> 
     <catalog> 
      <rewrite> 
       <product_price>ABC_PriceX_Block_Price</product_price> 
      </rewrite> 
     </catalog> 
    </blocks> 
</global> 

而且新的塊被調用

<?php 

class ABC_PriceX_Block_Price extends Mage_Catalog_Block_Product_Price_Template { 

    protected function _construct() { 
     parent::_construct(); 

     Mage::log('I am in ABC block'); 
     $this->setTemplate('pricex/price.phtml'); 


     Mage::log('Template file is '. $this->getTemplateFile()); 
    } 

} 

但是我得到一個非常怪異的行爲,所以價格擋犯規了顯示在前端,和所有我在日誌文件中得到的是

2012-09-07T18:05:38+00:00 DEBUG (7): I am in ABC block 
2012-09-07T18:05:38+00:00 DEBUG (7): Template file is 

而且模板不呈現:

<p> 
<?php Mage::log('I am in ABC template'); ?> 
</p> 

我在這裏失去了一些東西?

+0

注意延長Mage_Core_Block_Template代替Mage_Catalog_Block_Product_Price_Template顯示舊價格模板「前臺\基地\ DEFAULT \模板\目錄/產品/ price.phtml」新塊ABC_PriceX_Block_Price這甚至weirder –

回答

7

你沒有提到的Magento版本,在香草的Mage_Catalog_Block_Product_Price_Template類,安裝Magento的1.7.0.1,儘管它的誤導名稱,模板塊類。

#File: app/code/core/Mage/Catalog/Block/Product/Price/Template.php 
class Mage_Catalog_Block_Product_Price_Template extends Mage_Core_Block_Abstract 
{ 
    ... 
} 

注意,從Mage_Core_Block_Abstract而不是Mage_Core_Block_Template延伸。

所以,因爲它是一個塊,你可以設置一個模板

$this->setTemplate('pricex/price.phtml'); 

不過這只是塊的魔法getset方法工作。同樣,當您撥打getTemplateFile時,Magento返回null,因爲您的區塊上沒有人叫setTemplateFile。 (而不是從Mage_Core_Block_Template,這實際上有一個定義getTemplateFile方法繼承塊。

你的主要問題是你治療Mage_Catalog_Block_Product_Price_Template作爲模板塊時,它不是一個模板的塊。這是由佈局備份更新XML代碼對同一個塊

<block type="catalog/product_price_template" name="catalog_product_price_template" /> 
+0

什麼是模板/非模板塊?在magento網站上提到的所有內容都是結構化的d內容塊 –

+0

模板塊是使用phtml模板呈現其內容的塊。非模板塊是使用_toHtml方法呈現模板的塊,並且由於其他原因已被插入到佈局中。 –

+1

好的答案 - 總是想知道爲什麼我不能grep price.phtml! – Theodores