2012-08-06 52 views
4

使用Orchard cms 1.5.1我創建了一個模塊,其中包含從Web服務獲取列表的控制器。 我想在啓用此模塊時在主菜單中添加一個菜單項。對於我創建 的MainMenu如下:通過INavigationProvider將菜單項添加到主菜單,但它不會顯示?

public class MainMenu:INavigationProvider 
{ 
    public Localizer T { get; set; } 
    public String MenuName 
    { 
     get { return "main"; } 
    } 
    public void GetNavigation(NavigationBuilder builder) 
    { 
     builder.Add(menu => menu.Add(T("Fetched List"), "4", item => item.Action("Index", "FetchedList"))); 
    } 
} 

啓用我的模塊,導航功能就無法顯示菜單項。難道我做錯了什麼?

+0

當你在GetNavigation中放置一個斷點時,它會受到影響嗎? – 2012-08-06 12:25:49

+0

MainMenu中的GetNavigation不會受到影響。 另外,Orchard.UI.Navigation.NavigationManager中的IEnumerable BuildMenu(字符串menuName)僅作爲menuName命中'admin'。 – timoffei 2012-08-06 13:40:04

+1

由於沒有更多Orchard.Core.Navigation.Services.MainMenuNavigationProvider尋找「主要」,正如Piotr Szmyd在他的文章http://www.szmyd.com.pl/blog/building-multi-level- menu-for-orchard#.UB_jQPbN8u8我認爲實現INavigationProvider將菜單項連接到主菜單已經過時了。我應該使用IMenuProvider嗎? – timoffei 2012-08-06 15:35:48

回答

5

從Orchard 1.5.0起,INavigationProvider不用於在前端構建菜單(它仍然用於構建Dashboard的管理菜單)。您需要執行IMenuProviderINavigationFilterSee this post on David Hayden's blog for some pointers。您還可以在Orchard.ProjectionsOrchard.CulturePicker中找到很好的示例。

+0

實現INavigationFilter以添加菜單項似乎不是正確的做法,因爲它或者看起來像一個過濾器。 Orchard.Core.Navigation.Services.DefaultMenuProvider像應該那樣實現IMenuProvider,但是如果我實現它並且有多個菜單根,我的模塊會將項目附加到它們中的所有項目。有什麼建議麼? – timoffei 2012-08-06 16:17:39

+0

正確,'IMenuProvider'用於向菜單中添加全新的項目,而'INavigationFilter'用於擴展像NavigationQueryMenuItem這樣的內容項到它的組成部分(例如,如果使用投影來填充菜單的一部分) ,這真的取決於你想如何注入你的菜單項。 'IMenuProvider.GetMenu()'帶有'menu'參數,你不能用它來區分根菜單嗎? – mdm 2012-08-06 16:38:01

+0

將嘗試它。感謝Matt和Bertrand提供的寶貴意見。 – timoffei 2012-08-06 18:01:42