从一个站点导航到其他站点时维护语言cookie

时间:2016-11-28 16:25:58

标签: c# sitecore

我有一个网站可以说www.abc.com/和其他网站可以说www.abc.com/blog/ 请求如www.abc.com/pt-br,我想保留语言cookie, 然后cookie将有pt-br值如果然后请求去www.abc.com/blog/en这将保持en的cookie,我回到第一个站点它应该向我显示pt-br的cookie而不是en.I的cookie我想维护这个存储语言值的自定义cookie。我应该如何实现这一点,任何人都可以帮我解决这个问题?

2 个答案:

答案 0 :(得分:2)

如果www.abc.com和www.abc.com/blog是sitecore.config中的不同网站,那么sitecore会存储不同的语言cookie(网站#lang)。你不需要做任何事情。

要将www.abc.com/blog制作为不同的网站,您应该在网站中添加网站节点'部分如下:

<site name="AbcBlog" virtualFolder="/blog" physicalFolder="/blog" rootPath="/sitecore/content/Home/Blog" />

然后您的所需功能将通过sitecore开箱即用的功能实现

答案 1 :(得分:0)

正如Dheeraj所说,这主要是Sitecore的开箱即用功能。

最简单的方法是将博客和主站点保持为web.config中的单独<site>定义,这样他们就可以维护自己的cookie。即使两者都属于同一内容分支,也可以这样做,例如

<site name="MainSite"
      virtualFolder="/"
      physicalFolder="/"
      rootPath="sitecore/content/AbcSite" />
<site name="Blog"
      virtualFolder="/blog"
      physicalFolder="/blog"
      rootPath="sitecore/content/AbcSite" />

如果两个站点都设置了语言cookie,您可以使用类似

的链接从一个站点到另一个站点
var otherSiteLanguage = //retrieve language from cookie
var options = Sitecore.Links.LinkManager.GetDefaultUrlOptions();
options.Language = otherSiteLanguage;
Sitecore.Links.LinkManager.GetItemUrl(item, options);

显然上述情况仅适用于知道链接将从一个站点转移到另一个站点的情况,因此对于站点徽标链接等可能有用,但不适用于富文本字段中的链接。

如果博客和主站点由相同的<site>定义处理并且您无法更改,那么存储在cookie中的语言将保留在两个站点中,因此更改主站点的语言会发生变化博客的语言,反之亦然。在这种情况下,您可能最好提出某种语言回退方案,如果当前站点不支持cookie中保留的语言,则切换到替代语言。您可以通过创建LanguageResolver处理器的覆盖版本(Sitecore.Pipelines.HttpRequest.Sitecore.Pipelines.HttpRequest, Sitecore.Kernel)在httpRequestBegin管道中执行此操作。