2013-05-16 1 views
0

내부 또는 외부 링크가있을 수있는 일반 필드가 sitecore에 있습니다. 외부 링크에 대해서만 target = "_ blank"를 추가해야합니다.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); 
     } 

답변

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"

당신은 languageEmbedding="never"를 설정하여 당신이 할 수있는 언어 set it for all links in web.config를 포함하지 않으려면 :

<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 모든 앵커 태그 start with http에 jQuery를 사용하여 :

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

jQuery 메서드의 위험성은 UrlOptions가 상대 URL이 아닌 전체 URL로 설정 될 수 있다는 것입니다. – Trayek

+0

예. 선택기를 사용하여 클래스를 '.external' 또는 무언가와 대상으로 설정하는 것이 좋습니다. 일반적으로, 그것은 새 창에서 링크를 여는 대신 유효한 방법입니다. target = "blank" – jammykam

0

을 흥미롭게 : 나는 당신이 아마이 비슷한 일을 할 수 있다고 생각

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

을 그리고 ... 그것 뿐이다 . CMS에서 선택한 링크의 대상이 적용됩니다 - 당연히 올바른 대상을 선택하는 콘텐츠 작성자에 따라 다르지만 "규칙 예외"에 대해 충분한 유연성을 제공합니다. 어쨌든 다른 옵션을 던지십시오. 행운을 빕니다.

+1

이것이 링크 된 답변의 첫 번째 제안이었습니다. 이것이 기본 방법입니다.하지만이 질문을 읽었습니다. 그것은 작동하지 않습니다 ... – jammykam

+0

나는 그것을 자동으로 _blank에 갈 필요가있는 질문을 읽습니다 (CMS에 설정하지 않고). – Trayek