果园分别显示subnav链接

时间:2012-01-18 20:31:51

标签: orchardcms

我试图在布局(主题)中单独显示子空间链接。

我已经覆盖了仅显示“根”级导航链接的MenuItem.cshtml。但是现在我想弄清楚如何从Layout.cshtml中的Model访问Menu.Items。

我会将模型投射到哪个会暴露Menu.Items?

示例:产品1.0,支持2.0

查看产品页面时,您会看到 电子1.1 家具1.2 办公用品1.3

2 个答案:

答案 0 :(得分:1)

我没有使用高级菜单。其中有一些错误阻止我使用它。

我找到的解决方案并不是最漂亮的代码,需要重构,但这里是: 我渲染一个PartialView强制转换Model.Navigation

我想要第二个(子菜单显示)的Layout.cshtml代码 @ {Html.RenderPartial(" SubNavMenu",(IEnumerable)Model.Navigation);}

PartialView中的

代码

    @model IEnumerable<dynamic>

@{
    IEnumerable<dynamic> subNavLinks = null;
    string requestUrl = Request.Path.Replace(Request.ApplicationPath, string.Empty).TrimEnd('/').ToUpperInvariant();
    IEnumerable<dynamic> children = Model.FirstOrDefault(x => x.MenuName == "main").Items;
    var menuItems = children.Select(x => x.Item);
    var parent = menuItems.FirstOrDefault(x => x.Text.TextHint.Equals(requestUrl, StringComparison.InvariantCultureIgnoreCase));
    if(parent!=null)
    {
        subNavLinks = menuItems.Where(x => x.Position.StartsWith(parent.Position.Substring(0,1)) && x.Position.Length>1);
    }
}


<nav>
    <ul class="subNav">
    @if (subNavLinks != null)
    {
        foreach (var item in subNavLinks)
        {
            <li><a class="@className" href="@item.Href">@item.Text</a></li>
        }
    }
    </ul>
</nav>

答案 1 :(得分:0)

我不知道你想要达到什么目的,但我建议你看看Advanced Menu module:它具有易于使用的分层菜单和菜单小部件,你可以在你的布局中包含显示独立的菜单或子菜单很容易。