【发布时间】:2015-04-21 16:28:28
【问题描述】:
我在 Sitecore 树中有一个包含存储桶项目的项目,因此无法使用普通的分层 API 访问它们。
是否有一个示例说明如何以编程方式循环遍历某个存储桶中的存储桶项目?
【问题讨论】:
我在 Sitecore 树中有一个包含存储桶项目的项目,因此无法使用普通的分层 API 访问它们。
是否有一个示例说明如何以编程方式循环遍历某个存储桶中的存储桶项目?
【问题讨论】:
您尝试循环浏览这些项目是否有特殊原因?我认为你最好使用搜索来找到你正在寻找的项目。我建议您查看 Sitecore 的文档以获取更多信息:Developer's Guide to Item Buckets and Search
【讨论】:
根据您对 Craig Taylor 的回复,我想说您应该执行索引搜索以从存储桶中获取所有项目,执行搜索,然后您可以遍历结果。
Craig 指出了这个文档Developer's Guide to Item Buckets and Search 应该很有用。
严格来说,存储桶只是隐藏了底层的树状结构,搜索的工作方式与 Sitecore 中的其他任何地方一样。您可以使用默认索引 sitecore_web_index / sitecore_master_index 或自定义索引。只要存储桶内容位于指定的索引位置之一内,就会包含它。
如果您不熟悉在 Sitecore 中进行搜索,可以从这篇文章开始:Sitecore 7 Search – Quick Start Guide
【讨论】:
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;
}
}
【讨论】:
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 的完整详细信息
【讨论】: