乌节CMS:修改菜单项交替并遍历项目(Orchard CMS: Modifying a menu i

2019-10-19 03:06发布

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

我认为我必须要拿出我的是这样的Parts.MenuWidget.cshtml备用模板。

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

我该怎么做,在果园?

Answer 1:

这是相当简单的。

你可以先创建一个替代你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.cshtml创建一个备用,并期待在这一部分:

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

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

    @tag.EndElement
}


文章来源: Orchard CMS: Modifying a menu item alternate and iterating over the items