2014-09-24 71 views
0

我在Sitecore中的ExpandDynamicLinks存在问题。Sitecore LinkManager ExpandDynamicLinks无法解析站点URL

我使用以下方法通过truesiteResolving。问题是该网站没有按照承诺解决。

bodyExpandedLinks = Sitecore.Links.LinkManager.ExpandDynamicLinks(email.Body.Value, true); 

我没有在我的供应商设置为永不解决网站,因为这是我想要的,除了该邮件正文上方的整个网站。

alwaysIncludeServerUrl="false" 

有人知道如何强制吗?

谢谢...

回答

0

在拨打ExpandDynamicLinks之前,可能需要检查AlwaysIncludeServerUrl是否设置为False。如果它是假的,你可以明确地呼叫Sitecore.Links.UrlOptions.DefaultOptions.AlwaysIncludeServerUrl = true,然后在呼叫ExpandDynamicLinks后将它重新设置为False。

+0

此属性是只读的:/ “属性或索引‘Sitecore.Links.LinkManager.AlwaysIncludeServerUrl’不能被分配到 - 它是只读” – RobertoBr 2014-09-25 13:19:03

+0

更新了我的答案。不知道这是否会工作,但可能值得一试 – 2014-09-26 02:48:50

+0

这是行得通的!并且最好有一个新的linkManager配置只包含服务器url。谢谢 – RobertoBr 2014-09-26 20:15:43

0

我找到了一种替代方法。

我确实添加了一个额外的链接提供程序,它具有相同的配置,但我设置为true的alwaysIncludeServerUrl。

<add name="sitecore_expandlinks" alwaysIncludeServerUrl="true" (...) > 

然后我得到了使用API​​的提供者。

bodyExpandedLinks = Sitecore.Links.LinkManager.Providers["sitecore_expandlinks"].ExpandDynamicLinks(email.Body.Value, true); 

如果其他人有一个更具凝聚力的选择我将非常感激

感谢。

0

我知道这篇文章是用sitecore7标记的,但我想分享一个Sitecore 8.1的解决方案。我不知道它是否适用于7。它改编自Sitecore.Links.LinkProvider.ExpandDynamicLinks()

var linkParser = new LinkProvider.LinkParser(); 
var urlOptions = LinkManager.Provider.GetDefaultUrlOptions(); // returns a clone. 
urlOptions.SiteResolving = true; 
urlOptions.AlwaysIncludeServerUrl = true; 
text = linkParser.ExpandDynamicLinks(text, urlOptions); 

这并不适用于媒体的联系工作,因为Sitecore.Links.DynamicLink.BuildMediaUrl()Sitecore.Links.MediaLinkExpander.Expand()完全忽略了他们的UrlOptions参数。如果您需要完整的媒体的网址,以及该包装你的代码:

using (new SettingsSwitcher("Media.AlwaysIncludeServerUrl", "true")) 
{ 
    phrase = linkParser.ExpandDynamicLinks(phrase, urlOptions); 
}