Sitecore多站点网站URL路由

Sitecore多站点网站URL路由,sitecore,Sitecore,我正在sitecore多站点上工作。我有多个网站,比如test1、test2、test3、test4。所有配置都是在webconfig中配置的。表示test1、test2、test3等。所以URL//test1将始终指向test1/home内部的本地主文件夹 但根据我的要求,我有一个全球文件夹,这是独立于所有网站,但其中的网页将是所有网站共同的 例: sitecore/Root/Global/Category/A sitecore/Root/test1 sitecore/Root/test2 s

我正在sitecore多站点上工作。我有多个网站,比如test1、test2、test3、test4。所有配置都是在webconfig中配置的。表示test1、test2、test3等。所以URL//test1将始终指向test1/home内部的本地主文件夹

但根据我的要求,我有一个全球文件夹,这是独立于所有网站,但其中的网页将是所有网站共同的

例:

sitecore/Root/Global/Category/A

sitecore/Root/test1

sitecore/Root/test2

sitecore/Root/test3

现在,如果我在//test1中,并且想要访问页面A,则无法获取页面A,URL应该是//test1/Category/A

请帮忙

我通常不喜欢重新发布我之前发布的准确答案,尤其是当我刚刚在一周前发布了原始答案时,但以下内容来自

Sitecore中管理的每个页面都是一个Sitecore项目。因此,您应该能够导航到播放器项目的名称。如果您试图在帖子中说类别项目存储在全局中,而不是作为页面,那么您可以选择以下选项:

  • 查询字符串:
    test1/Category?categoryId={Category的ID}

    • 如果这是您选择的路线,那么我建议使用类别项的Sitecore ID作为查询字符串参数的值
    • 如果您有其他ID,则将指定的ID放在那里,但是使用Sitecore ID最简单
    • 然后,您将使用查询字符串参数中指定的ID获取项目(或使用查询字符串参数中指定的类别ID获取项目,具体取决于您选择的路线),并在页面上显示该类别的数据
      • Sitecore.Context.Database.GetItem(Request.QueryString[“categoryId]”)
      • categoryItems.FirstOrDefault(categoryItem=>categoryItem[“Category ID”]==Request.QueryString[“categoryId”])
        • 请注意,这假定类别ID是一个字段,而不是Sitecore ID
        • 如果是Sitecore ID,则将lambda更改为使用
          categoryItem.ID==新ID(Request.QueryString[“categoryId”]
      • 无论使用哪一种,我建议向QueryString getter添加空检查

  • 次级布局参数
    • 如果使用此方法,查询字符串将不会更改,人们将无法从直接URL访问页面
    • 该过程与查询字符串的过程相同,只是使用了子布局参数
    • 请注意,您必须在父级子布局或Sitecore中设置这些内容(这意味着您为每个播放器都有一个单独的页面,即,这将是一个糟糕的解决方案)

  • 虚拟项目
    • 这才是我想你要找的
    • 如果你从头开始,或者你可以使用
    • 如果您从头开始,您将需要一个定制的管道和/或处理器来处理请求
  • 如果无法使用,并且Sitecroe实例中的所有站点都是这样,则可以编写自定义项解析器,并将其插入内置项解析器之后的httpBeginRequest管道中

    这是一种记忆,但应该让您开始:

    名称空间示例
    {
    公共类CategoryItemRewsolver:Sitecore.Pipelines.HttpRequest.HttpRequestProcessor
    {
    公共覆盖无效进程(HttpRequestArgs args)
    {
    if(Sitecore.Context.Item!=null)return;//项已被解析
    if(args.Context.Request.Path.StartsWith(“类别”))
    {
    Sitecore.Context.Item=Sitecore.Context.Database.GetItem(“Sitecore/Root/Global”+args.Context.Request.Path);
    }
    }
    }
    }
    
    显然,您希望用自己的路径替换路径(并可能允许通过.config文件配置路径)

    然后将其修补到管道中:

    
    
    听起来像是一个很好的候选,请建议我如何做。谢谢你的解决方案。但这不是我要找的。我要找的是我可以获取项目URL,然后根据需要自定义。实际上,这正是你要找的。这就是通配符模块和虚拟项目所做的。你可以创建一个假的URL实际上,指向您配置为指向的项目,而不是指向实际项目。