迭代Sitecore存储桶项目

时间:2015-04-21 16:28:29

标签: c# sitecore sitecore7

我在Sitecore树上有一个包含存储桶项的项目,因此无法使用普通的分层API访问它们。

是否有一个如何以编程方式循环某个存储桶中的存储桶项目的示例?

4 个答案:

答案 0 :(得分:1)

您是否有特殊原因想要遍历这些项目?我认为你最好利用搜索来找到你想要的东西。我建议您查看Sitecore的文档以获取更多相关信息:Developer's Guide to Item Buckets and Search

答案 1 :(得分:1)

根据您对克雷格泰勒的回应,我会说您应该执行索引搜索以获取存储桶中的所有项目,执行搜索,然后您可以循环搜索结果。

Craig指出了这个文档Developer's Guide to Item Buckets and Search,它应该是有用的。

严格来说,存储桶只隐藏底层树结构,搜索工作就像Sitecore中的任何其他地方一样。您可以使用默认索引sitecore_web_index / sitecore_master_index或自定义索引。只要存储桶内容位于指定的索引位置之一内,就会包含存储桶内容。

如果您不熟悉Sitecore中的搜索,那么本文就是一个很好的开始:Sitecore 7 Search – Quick Start Guide

答案 2 :(得分:1)

    public List<T> GetAllItemsFromBucket(string bucketPath)
    {
        var index = ContentSearchManager.GetIndex("content_index");
        using (var context = index.CreateSearchContext())
        {
            var results = context.GetQueryable<T>().Where(x => x.Path.StartsWith(bucketPath)).ToList();
            foreach (var result in results) _service.Map(result);
            return results;
        }
    }

答案 3 :(得分:1)

Sitecore中的所有内容都被视为项目。因此,即使您有配置项目存储桶,并且如果您尝试以编程方式访问或迭代它,您也可以正常方式执行此任务。

如果您正在搜索项目存储区中的项目,那么可能您可以使用以下代码搜索内容。

var itemBuckets= Sitecore.Context.Database.GetItem(bucketPath);
  if (itemBuckets!= null && BucketManager.IsBucket(itemBuckets))
  {     
     using (var searchContext = ContentSearchManager.GetIndex(itemBuckets as IIndexable).CreateSearchContext())
    {
        var result = searchContext.GetQueryable<SearchResultItem().Where(x => x.Name == itemName).FirstOrDefault();
        if(result != null)
            Context.Item = result.GetItem();
    }
  } 

查看我的博客,了解Configuring Sitecore Item Buckets

的完整详情