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

如何将Sitecore项目存储桶作为路径访问?,sitecore,Sitecore,我有一个文件夹在一个有扣子的页面下 我需要通过路径访问带扣的项目,并将其解析为自定义路径 例如: mysite/home/mypage/data/2019/12/25/04/45/obj1 应解决为: mysite/home/mypage/obj1 我的代码应该搜索项目obj1,从这里获取标题和描述字段,然后在视图中使用它们 我提到这篇文章: 并超越过程方法: public class CustomItemResolver : HttpRequestProcessor { public

我有一个文件夹在一个有扣子的页面下 我需要通过路径访问带扣的项目,并将其解析为自定义路径

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

应解决为: mysite/home/mypage/obj1

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

我提到这篇文章:

并超越过程方法:

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
        {
          ...........
        }
      }
    }
}

然后是LinkManagerCode

  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中删除bucket文件夹

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