2012-08-27 29 views
5

Tôi đã cố gắng giải quyết vấn đề này kể từ sáng nay, và tôi biết tôi thiếu một số thứ hiển nhiên ở đây nhưng tôi dường như không thể tìm thấy nó.Sử dụng chuỗi dịch trong liên kết thành phần

Chúng tôi đang sử dụng tệp XML được xuất bản lên máy chủ chứa bản dịch của tất cả các từ tiêu chuẩn, chẳng hạn như 'đọc thêm'. Đây là trang có thành phần được bản địa hóa trong ấn phẩm thích hợp.

Trong mẫu Razor của chúng tôi, chúng tôi sử dụng đoạn mã sau bên dưới một mục Tóm tắt tin tức đơn giản mà lần lượt liên kết đến mục đầy đủ.

<a tridion:href="@news.ID" class="more" ><%=DefaultLabels.TranslatedTerm(((HomePage)Page).Location, "read_more")%></a> 

Thing là, thẻ máy chủ hoạt động tốt, nhưng được giải quyết như

<tridion:ComponentLink runat="server" PageURI="tcm:15-407-64" ComponentURI="tcm:15-1475" TemplateURI="tcm:0-0-0" AddAnchor="false" LinkText="&lt;%= DefaultLabels.TranslatedTerm(((HomePage)Page).Location, &#34;read_more&#34;) %&gt;" LinkAttributes=" class=&#34;more&#34;" TextOnFail="true"/> 

Như bạn có thể nhận thấy, nó được viết dưới dạng văn bản đơn giản trên trang (không có bất ngờ ở đó vì các tham số Văn bản liên kết được khai báo là String ở vị trí đầu tiên theo các liveDocs).

Nếu tôi lấy đi

tridion:href 

trong ví dụ đầu tiên, và viết nó như

href 

Nó hoạt động tốt, mã giải quyết vào một chuỗi dịch và thậm chí nó còn liên kết ... không có gì nhiều hơn ID TCM của thành phần, không phải là trang đúng với mục tin tức đầy đủ trên nó.

Tôi đã thử tạo hàm trong Razor, đã thử thay thế liên kếtText, đã thử đặt ComponentLink trong chính mẫu đó nhưng không có kết quả. Tôi cảm thấy rằng nó chỉ hoạt động với một điều chỉnh nhỏ đối với mã của mẫu này, nhưng tôi không nhìn thấy nó và tôi đã bắt đầu xem xét TBB tùy chỉnh để xử lý mã.

Bất kỳ ai có ý tưởng về cách giải quyết vấn đề này?

EDIT:

câu trả lời Chris' thực sự là người tôi đang tìm kiếm trong tình huống đặc biệt này, nhưng tôi cảm thấy rằng tôi nên chỉ ra rằng chức năng Priyank là cái gì đó nên được coi như vậy là tốt. Vì vậy, cảm ơn cả hai vì sự giúp đỡ, nó làm cho cuộc sống của tôi phần nào dễ dàng hơn bây giờ!

Trả lời

2

tôi sẽ đề nghị không sử dụng các bản mẫu mặc định cho việc giải quyết các liên kết của bạn, thay vì đầu ra liên kết cho mình một cái gì đó như thế này:

<tridion:ComponentLink runat="server" PageURI="tcm:15-407-64" 
    ComponentURI="tcm:15-1475" TemplateURI="tcm:0-0-0" 
    AddAnchor="false" LinkAttributes=" class=&#34;more&#34;" 
    TextOnFail="true"> 
     <%=DefaultLabels.TranslatedTerm(((HomePage)Page).Location, &#34;read_more&#34;) %> 
</tridionComponentLink> 

Vẫn còn tốt hơn bạn có thể xem xét xuất ra TCDL chứ không phải là taglib/ServerControl

+0

Chris, bạn có thể giải thích tại sao tôi không nên sử dụng các mẫu mặc định để giải quyết liên kết và sử dụng cú pháp này thay thế không? Và những gì về outputting TCDL? Cảm ơn. – MDa

+1

Mặc định "Giải quyết liên kết TBB" tìm tất cả các liên kết chứa TCM URI và chuyển đổi chúng thành TCDL, sau này được chuyển đổi thành REL, JSP, ASP.NET, vv. mà cho bạn không được thực hiện bởi điều khiển ASP.NET của bạn). –

8

Tôi hy vọng chức năng dao cạo này sẽ giúp bạn rất nhiều. Đây là chức năng rất hữu ích để hiển thị thẻ liên kết từ liên kết thành phần hoặc liên kết bên ngoài.

@helper RenderLink(
    dynamic link,      // the link to render. Handles components + internal/external links 
    string cssClass = null,    // optional custom CSS class 
    string title = null     // optional link text (default is the title of the component being linked to) 
    ) 
{ 
    if(link == null) 
    { 
      return; 
    } 

    if (title == null) 
    { 
     title = link.title; 
    } 

    string classAttr = string.IsNullOrEmpty(cssClass) ? "" : " class='" + cssClass + "'"; 
    dynamic href; 
    string tridionLink = ""; 
    string targetAttr = ""; 

    if (link.Schema.Title == "External Link") 
    { 
     href = link.link; 
    } 
    else if (link.Schema.Title == "Internal Link") 
    { 
     href = link.link; 
     tridionLink = "tridion:"; 
    } 
    else 
    { 
     href = link; 
     tridionLink = "tridion:"; 
    }  

    if(link.target != null) 
    { 
     targetAttr = link.target == "New window" || link.target == "Popup" ? " target='_blank'" : ""; 
    }  

    <a @(tridionLink)href="@href"@[email protected]>@title</a> 
} 
Các vấn đề liên quan