我在sitecore中有一般字段,可以有内部或外部链接。我只需要为外部链接添加target =“_ blank”。
我尝试在Sitecore点击“插入外部链接”时将目标窗口设置为新浏览器,但没有用。
如果我也从代码中添加target = _blank就可以了。
代码:
UrlOptions urlOptions = new UrlOptions();
urlOptions.LanguageEmbedding = LanguageEmbedding.Never;
Title = FieldRenderer.Render(item, "Title");
Summary = FieldRenderer.Render(item, "Short Description");
Details = FieldRenderer.Render(item, "Details");
Sitecore.Data.Fields.LinkField lf = item.Fields["TitleUrl"];
if (lf.Url != "")
{
ItemUrl = EFI.Library.SitecoreDataUtil.GetUrlForLinkField(lf, item, urlOptions);
}
else
{
ItemUrl = LinkManager.GetItemUrl(item);
}
答案 0 :(得分:5)
您是否尝试过以下操作?
Render a General Link in Sitecore with target="_blank"
如果您不想嵌入语言,可以languageEmbedding="never"
设置<linkManager defaultProvider="sitecore">
<providers>
<clear />
<add name="sitecore" type="Sitecore.Links.LinkProvider, Sitecore.Kernel" addAspxExtension="true" alwaysIncludeServerUrl="false" encodeNames="true" languageEmbedding="never" languageLocation="filePath" shortenUrls="true" useDisplayName="false" />
</providers>
</linkManager>
:
$(document).ready(function(){
$('a[href^=http]').click(function(){
window.open(this.href);
return false;
});
});
或者您可以set it for all links in web.config在open the link in a new window:
的所有锚标记上使用jQuery{{1}}
答案 1 :(得分:2)
我同意jammykam,如果您不想嵌入该语言,最好在web.config中设置它。这样一来,它就会全面保持一致(你也不会忘记)。
您可以使用lf.IsInternal
检查代码是内部链接还是外部链接。
我想你可能会做类似的事情:
UrlOptions urlOptions = new UrlOptions();
urlOptions.LanguageEmbedding = LanguageEmbedding.Never;
Title = FieldRenderer.Render(item, "Title");
Summary = FieldRenderer.Render(item, "Short Description");
Details = FieldRenderer.Render(item, "Details");
Sitecore.Data.Fields.LinkField lf = item.Fields["TitleUrl"];
if (!lf.IsInternal)
{
lf.Target = "_blank";
}
ItemUrl = FieldRenderer.Render(item, "TitleUrl");
答案 2 :(得分:0)
有趣的是,我没有看到提及&lt; sc:link /&gt;控制:
<sc:link runat="server" field="TitleUrl" />
而且......就是这样。 CMS中选择的链接目标将适用 - 当然这取决于您的内容作者选择正确的目标,但为“规则的例外”提供了足够的灵活性。无论如何,只是抛出另一个选项。祝你好运。