Umbraco 7 动态菜单
Umbraco 7 dynamic menu
美好的一天!
在 Umbraco 上工作并努力在 Umbraco 中创建动态菜单。
应使用 menuName 调用菜单 li。
它适用于第一个循环(称为 item.menuName 的静态菜单),但在第二个循环中不起作用 - node.menuName。 node.Name 有效,但 .menuName 无效。为什么?
谢谢!
var homePage = CurrentPage.AncestorsOrSelf(1).First();
var menuItems = homePage.Children.Where("UmbracoNaviHide == false");
<ul class="menu">
@foreach (var item in menuItems)
{
var childrenItems = item.Children.Where("UmbracoNaviHide == false");
<li class="@(CurrentPage.Id == item.Id ? "sel" : null)">
<a href="@item.Url"><h4>@item.menuName</h4></a>
@createSubmenu(childrenItems, item.Id)
</li>
}
</ul>
@helper createSubmenu(IEnumerable<IPublishedContent> nodes, int? parentId) {
if (nodes.Count() > 0){
<ul>
@foreach (var node in nodes)
{
var childrenItems = node.Children.Where("UmbracoNaviHide == false");
<li class="@(CurrentPage.Id == node.Id ? "sel" : null)">
<a href="@node.Url"><h5>@node.menuName</h5></a>
@createSubmenu(childrenItems, node.Id)
</li>
}
</ul>
}
}
当您不使用强样式视图时,UmbracoTemplatePage
的 CurrentPage
属性 是 dynamic
,这意味着 @item.menuItem
是可访问的。
然而,您的 createSubmenu
助手将动态转换为 IPublishedContent
,它没有成员 menuName
可用。您将需要使用 GetPropertyValue
方法:
@helper createSubmenu(IEnumerable<IPublishedContent> nodes, int? parentId)
{
if (nodes.Count() > 0)
{
<ul>
@foreach (var node in nodes)
{
var childrenItems = node.Children.Where("UmbracoNaviHide == false");
<li class="@(CurrentPage.Id == node.Id ? "sel" : null)">
<a href="@node.Url"><h5>@node.GetPropertyValue("menuName")</h5></a>
@createSubmenu(childrenItems, node.Id)
</li>
}
</ul>
}
}
美好的一天! 在 Umbraco 上工作并努力在 Umbraco 中创建动态菜单。 应使用 menuName 调用菜单 li。
它适用于第一个循环(称为 item.menuName 的静态菜单),但在第二个循环中不起作用 - node.menuName。 node.Name 有效,但 .menuName 无效。为什么?
谢谢!
var homePage = CurrentPage.AncestorsOrSelf(1).First();
var menuItems = homePage.Children.Where("UmbracoNaviHide == false");
<ul class="menu">
@foreach (var item in menuItems)
{
var childrenItems = item.Children.Where("UmbracoNaviHide == false");
<li class="@(CurrentPage.Id == item.Id ? "sel" : null)">
<a href="@item.Url"><h4>@item.menuName</h4></a>
@createSubmenu(childrenItems, item.Id)
</li>
}
</ul>
@helper createSubmenu(IEnumerable<IPublishedContent> nodes, int? parentId) {
if (nodes.Count() > 0){
<ul>
@foreach (var node in nodes)
{
var childrenItems = node.Children.Where("UmbracoNaviHide == false");
<li class="@(CurrentPage.Id == node.Id ? "sel" : null)">
<a href="@node.Url"><h5>@node.menuName</h5></a>
@createSubmenu(childrenItems, node.Id)
</li>
}
</ul>
}
}
当您不使用强样式视图时,UmbracoTemplatePage
的 CurrentPage
属性 是 dynamic
,这意味着 @item.menuItem
是可访问的。
然而,您的 createSubmenu
助手将动态转换为 IPublishedContent
,它没有成员 menuName
可用。您将需要使用 GetPropertyValue
方法:
@helper createSubmenu(IEnumerable<IPublishedContent> nodes, int? parentId)
{
if (nodes.Count() > 0)
{
<ul>
@foreach (var node in nodes)
{
var childrenItems = node.Children.Where("UmbracoNaviHide == false");
<li class="@(CurrentPage.Id == node.Id ? "sel" : null)">
<a href="@node.Url"><h5>@node.GetPropertyValue("menuName")</h5></a>
@createSubmenu(childrenItems, node.Id)
</li>
}
</ul>
}
}