在 Sitecore 中过滤 Sitecore 子项
Filter in Sitecore Children in Sitecore
我有这个树结构:
Page1
PageA
PageX
PageY
PageB
Page2
我想要 Page1 和 Page2 以及所有子页面。我创建了两个 classes。在一个 class 中使用 sitecore 查询
[SitecoreQuery("../*[@@templateid={GUID}]", IsRelative = true)]
public virtual IEnumerable<ItemModel> Links { get; set; }
在其他 ItemModel 中 class 获取子页面
public class ItemModel
{
[SitecoreId]
public Guid Id { get; set; }
[SitecoreChildren]
public IEnumerable<SideMenuModel> Children { get; set; }
}
这工作正常,但现在我只想获取那些具有特定模板的子页面。请提供一些解决方案。
看起来您的大部分代码都是正确的,但您还需要对 ItemModel
class 上的 Children
属性 应用限制。
您可以在 parent 模型上使用 SitecoreQuery
:
public class ItemModel
{
[SitecoreId]
public Guid Id { get; set; }
[SitecoreQuery("./*[@@templateid={SideMenuModel-GUID}]", IsRelative = true)]
public virtual IEnumerable<SideMenuModel> ChildItems { get; set; }
}
或者您可以在 SideMenuModel
class:
上使用 EnforceTemplate
属性
[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的项目,否则将被跳过。
如果您需要映射 children 的 children 那么您应该在 SideMenuModel
class 上添加 [SitecoreChildren]
属性(或者重构您的代码,以便 class 引用自身)或者您可以使用“获取所有后代查询 (.//*[@@templateid={SideMenuModel-GUID}]
),尽管我建议您此时使用内容搜索 API。
您可以在博客 post 中阅读有关 Getting child items with Glass 的更多信息。
我有这个树结构:
Page1
PageA
PageX
PageY
PageB
Page2
我想要 Page1 和 Page2 以及所有子页面。我创建了两个 classes。在一个 class 中使用 sitecore 查询
[SitecoreQuery("../*[@@templateid={GUID}]", IsRelative = true)]
public virtual IEnumerable<ItemModel> Links { get; set; }
在其他 ItemModel 中 class 获取子页面
public class ItemModel
{
[SitecoreId]
public Guid Id { get; set; }
[SitecoreChildren]
public IEnumerable<SideMenuModel> Children { get; set; }
}
这工作正常,但现在我只想获取那些具有特定模板的子页面。请提供一些解决方案。
看起来您的大部分代码都是正确的,但您还需要对 ItemModel
class 上的 Children
属性 应用限制。
您可以在 parent 模型上使用 SitecoreQuery
:
public class ItemModel
{
[SitecoreId]
public Guid Id { get; set; }
[SitecoreQuery("./*[@@templateid={SideMenuModel-GUID}]", IsRelative = true)]
public virtual IEnumerable<SideMenuModel> ChildItems { get; set; }
}
或者您可以在 SideMenuModel
class:
EnforceTemplate
属性
[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的项目,否则将被跳过。
如果您需要映射 children 的 children 那么您应该在 SideMenuModel
class 上添加 [SitecoreChildren]
属性(或者重构您的代码,以便 class 引用自身)或者您可以使用“获取所有后代查询 (.//*[@@templateid={SideMenuModel-GUID}]
),尽管我建议您此时使用内容搜索 API。
您可以在博客 post 中阅读有关 Getting child items with Glass 的更多信息。