如何在果园中为不同的区域创建menuItem alternate

时间:2015-02-19 19:30:33

标签: orchardcms orchardcms-1.8

我为名为MenuItemLink-main-menu-MainNavigation-MenuItem.cshtml的主菜单创建了一个替代品,因为我想在名为主导航的区域中以不同方式呈现菜单。 vs其他地方我在页面上使用相同的菜单,如页脚。我复制MenuItem形状并在每次运行时重命名它(MenuItemLink-main-menu-MainNavigation-MenuItem.cshtml)我因为下面的行而得到溢出。

var renderedMenuItemLink = Display(Model);

有人可以向我解释为什么会发生这种情况,以及为导航创建基于区域的形状的最佳方法。

1 个答案:

答案 0 :(得分:1)

您从一个形状(MenuItem)复制了标记并将其粘贴到另一个形状(MenuItemLink)。

  1. MenuItem调用MenuItemLink的显示
  2. 然后在MenuItemLink中为MenuItemLink调用Display - 这是一个无限循环。
  3. 为MenuItemLink添加备用内部主题:

    首先。为菜单小部件创建备用(Parts.MenuWidget.cshtml)

    @using Orchard.ContentManagement;
    @using Orchard.Widgets.Models;
    @{
        var widgetPart = ((IContent)Model.ContentItem).As<WidgetPart>();
        Model.Menu.Zone = widgetPart.Zone;
    }
    

    二。为菜单项(MenuItem.cshtml)创建备用项并添加一行(在行Model.Metadata.Type =&#34; MenuItemLink&#34 ;;之后)

    Model.Metadata.Type = "MenuItemLink";
    (Model as Orchard.DisplayManagement.Shapes.Shape).Metadata.OnDisplaying(action => 
        action.ShapeMetadata.Alternates.Add("MenuItemLink__Zone__" + (string)Model.Menu.Zone)
    );
    

    为MenuItem添加替代内部主题:

    首先。为菜单小部件创建备用(Parts.MenuWidget.cshtml)

    @using Orchard.ContentManagement;
    @using Orchard.Widgets.Models;
    @using Orchard.DisplayManagement.Shapes;
    @{
        var widgetPart = ((IContent)Model.ContentItem).As<WidgetPart>();
        var items = Model.Menu.Items as List<dynamic>;
        AddMenuItemAlternate(items, widgetPart.Zone);
    }
    @functions{
        public void AddMenuItemAlternate(List<dynamic> items, string zoneName)
        {
            foreach (var item in items)
            {
                item.Metadata.Alternates.Add("MenuItem__Zone__" + zoneName);
                var subitems = (List<dynamic>)Enumerable.Cast<dynamic>(item.Items);
                AddMenuItemAlternate(subitems, zoneName);
            }
        }
    }
    

    更新2015.08:

    我创建模块,为菜单,menuItem和菜单项链接形状添加小部件名称和区域名称。您可以从果园图库https://gallery.orchardproject.net/List/Modules/Orchard.Module.MainBit.Navigation

    下载一个