我有这个树结构:
Page1
PageA
PageX
PageY
PageB
Page2
我想要 Page1 和 Page2 以及所有子页面。我创建了两个类。在一堂课中使用 sitecore 查询
[SitecoreQuery("../*[@@templateid={GUID}]", IsRelative = true)]
public virtual IEnumerable<ItemModel> Links { get; set; }
在其他 ItemModel 类中获取子页面
public class ItemModel
{
[SitecoreId]
public Guid Id { get; set; }
[SitecoreChildren]
public IEnumerable<SideMenuModel> Children { get; set; }
}
这工作正常,但现在我只想获取那些具有特定模板的子页面。请给我一些解决方案。
看起来大部分代码都是正确的,但您还需要对
Children
类上的 ItemModel
属性应用限制。
您可以在父模型上使用类似的
SitecoreQuery
:
public class ItemModel
{
[SitecoreId]
public Guid Id { get; set; }
[SitecoreQuery("./*[@@templateid={SideMenuModel-GUID}]", IsRelative = true)]
public virtual IEnumerable<SideMenuModel> ChildItems { get; set; }
}
或者您可以在
EnforceTemplate
类上使用 SideMenuModel
属性:
[SitecoreType(TemplateId = "GUID", EnforceTemplate = SitecoreEnforceTemplate.Template)]
public class SideMenuModel
{
[SitecoreId]
public Guid Id { get; set; }
}
public class ItemModel
{
[SitecoreId]
public Guid Id { get; set; }
[SitecoreChildren]
public virtual IEnumerable<SideMenuModel> ChildItems { get; set; }
}
既然你设置了
EnforceTemplate
,那么使用[SitecoreChildren]
属性意味着只有与模板id匹配的项目才会被返回,否则将被跳过。
如果您需要映射子级的子级,那么您还应该在
[SitecoreChildren]
类上添加 SideMenuModel
属性(或重构您的代码,以便类引用自身),或者您可以使用“获取所有后代查询(.//*[@@templateid={SideMenuModel-GUID}]
)”尽管我建议您此时使用 Content Search API。
您可以在博客文章中阅读有关 使用 Glass 获取子项目的更多信息。