1

私は 2 つのサイトを両方とも 1 つの Sitecore ソリューションで提供していますが、次のコードが 2 つのサイトのいずれかの URL に言語の埋め込みを強制しているという問題があります。 true (「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)));
}

これは、2 つのサイトの一方に対してのみ行われ、他方に対しては行われません。Web.config の linkManager の languageEmbedding 値は「asNeeded」です。最初の (動作している) サイトは多言語であり、もう 1 つの (動作していない) サイトはそうではありません。

動作している 1 つが「lang」Cookie セットを取得し、もう 1 つがそうでない理由は明らかではありません。どちらもかなりの量のコードを共有しており、問題のあるサイトは、レイアウト、新しいサブレイアウトなどを除いて、元のサイトから大きく逸脱していません。中身はほとんど同じです。

どんなアイデアでも大歓迎です。おそらく、私が見逃しているのは本当に明らかなことでしょうか?

4

2 に答える 2

0


まず、あなたの質問を正しく理解しているかどうかを明確にさせてください。
同じコードで実行されている 2 つのサイトがあります。(Multi-Site)
1 つは Multi-Language で、正常に動作します (Lang cookie を設定します) もう 1 つは Single Language で、動作がおかしく、Lang cookie を設定しません。
マルチサイトをどのように実装しましたか?

上記の関数を使用して、一部のクラスの URL に言語を埋め込んでいるようです。そこで、私たちが実装した回避策を提案します。

IE8 が Cookie を削除することがあります。これが、マルチサイト ソリューションを languageEmbedding= asNeeded から Never に移動した理由です。

LinkManager クラスをオーバーライドし、サイトの URL を生成するときに、サイトが多言語の場合はサイトのホームページに配置された設定を確認し、languageEmbedding= を常に設定します。そうでなければ、それはすでに決してありません。

このようにして、言語 Cookie の問題に直面することはありません。

はい、単一言語サイトで languageEmbedding が never に設定されている場合、Cookie は設定されません。

于 2012-12-18T06:05:44.363 に答える
0

これを最終的に解決した方法は、カスタムの「embedLanguageInUrl」属性を web.config の問題サイトに追加し、それを「never」に設定することです。次に、SiteContextExtensions クラスを使用してその値を公開し (Sitecore.Context.Site.EmbedLanguageInUrl())、必要に応じて urlOptions.LanguageEmbedding 値を適切に調整しました。うまくいくようです。:)

于 2012-12-18T19:17:49.150 に答える