2012-12-17 26 views
0

我有兩個站點都由一個Sitecore解決方案提供服務,並且遇到以下代碼在兩個站點之一的URL中強制嵌入語言的問題,因爲以下代碼中的雙星號封閉的一段代碼來自基礎LinkProvider返回true(「lang」cookie鍵返回null)。爲什麼一個解決方案中的一個Sitecore站點有一個「lang」cookie鍵,另一個返回null?

private bool EmbedLanguage() 
{ 
    if (this._options.LanguageEmbedding == LanguageEmbedding.Always) 
    { 
     return true; 
    } 
    if (this._options.LanguageEmbedding == LanguageEmbedding.Never) 
    { 
     return false; 
    } 
    SiteContext site = Context.Site; 
    return ((site == null) || **((WebUtil.GetOriginalCookieValue(site.GetCookieKey("lang")) == null)** || this._options.EmbedLanguage(Context.Language))); 
} 

這隻爲兩個網站之一,而不是其他。 Web.config中linkManager中的languageEmbedding值是「asNeeded」。第一個(行爲)網站是多語言的,而另一個(不行爲)則不是。

目前尚不清楚爲什麼行爲人獲取其「朗」cookie集,而另一個不是。他們都分享了相當多的代碼,並且有問題的網站與原始版本沒有任何差異,除了佈局,新的子佈局等外,內容幾乎相同。

任何想法都會受到歡迎。也許這是真的很明顯,我失蹤了?

+0

澄清,這是「郎」的cookie值將返回null爲頑皮的網站,而不是關鍵(對不起,在當天晚些時候)。 – wildwend

+0

我會避免使用'asNeeded'。說實話,我不知道爲什麼這個設置存在。如果將此切換爲「始終」,它會有什麼區別嗎? – geedubb

回答

0


首先讓我澄清一下,如果我已經正確理解你的問題。
您有2個網站使用相同的代碼。 (多站點)
一種是多語言,它表現良好(設置朗曲奇) 另一種是單語言,它表現得很奇怪並且不設置郎曲奇。
您是如何實施多站點的?

它看起來像你正在使用提到的功能,在某些類的URL中嵌入語言。 因此建議我們已經實施的解決方法。

有時IE8刪除cookie,這就是我們將我們的多站點解決方案從languageEmbedding = asNeeded移動到從不。

我們覆蓋了LinkManager類,當我們爲網站生成網址時,如果網站是多語言,我們檢查放置在網站主頁上的設置,然後我們設置languageEmbedding = always。否則它從來沒有。

這樣我們就不會面臨語言cookies的問題。

是的,當它是單一語言網站並且languageEmbedding設置爲never時,它不會設置cookie。

0

我們最終解決這個問題的方法是在web.config中爲問題網站添加一個自定義的「embedLanguageInUrl」屬性,並將其設置爲「never」。然後,我們使用SiteContextExtensions類來公開該值(Sitecore.Context.Site.EmbedLanguageInUrl()),然後根據需要適當調整urlOptions.LanguageEmbedding值。似乎很好。 :)

相關問題