C# 嵌入多个站点的Sitecore语言

C# 嵌入多个站点的Sitecore语言,c#,asp.net,sitecore,sitecore6,C#,Asp.net,Sitecore,Sitecore6,我希望通过一个Sitecore安装运行两个站点 第一个网站将只在英国英语,因此我不会包括在文件路径的语言语言嵌入=从不 第二个网站将在多种语言,我需要包括在文件路径的语言语言嵌入=始终 是否有一种方法可以定义多个链接管理器并将站点配置为使用特定的链接管理器?没有,默认情况下没有。 但是LinkManager是可重写的。可能您可以通过为每个站点选择不同的配置并将其编码为覆盖的链接管理器来更改行为。我发现最好的方法是创建一个支持这两种方案的自定义链接管理器。然后有一个支持的配置设置,该设置定义是否嵌

我希望通过一个Sitecore安装运行两个站点

第一个网站将只在英国英语,因此我不会包括在文件路径的语言<代码>语言嵌入=从不

第二个网站将在多种语言,我需要包括在文件路径的语言<代码>语言嵌入=始终

是否有一种方法可以定义多个链接管理器并将站点配置为使用特定的链接管理器?

没有,默认情况下没有。
但是LinkManager是可重写的。可能您可以通过为每个站点选择不同的配置并将其编码为覆盖的链接管理器来更改行为。

我发现最好的方法是创建一个支持这两种方案的自定义链接管理器。然后有一个支持的配置设置,该设置定义是否嵌入该语言

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);
    }
}
公共类语言LinkProvider:LinkProvider
{
公共重写字符串GetItemUrl(项项项、UrlOptions、UrlOptions)
{
urlOptions.SiteResolving=Configuration.Settings.Rendering.SiteResolving;
string sites=ConfigurationManager.AppSettings[“EmbeddeLanguageInUrl”];
var splitSites=新列表();
如果(!string.IsNullOrEmpty(站点))
splitSites=sites.Split(“;”).ToList();
if(splitSites.Contains(urlpoptions.Site.Name))
urlOptions.LanguageEmbedding=LanguageEmbedding.Always;
其他的
urlOptions.LanguageEmbedding=LanguageEmbedding.Never;
return base.GetItemUrl(item,urlOptions);
}
}

很好的解决方案!我唯一能想到自己的人。