如何将 Sitecore 项目存储桶作为路径访问?



我在页面下有一个文件夹,该文件夹已将它存储 我需要通过路径访问存储桶项目并将其解析为自定义路径

例如: mysite/home/mypage/data/2019/12/25/04/45/obj1

应解析为: Mysite/home/mypage/obj1

我的代码应该搜索项目obj1,从这里获取标题,描述字段,然后我在我的视图上使用它们。

我提到了这篇文章: http://www.codeflood.net/blog/2013/07/18/item-buckets-and-urls/

并覆盖流程方法:

public class CustomItemResolver : HttpRequestProcessor
{
public override void Process(HttpRequestArgs args)
{
if (Context.Item == null)
{
var requestUrl = args.Url.ItemPath; // This always returns /nolayout
// remove last element from path and see if resulting path
is a bucket
var index = requestUrl.LastIndexOf('/');
if (index > 0) // always 0 and never goes ahead
{
...........
}
}
}

}

然后是链接管理器代码

public class CustomLinkManager : LinkProvider
{
public override string GetItemUrl(Sitecore.Data.Items.Item item,
UrlOptions options)
{
if (BucketManager.IsItemContainedWithinBucket(item))
{
var bucketItem = item.GetParentBucketItemOrParent();
if (bucketItem != null && bucketItem.IsABucket())
{
var bucketUrl = base.GetItemUrl(bucketItem, options);
if (options.AddAspxExtension)
bucketUrl = bucketUrl.Replace(".aspx", string.Empty);
return FileUtil.MakePath(bucketUrl, item.Name) + 
(options.AddAspxExtension ? ".aspx" : string.Empty);
}
}
return base.GetItemUrl(item, options);
}

}

当我运行代码时,我的 ItemResolver 中的 requestUrl 变量始终是/nolayout。我的存储桶项目是数据源,永远不会有布局。我该如何解决此问题?

你需要的是Mike Reynolds的代码更新。我讨厌只有链接的答案,但没有可以链接到的 github 存储库。此代码使用搜索从 URL 中删除存储桶文件夹。

注意:使用此代码,您不能有两个项目具有相同的项目名称。因为搜索会找到两个项目,而不仅仅是一个项目。

https://sitecorejunkie.com/2016/05/31/omit-sitecore-bucket-folder-item-names-from-page-item-urls/

最新更新