Sitecoreの特定のサイトにのみ言語/ロケールを埋め込む方法は?Sitecoreの特定のサイトにのみ言語を埋め込む
のは、私は2つの言語を持っているカナダのサイトではhttp://exmaple.com
をされることについて、米国のサイトやURLがあるとしましょう、したがって、URLは次のようなものでなければなりません。
Sitecoreの特定のサイトにのみ言語/ロケールを埋め込む方法は?Sitecoreの特定のサイトにのみ言語を埋め込む
のは、私は2つの言語を持っているカナダのサイトではhttp://exmaple.com
をされることについて、米国のサイトやURLがあるとしましょう、したがって、URLは次のようなものでなければなりません。
単一のリンクプロバイダのみを設定でき、設定がソリューションのインスタンス/用途に適用されるため、これを達成するための手段は何もありません。
私はこれまで、Site Specific Link Provider for Multisite Implementations in Sitecoreを実装するために使用したソリューションをブログに書きました。このソリューションは、基本的にスイッチングリンクプロバイダーであり、それぞれが異なるサイトの構成が異なる複数のリンクプロバイダーを定義できます。
<linkManager>
<providers>
<add name="provider-site1" languageEmbedding="never" type="Sitecore.Links.LinkProvider, Sitecore.Kernel" ... />
<add name="provider-site2" languageEmbedding="always" type="Sitecore.Custom.Links.SpecificLinkProvider, Sitecore.Custom" ... />
</providers>
</linkManager>
そして、あなたのサイトの定義で使用するプロバイダを指定:
<sites>
<site name="site1" linkProvider="provider-site1" ... />
<site name="site2" linkProvider="provider-site2" ... />
<site name="site3" ... />
</sites>
このためすべてのコードのコードを見つけることができる
これは2つのリンク・プロバイダー構成を作成できるようになりますこのGithub Gist
また、Sitecore.Links.LinkProvider
から上書きして独自のリンクプロバイダを作成して上書きする電子GetItemUrl
方法:
public override string GetItemUrl(Sitecore.Data.Items.Item item, Sitecore.Links.UrlOptions options)
{
if (Sitecore.Context.Site.Name == "US-Site")
{
options.LanguageEmbedding = LanguageEmbedding.Never;
}
return base.GetItemUrl(item, options);
}
そして、デフォルトのリンク・プロバイダー置き換えるために、この中にパッチを適用:あなたはまた、特定のためのuseDisplayNameを切り替えることを検討することができますLanguageEmbedding横に
<linkManager>
<patch:attribute name="defaultProvider">custom</patch:attribute>
<providers>
<add name="custom" type="MyProject.SiteLinkProvider, MyProject" languageEmbedding="always" />
</providers>
</linkManager>
私はあなたが箱から出して、これを行うことができわからないんだけど、簡単なLinkProviderでそれは可能なはずです。例:
base.GetItemUrl(item, options)
LanguageEmbedding.Never
を持つものに基づいて(「noLangOptions」)新しいUrlOptionsを作成して返しbase.GetItemUrl(item, noLangOptions)
デフォルトでは、languageEmbedding
の設定はすべてのサイトでグローバルです。サイト固有のものにするには、デフォルトのSitecore.Links.LinkProvider
から継承したカスタムLinkProvider
を作成し、設定で指定する必要があります。ような何か:
<linkManager defaultProvider="custom">
<providers>
<clear/>
<add name="custom" type="MyNamespace.LinkProvider, AssemblyName" addAspxExtension="false" alwaysIncludeServerUrl="false" encodeNames="true" languageEmbedding="asNeeded" languageLocation="filePath"lowercaseUrls="false" shortenUrls="true" useDisplayName="false"/>
</providers>
</linkManager>
カスタムプロバイダは、コンテキストの部位に応じて(例えば「は常に」の値に)languageEmbedding
オプションを無効にする必要があります。
高品質の答えは、少量の添加チップをサイト、言語固有のURLを許可するhttp://sitecore.stockpick.nl/english/change-linkmanager-config/ –