2013-05-16 2 views
0

У меня есть общее поле в sitecore, которое может иметь внутреннюю или внешнюю ссылку. Мне нужно добавить target = "_ blank" только для внешней ссылки.добавить target = "_ blank" в общую ссылку в Sitecore

Я попытался установить целевое окно в качестве нового браузера при нажатии кнопки «Вставить внешнюю ссылку» в Sitecore, но не использовать.

Это нормально, если я добавлю цель = _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); 
     } 

ответ

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"); 
5

Вы пробовали следующее?

Render a General Link in Sitecore with target="_blank"

Если вы не хотите вставлять язык вы можете set it for all links in web.config установкой 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> 

Или вы могли бы open the link in a new window с помощью JQuery на всех якорных тегов, start with http:

$(document).ready(function(){ 
    $('a[href^=http]').click(function(){ 
    window.open(this.href); 
    return false; 
    }); 
}); 
+0

Опасность с помощью метода jQuery заключается в том, что UrlOptions может иметь полный URL, а не относительный. – Trayek

+0

Несомненно. Было бы лучше установить класс на них, '.external' или что-то, и настроить его с помощью этого селектора. Как правило, это правильный способ открытия ссылок в новых окнах, а не target = "_ blank" – jammykam

0

Интересно, что я не вижу упоминания о < СБН: ссылка/> управления:

<sc:link runat="server" field="TitleUrl" /> 

И ... это все , Целевая ссылка для ссылки, выбранной в CMS, будет применяться - конечно, это зависит от того, кто ваш контент выбирает правильный целевой объект, но дает достаточную гибкость для «исключений из правила». Во всяком случае, просто выбрасывать другой вариант. Удачи.

+1

Это было мое первое предложение в ответном SO-сообщении, это способ по умолчанию, но я прочитал его вопрос, поскольку он пробовал это и он не работает ... – jammykam

+0

Я прочитал вопрос, как в том, что ему нужно автоматически перейти на _blank (без установки его в cms). – Trayek

Смежные вопросы