假设我从管理面板创建了一个名为“主菜单”的菜单,我需要自定义默认标记,例如假设我想修改/替换<ul>
,<li>
以及周围的<article>
和<nav>
标记。
我认为我必须在Parts.MenuWidget.cshtml
备用模板中提出类似的内容。
<ul class="a b c">
for each item in menuItems:
display("<li>" + item + "</li>")
end
</ul>
我如何在Orchard做到这一点?
答案 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
}