2012-07-26 70 views
0

如果我是對的,在Magento renderCategoriesMenuHtml()函數有助於在導航菜單欄中顯示「類別包括」菜單。類別菜單「不包含在導航欄中」

我想修改renderCategoriesMenuHtml()函數以顯示「不包括在導航菜單欄中的類別」菜單。

總之,我需要顯示具有屬性"Include in navigation menu"設置爲在管理面板沒有類別的菜單。

在此先感謝。

回答

2

Magento有一個工具可以改變或增加被稱爲類覆蓋或類重寫的類的功能。以下示例假定名稱空間爲「Custom」,模塊名稱爲「Nav」。

首先,註冊一個模塊:

<?xml version="1.0" encoding="UTF-8"?> 
<!-- app/etc/modules/whatever.xml --> 
<config> 
    <modules> 
     <Custom_Nav><!-- must match your namespace & module folder names --> 
      <active>true</active> 
      <codePool>local</codePool> 
     </Custom_Nav> 
    </modules> 
</config> 

基於上述,應用程序會尋找你的模塊配置文件:

<?xml version="1.0" encoding="UTF-8"?> 
<!-- app/code/local/Custom/Nav/etc/config.xml --> 
<config> 
    <global> 
     <blocks> 
      <catalog> 
       <rewrite> 
        <navigation>Custom_Nav_Block_Rewrite_Navigation</navigation> 
       </rewrite> 
      </catalog> 
     </blocks> 
    </global> 
</config> 

這樣做是重寫類名在塊創建工廠方法中。目錄導航塊添加到catalog.xml佈局更新XML(<block type="catalog/navigation" .../>)中。上面的xpath將導致類名映射到Custom_Nav_Block_Rewrite_Navigation而不是通常的Mage_Catalog_Block_Navigation,它是這個類將被實例化。

的最後一步是創建類的定義,從原來的類可維護性的緣故延伸和遵守DRY:

<?php 
/* app/code/local/Custom/Nav/Block/Rewrite/Navigation.php */ 

class Custom_Nav_Block_Rewrite_Navigation extends Mage_Catalog_Block_Navigation 
{ 
    //custom method overrides & additions belong here 
} 

清除配置& block_html高速緩存和變化應該是可見的。爲了驗證,通過管理面板使模板路徑提示+塊類名稱,或在網站根目錄創建一個簡單的腳本:

<?php 
/* test.php in Magento root folder */ 
ini_set('display_errors',true); 

include 'app/Mage.php'; 
Mage::setIsDeveloperMode(true); 
Mage::app(); 

var_dump(Mage::getConfig()->getBlockClassName('catalog/navigation')); 

瀏覽器指向http://site.com/test.php和輸出應該顯示改寫類的名稱。