2016-06-23 8 views

答えて

4

単一のリンクプロバイダのみを設定でき、設定がソリューションのインスタンス/用途に適用されるため、これを達成するための手段は何もありません。

私はこれまで、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> 
+1

高品質の答えは、少量の添加チップをサイト、言語固有のURLを許可するhttp://sitecore.stockpick.nl/english/change-linkmanager-config/ –

1

私はあなたが箱から出して、これを行うことができわからないんだけど、簡単なLinkProviderでそれは可能なはずです。例:

  • あなたはbase.GetItemUrl(item, options)
  • を返すことによって出て、その現在のサイトが米国のサイトではありません場合は、現在のサイトに
  • を検出LinkProviderにおける言語
  • が含まれるように、デフォルトのURLオプションを設定しますその現在のサイトが米国のサイトであれば、あなたはあなたのパラメータではなくLanguageEmbedding.Neverを持つものに基づいて(「noLangOptions」)新しいUrlOptionsを作成して返しbase.GetItemUrl(item, noLangOptions)
2

デフォルトでは、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オプションを無効にする必要があります。

関連する問題