【发布时间】:2014-03-24 12:45:35
【问题描述】:
我对 Sitecore 中的存储桶项目有疑问。
我有以下结构:
我想在“测试”详细信息页面上创建一个按钮,该按钮可以返回到顶部存储桶“新闻概览”。通常我会这样做:
LinkManager.GetItemUrl(Sitecore.Context.Item.Parent)
这里的问题是直接父级是存储桶“44”而不是“新闻概览”。创建概览存储桶链接的最佳方式是什么?
【问题讨论】:
我对 Sitecore 中的存储桶项目有疑问。
我有以下结构:
我想在“测试”详细信息页面上创建一个按钮,该按钮可以返回到顶部存储桶“新闻概览”。通常我会这样做:
LinkManager.GetItemUrl(Sitecore.Context.Item.Parent)
这里的问题是直接父级是存储桶“44”而不是“新闻概览”。创建概览存储桶链接的最佳方式是什么?
【问题讨论】:
Item中有一个扩展方法,可以为你提供当前item的bucket item。
它位于Sitecore.Buckets.dll 程序集的Sitecore.Buckets.Extensions 命名空间中。
你可以这样使用它:
var bucketItem = Sitecore.Context.Item.GetParentBucketItemOrParent();
var urlToBucket = LinkManager.GetItemUrl(bucketItem);
您还可以使用 BucketManager 来检查一个项目是否包含在存储桶中:
BucketManager.IsItemContainedWithinBucket(Sitecore.Context.Item)
【讨论】:
您可以递归调用[Sitecore.Data.Items.Item].Parent 并每次执行检查,直到您找到具有模板 ID 的项目,该模板 ID 是您正在查找的模板 ID,或者与存储桶文件夹的模板 ID 不同。
或者,您也可以使用[Sitecore.Data.Items.Item].Axes.GetAncestors(),但这将按自上而下的顺序返回Item 的所有祖先。
在 Sitecore 7 中,父/子关系以及相互访问的方法和技术实际上并没有改变。因此,您在 Sitecore 6 中使用的任何技术在 Sitecore 7 中应该仍然可用。
【讨论】: