2017-09-13 53 views
0

我有這樣的樹形結構:過濾器在Sitecore的

Page1 
    PageA 
    PageX 
    PageY 
    PageB 
Page2 

我想1和Page 2,以及所有子頁面。我創建了兩個類。在一類使用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; } 
} 

這是工作正常,但現在我只希望得到誰擁有一些特定的模板的子頁面。請爲我提供一些解決方案。

回答

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

或者你可以使用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的項目,否則它們將被跳過。

如果你需要映射,那麼你應該在你的SideMenuModel類添加[SitecoreChildren]財產以及孩子的孩子(或重構你的代碼,因此類引用本身),或者你可以使用「獲取所有後代查詢(.//*[@@templateid={SideMenuModel-GUID}])雖然我會建議你在這一點上他內容搜索API

你可以在博客中看到更多關於Getting child items with Glass的信息