Orchard CMS:修改菜单项,交替并迭代项目

时间:2013-12-11 03:44:22

标签: asp.net razor orchardcms

假设我从管理面板创建了一个名为“主菜单”的菜单,我需要自定义默认标记,例如假设我想修改/替换<ul><li>以及周围的<article><nav>标记。

我认为我必须在Parts.MenuWidget.cshtml备用模板中提出类似的内容。

<ul class="a b c">
    for each item in menuItems:
        display("<li>" + item + "</li>")
    end
</ul>

我如何在Orchard做到这一点?

1 个答案:

答案 0 :(得分:3)

这很简单。

您可以先为MenuWidget创建一个替代方案,如下所示:

<强> Parts.MenuWidget-MyZoneName.cshtml

<nav>
    <div class="logo">
        @Html.Partial("_Logo")
    </div>
    <ul>
        @*Display all the stuff added in the admin*@
        @DisplayChildren(Model.Menu)

        @*Add additional stuff. Of course you could also add it as MenuItem to the Menu-Model*@
        @if ( Request.IsAuthenticated )
        {
            if ( Authorizer.Authorize(StandardPermissions.AccessAdminPanel) )
            {
                <li>
                    <a href="/Admin">
                        Admin
                    </a>
                </li>
            }
            <li>
                <a href="~/Example1">
                    Extra1
                </a>
            </li>
        }
        else
        {
            <li>
                <a href="~/Example2">
                    Extra2
                </a>
            </li>
        }
    </ul>
</nav>

然后继续为MenuItems做类似的事情。例如:

<强> MenuItemLink.cshtml

<a href="@Model.Href" class="my-super-cool-custom-link">@Model.Text</a>

值得一提的另一件事是你可以只为上面的MenuItemLink提供特定形状的替代品,或者只为基本的MenuItem形状提供替代,然后将其用于存在的每个MenuItem类型。

(也许那些不是最好的例子,但我想他们会做这个工作;)

<强>更新: 要删除/修改标签,您可以为MenuItem.cshtml创建一个替代品并查看此部分:

if (HasText(renderedMenuItemLink)) 
{
    var tag = Tag(Model, "li");
    @tag.StartElement
    @renderedMenuItemLink

    if (items.Any()) 
    {
        <ul>
            @DisplayChildren(Model)
        </ul>
    }

    @tag.EndElement
}