【问题标题】:Filter in Sitecore Children in Sitecore在 Sitecore 中筛选子项
【发布时间】:2018-02-22 13:03:39
【问题描述】:

我有这个树形结构:

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; }
}

这工作正常,但现在我只想获取那些具有特定模板的子页面。请给我一些解决方案。

【问题讨论】:

  • 我可以询问您的联系方式(例如Skype、电子邮件等)。我想学习网站核心。我还是个初学者

标签: sitecore glass-mapper


【解决方案1】:

看起来您的大部分代码都是正确的,但您还需要对 ItemModel 类的 Children 属性应用限制。

您可以在父模型上使用SitecoreQuery:

public class ItemModel
{
    [SitecoreId]
    public Guid Id { get; set; }

    [SitecoreQuery("./*[@@templateid={SideMenuModel-GUID}]", IsRelative = true)]
    public virtual IEnumerable<SideMenuModel> ChildItems { get; set; }
}

或者您可以在 SideMenuModel 类上使用 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的项目,否则会被跳过。

如果您需要映射子代的子代,那么您也应该在 SideMenuModel 类上添加 [SitecoreChildren] 属性(或重构代码以便类引用自身),或者您可以使用“获取所有后代查询 (@987654333 @) 虽然我现在建议您使用 Content Search API。

您可以在博文中了解更多关于 Getting child items with Glass 的信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-13
    • 1970-01-01
    • 1970-01-01
    • 2010-10-13
    • 2011-05-04
    相关资源
    最近更新 更多