在 Umbraco 7.8.1 中按名称获取子节点
Get child node by name in Umbraco 7.8.1
我的内容结构是:
-Home (the site root node)
-About Us
-Our Sevice1
-Our Sevice2
-Our Sevice3
我为我们的服务创建了一个宏。
在宏观上,我想要我们的服务 1、我们的服务 2、我们的服务 3……
但是在列表变量 About Us 中也来了,但我不想要它
我只想要我们子节点的服务名
var list= CurrentPage.Children();
关于我们也出现在列表中,但我不想要它。
您在集合中看到 About Us
页面的原因是因为您使用了 Children
方法。
使用 Children
方法,您要求父节点向下遍历一级的直接子节点。因此,在这种情况下,您要求主页的所有直接子级,以便按预期工作。
您要实现的是所有 Service
个节点的集合。要做到这一点,您可以这样做。
确保您的服务节点具有单独的文档类型(例如文档类型 Service Page
)。
然后您可以进行以下操作:
var servicePages = CurrentPage.ServicePages;
您可以在此处查看相关文档:
https://our.umbraco.org/documentation/reference/querying/dynamicpublishedcontent/collections
但是所有这些都是使用动态语法,这将在未来版本的 Umbraco 中删除。所以我建议你去使用强类型语法。
然后可以通过以下方式更改:
var servicePages = Model.Content.Children.Where(x => x.DocmentTypeAlias == "servicePage");
这样做是获取您所在当前页面的 IPublishedContent
对象,即 主页 然后获取所有具有文档类型的子项servicePage
.
类型的别名
像@Mivaweb 提到的那样,最好不要使用动态(我认为除了将来被删除之外,为了性能)。
但是,我认为您不必创建单独的文档类型,尽管那样也行得通。 Where 方法的谓词应该处理其他表达式,例如:
var servicePages = Model.Content.Children.Where(x => x.Name.StartsWith("Our Sevice"));
我的内容结构是:
-Home (the site root node) -About Us -Our Sevice1 -Our Sevice2 -Our Sevice3
我为我们的服务创建了一个宏。 在宏观上,我想要我们的服务 1、我们的服务 2、我们的服务 3…… 但是在列表变量 About Us 中也来了,但我不想要它 我只想要我们子节点的服务名
var list= CurrentPage.Children();
关于我们也出现在列表中,但我不想要它。
您在集合中看到 About Us
页面的原因是因为您使用了 Children
方法。
使用 Children
方法,您要求父节点向下遍历一级的直接子节点。因此,在这种情况下,您要求主页的所有直接子级,以便按预期工作。
您要实现的是所有 Service
个节点的集合。要做到这一点,您可以这样做。
确保您的服务节点具有单独的文档类型(例如文档类型 Service Page
)。
然后您可以进行以下操作:
var servicePages = CurrentPage.ServicePages;
您可以在此处查看相关文档:
https://our.umbraco.org/documentation/reference/querying/dynamicpublishedcontent/collections
但是所有这些都是使用动态语法,这将在未来版本的 Umbraco 中删除。所以我建议你去使用强类型语法。
然后可以通过以下方式更改:
var servicePages = Model.Content.Children.Where(x => x.DocmentTypeAlias == "servicePage");
这样做是获取您所在当前页面的 IPublishedContent
对象,即 主页 然后获取所有具有文档类型的子项servicePage
.
像@Mivaweb 提到的那样,最好不要使用动态(我认为除了将来被删除之外,为了性能)。
但是,我认为您不必创建单独的文档类型,尽管那样也行得通。 Where 方法的谓词应该处理其他表达式,例如:
var servicePages = Model.Content.Children.Where(x => x.Name.StartsWith("Our Sevice"));