在多站点解决方案中,我使用以下解决方案,允许基于站点在不同的链接管理器之间切换: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不是正确的属性吗?
答案 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);
}