我正在使用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.
请帮忙。
答案 0 :(得分:1)
我通常不喜欢重新发布我之前发布的确切答案,特别是当我在一周前发布原文时,但以下内容来自this post。
Sitecore中管理的每个页面都是Sitecore项目。因此,您应该只能导航到播放器项目的名称。如果您试图在帖子中说明类别项目存储在全局而不是页面中,那么您可以选择以下选项:
查询字符串:test1/Category?categoryId={ID of Category}
Sitecore.Context.Database.GetItem(Request.QueryString["categoryId"])
categoryItems.FirstOrDefault(categoryItem => categoryItem["Category ID"] == Request.QueryString["categoryId"])
categoryItem.ID == new ID(Request.QueryString["categoryId"]
答案 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>