2012-03-05 83 views
3

我期待从一个Sitecore安装运行两个网站。Sitecore语言嵌入多个网站

第一个网站将只在英国英语,因此我不会在文件路径中包含该语言。 languageEmbedding=never

第二个站点将使用多种语言,我需要在文件路径中包含该语言。 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

伟大的解决方案!我能想到的唯一一个我自己。 – 2012-03-06 01:56:26