2011-07-07 45 views
2

我一直在工作,其目的是擴展類Mage_Page_Block_Html_Head和改變getDefaultTitle的功能()我的第一個Magento的模塊上。簡單的權利?爲什麼我的自定義Magento模塊會覆蓋整個核心模塊併產生任何結果?

我在模塊目錄的本地/公司/元/塊目錄下創建一個名爲Title.php新的文件,並在Title.php是下面的代碼:

<?php 
class Company_Metadata_Block_Title extends Mage_Page_Block_Html_Head 
{ 

} 

我還沒有開始調整getDefaultTitle()的功能和我似乎已經錯過了這條船。

當我上傳新模塊時,它覆蓋了由Mage_Page_Block_Html_Head創建的頁面的整個Head內容,並且在我的Html中結束了空頭標記。像這樣:

<head></head> 

我在哪裏出錯了? Title.php中的上述代碼(或缺少)不應該讓擴展類做它的事情,直到被告知這麼做嗎?

下面是我的模塊配置文件:

<config> 

<modules> 
    <Company_Metadata> 
     <version>0.0.1</version> 
    </Company_Metadata> 
</modules> 

<global> 
    <blocks> 
     <page> 
      <rewrite> 
       <html_head>Company_Metadata_Block_Title</html_head> 
      </rewrite> 
     </page> 
    </blocks> 
</global> 

</config> 
+0

當你說的配置文件,這是整個等/ config.xml中,你對應用程序的/ etc /模塊XML/Company_Metadata.xml呢? – B00MER

+0

是的,以上是我整個config.xml存儲在本地/公司/元數據/ etc/config.xml中。 /app/etc/modules/Company_Metadata.xml也被構建和加載。 –

+0

看看http:// stackoverflow。com/questions/25253284/magento-block-override-stops-phtml-from-displays - 我做了一個菜鳥錯誤,根據類名正確地嵌套我的文件夾,當我結束了空 – Ted

回答

0

你可能想嘗試和申報的getTitle(),並返回父類的方法。此外,<modules>節點應該位於app/etc/modules/Company_Metadata.xml的應用程序中,而Magento將所有xml組合到一個大樹中,以實現一致性(明智)。在Head.php中還有許多其他的方法,看看這些是否仍然正常工作,如果是的話,那麼你的XML重寫工作正常。

<?php 
class Company_Metadata_Block_Title extends Mage_Page_Block_Html_Head 
{ 
    public function getTitle() 
    { 
     return parent::getTitle(); 
    } 
} 
+0

我剛試過你的建議,它仍然給我相同的結果,空頭標籤。這意味着Head.php中的所有方法都無法運行。這是否意味着我的重寫有問題? –

+0

試圖清除Magento的緩存?如果你已經在admin-> system-> configuration-> advanced – B00MER

+0

Cache中清除了Company_Metadata.xml文件,那麼你也可以驗證Magento正在加載你的模塊。從我可以看到模塊正在加載。 1)它顯示在配置 - >高級2)當我加載模塊時,它會破壞前端,因爲它將刪除或重寫頁面的所有頭部內容。因此沒有CSS或元數據呈現。 –

2

我的猜測是,你必須在config.xml中聲明你的塊類。事實上,Magento明白你想重寫頭,但沒有找到要使用的Block類。

請與本config.xml的嘗試:

<modules> 
    <Company_Metadata> 
     <version>0.0.1</version> 
    </Company_Metadata> 
</modules> 

<global> 
    <blocks> 


     <metadata> 
      <class>Company_Metadata_Block</class> 
     </metadata> 


     <page> 
      <rewrite> 
       <html_head>Company_Metadata_Block_Title</html_head> 
      </rewrite> 
     </page> 
    </blocks> 
</global> 

+0

謝謝vrnet。我會試一試,讓你知道我的結果。這說得通。問題:嵌套在部分的標籤是否應該是? –

+0

如果你的模塊使用Blocks(比如說Magento的「view-models」),你必須定義Magento在config.xml中如何訪問它們。因此,只要將php文件添加到模塊的/ Block文件夾中,就不會添加此節點。這對模型和幫手是一樣的。至於使用這個標準:你必須使用模塊名稱,小寫字母(元數據),而「公司」是你可以用於其他模塊的命名空間。對於Magento核心來說,命名空間是「Mage」,模塊是:時事通訊,目錄,客戶......所以Mage_Newsletter,Mage_Catalog,Mage_Customer等等。 –

+0

您不必強制使用小寫的「元數據」,這只是慣例。無論你選擇什麼,在指定類型時你都必須在佈局中使用; ''block type =「metadata/title」>' – clockworkgeek

1

確保你沒有輸出禁用爲你的模塊。重寫仍然有殘疾,但輸出模塊處理不能顯示任何東西,即使它調用父方法

0

這是一個老問題,但因爲我今天遇到了類似的問題,並固定它,我想我會分享我以供將來參考解決方案。

我有同樣的問題,原來問題是由一個事實,即編譯功能被打開造成的。因此,Magento會選擇配置更改,但不能加載新代碼,因爲它不是已編譯代碼的一部分。禁用編譯或再次運行編譯過程爲我解決了這個問題。