2012-03-05 13 views
3

1つのSitecoreインストールから2つのサイトを実行したいと考えています。Sitecore言語複数のサイトを埋め込む

最初のサイトは英国英語のみですので、その言語をファイルパスに含めません。 languageEmbedding=never

2番目のサイトは複数の言語で作成され、その言語をファイルパスに含める必要があります。 languageEmbedding=always

複数のリンクマネージャを定義し、特定のリンクマネージャを使用するようにサイトを設定する方法はありますか?

答えて

5

私は、両方のシナリオをサポートするカスタムリンクマネージャを作成することが最善の方法であることを発見しました。次に、言語が埋め込まれているかどうかを定義するサポート設定を行います。

public class LanguageLinkProvider : LinkProvider 
{ 
    public override string GetItemUrl(Item item, UrlOptions urlOptions) 
    { 
     urlOptions.SiteResolving = Configuration.Settings.Rendering.SiteResolving; 
     string sites = ConfigurationManager.AppSettings["EmbedLanguageInUrl"]; 

     var splitSites = new List<string>(); 
     if (!string.IsNullOrEmpty(sites)) 
      splitSites = sites.Split(';').ToList(); 

     if (splitSites.Contains(urlOptions.Site.Name)) 
      urlOptions.LanguageEmbedding = LanguageEmbedding.Always; 
     else 
      urlOptions.LanguageEmbedding = LanguageEmbedding.Never; 

     return base.GetItemUrl(item, urlOptions); 
    } 
} 
3

デフォルトではありません。 しかし、LinkManagerはオーバーライド可能です。おそらく、サイトごとに異なる設定を選択し、これをオーバーライドされたLinkManagerにコーディングすることによって、動作を変更することができます。

+1

素晴らしい解決策!私は自分自身について考えることができる唯一の人です。 –