Sitecore多站点网站URL路由

时间:2014-10-09 07:50:40

标签: sitecore

我正在使用sitecore多站点。我有多个网站ex test1,test2,test3,test4。所有都在webconfig中配置。表示test1,test2,test3等。所以URL // test1将始终指向本地主文件夹,它将位于test1 / home中。

但根据我的要求,我有一个与所有网站分开的全局文件夹,但其中的页面对所有网站都是通用的。

例如:

Sitecore的/根/全球/分类/ A

Sitecore的/根/ TEST1

Sitecore的/根/ TEST2

Sitecore的/根/ TEST3

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

请帮忙。

2 个答案:

答案 0 :(得分:1)

我通常不喜欢重新发布我之前发布的确切答案,特别是当我在一周前发布原文时,但以下内容来自this post

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

  1. 查询字符串:test1/Category?categoryId={ID of Category}

    • 如果这是您选择的路线,那么我建议使用类别项目的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 == new ID(Request.QueryString["categoryId"]
      • 无论您使用哪一个,我建议将空检查添加到QueryString getter

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

  3. 虚拟物品
    • 这就是我认为您正在寻找的
    • 如果您从头开始做这项工作可能会很多,或者您可以使用the Wildcard Module
    • 如果从头开始,您将需要一个自定义管道和/或处理器来处理请求

答案 1 :(得分:1)

如果Wildcard Module不起作用,并且如果Sitecroe实例中的所有网站都是这种情况,您可以编写自定义项解析程序并在内置后立即将其插入httpBeginRequest管道中项目解析器。

这有点来自记忆,但应该让你开始:

namespace Example
{
    public class CategoryItemRewsolver : Sitecore.Pipelines.HttpRequest.HttpRequestProcessor
    {
        public override void Process(HttpRequestArgs args)
        {
            if (Sitecore.Context.Item != null) return; // Item has already been resolved

            if (args.Context.Request.Path.StartsWith("Category"))
            {
                Sitecore.Context.Item = Sitecore.Context.Database.GetItem("sitecore/Root/Global" + args.Context.Request.Path);
            }
        }
    }
}

您显然希望用自己的路径替换路径(并允许通过.config文件配置路径)。

然后将其修补到管道中:

<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/">
    <sitecore>
        <pipelines>
            <httpRequestBegin>
                <processor patch:after="*[@type='Sitecore.Pipelines.HttpRequest.ItemResolver, Sitecore.Kernel']" type="Example.CategoryItemResolver,Example" />
            </httpRequestBegin>
        </pipelines>
    </sitecore>
</configuration>