2014-03-30 101 views
0

我需要重寫一個Magento核心塊文件,其完整路徑爲app/code/core/Mage/Core/Block/Template.php,以便重寫getTemplateFile()函數。 我沒有重寫它們的問題,但結果很奇怪。在getTemplateFile()函數中我有$this->getTemplate(),它返回一個模板。當我在覈心塊功能中使用print_r($this->getTemplate())時,它爲我提供了所有正在加載的PHTML,而在重寫的塊中,我只獲得了其中的一部分。你有什麼想法爲什麼會發生這種情況?我正在使用Magento CE 1.8.1.0。Magento重寫Core/Block/Template.php(Magento CE 1.8.1.0)

回答

1

您不能在Magento中重寫block/model/helper的父類,只能重寫特定的實例。

下面是Magento的類重寫的工作原理。每當核心Magento代碼(以及編碼良好的模塊)實例化一個對象時,他們都會使用工廠方法。

$layout->createBlock('core/template'); 

core/template string是一個類的別名。 Magento使用它來查找要使用的實際類名。默認情況下,這是Mage_Core_Block_Template。當你創建一個重寫,你告訴Magento

嘿,每當你創建一個core/template塊對象?改爲使用我的班級。

問題? Magento中有很多塊,其中core/template繼承。當Magento的實例,這些

$layout->createBlock('page/html_head') 

它解析爲類Mage_Page_Block_Html_Head,從核心模板類

#File: app/code/core/Mage/Page/Block/Html/Head.php 
class Mage_Page_Block_Html_Head extends Mage_Core_Block_Template 
{ 
} 

換句話說繼承之一,有沒有辦法重寫系統瞭解你換在core/template類。

所以,當你說

核心區塊功能

,它給了我所有正在加載的PHTMLs,而在重寫塊我只得到其中的一些

這聽起來就像您看到的core/template塊的PHTML一樣,但跳過了從Mage_Core_Block_Template繼承的任何塊。