Sitecore链接管理器URL选项未设置站点解析

时间:2015-04-21 13:57:15

标签: sitecore sitecore7.2

在多站点解决方案中,我使用以下解决方案,允许基于站点在不同的链接管理器之间切换:http://thegrumpycoder.com/post/78684655662/sitecore-pipeline-enabled-linkprovider

这似乎按预期工作。我遇到的问题是,对于以下配置,siteResolving未设置为true:

<linkManager defaultProvider="overridesitecore">
  <providers>
    <clear />
     ...
     <add name="someSiteSpecificLinkManager" type="Sitecore.Links.LinkProvider, Sitecore.Kernel" addAspxExtension="false" alwaysIncludeServerUrl="true" encodeNames="true" languageEmbedding="always" languageLocation="filePath" lowercaseUrls="true" shortenUrls="true" useDisplayName="false" siteResolving="true"  />
     ...
  </providers>
</linkManager>

我已经切换了一些其他设置,只是为了确保他们会更改链接管理器的默认网址选项,而他们确实如此。 siteResolving不是正确的属性吗?

1 个答案:

答案 0 :(得分:8)

siteResolving没有应用于链接管理器,这是一个长期存在的问题,无论它是否正确配置。

解决方案是在您的提供商中应用该设置:

public class SiteResolvingLinkProvider : LinkProvider
{
    public override UrlOptions GetDefaultUrlOptions()
    {
        UrlOptions urlOptions = base.GetDefaultUrlOptions();
        urlOptions.SiteResolving = Settings.Rendering.SiteResolving;
        return urlOptions;
    }
}

另请参阅:http://reasoncodeexample.com/2012/08/09/sitecore-cross-site-links/

听起来你有多个提供商,并且你试图在每个提供商上独立控制设置,对吗?在这种情况下,您可以尝试在链接提供程序配置上提供siteResolving属性(如您所示),然后将该配置读入LinkProvider上的属性:

public bool SiteResolving { get; set; }

public override void Initialize(string name, NameValueCollection config)
{
    base.Initialize(name, config);
    SiteResolving = MainUtil.GetBool(config["siteResolving"], true);
}