我有这种树结构:
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; }
}
这工作正常,但现在我想只获得那些具有某些特定模板的子页面。请给我一些解决方案。
答案 0 :(得分:2)
看起来您的大部分代码都是正确的,但您还需要对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
属性(或重构您的代码,以便类引用自身),或者您可以使用&#34;得到所有后代查询(.//*[@@templateid={SideMenuModel-GUID}]
)虽然我建议您在此时使用内容搜索API。
您可以在博客文章中阅读有关Getting child items with Glass。
的更多信息