2012-08-27 15 views
5

Ho cercato di risolvere questo problema da questa mattina, e so che mi manca qualcosa di ovvio qui ma non riesco a trovarlo.Utilizzo di stringhe di traduzione nei collegamenti di componente

Stiamo utilizzando un file XML che viene pubblicato sul server che contiene le traduzioni di tutte le parole standard, come "leggi altro". È una pagina con un componente che è localizzata nella pubblicazione appropriata.

Nei nostri modelli Razor viene utilizzato il seguente codice sotto una semplice voce di riepilogo di notizie che a sua volta rimanda all'elemento completo.

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

La cosa è, il tag server funziona bene, ma viene risolto come

<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"/> 

Come si può notare, si viene scritto come testo normale nella pagina (nessuna sorpresa perché il parametro LinkText è dichiarato come String in primo luogo in base al LiveDocs).

Se mi togli il

tridion:href 

nel primo esempio, e lo scrivo come

href 

Funziona bene, il codice si risolve in una stringa tradotta ed è ancora legato ... a nient'altro che l'ID TCM del componente, non la pagina giusta con la notizia completa su di esso.

Ho provato a creare una funzione in Rasoio, ho provato a sostituire il linkText, ho provato a impostare il ComponentLink nel modello stesso, ma senza successo. Sento che dovrebbe funzionare solo con una piccola modifica al codice di questo modello, ma non riesco a vederlo e ho iniziato a cercare TBB personalizzati per gestire il codice.

Qualcuno ha un'idea su come risolvere questo problema?

EDIT:

risposta Chris' era in realtà quello che cercavo in questa particolare situazione, ma sento che Vorrei sottolineare che la funzione di Priyank è qualcosa che dovrebbe essere considerato come bene. Quindi grazie per l'aiuto, mi ha reso la vita un po 'più facile ora!

risposta

2

vorrei suggerire di non utilizzare i modelli predefiniti per risolvere i tuoi link, piuttosto uscita il link da soli qualcosa di simile:

<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> 

Meglio ancora si potrebbe considerare l'output TCDL piuttosto che il Taglib/ServerControl

+0

Chris, potresti spiegare perché non dovrei usare i modelli predefiniti per risolvere i collegamenti e utilizzare questa sintassi? E che dire dell'uscita di TCDL? Grazie. – MDa

+1

Il collegamento predefinito "Risolvi collegamenti TBB" trova tutti i collegamenti contenenti URI TCM e li converte in TCDL, che in seguito viene convertito in REL, JSP, ASP.NET ecc. Costruisce il TCDL posizionando il testo del collegamento in un attributo (che per te non viene eseguito dal tuo controllo ASP.NET).Per eseguire il codice, la cosa più semplice è il testo del collegamento (o nel tuo caso un po 'di codice) nel corpo del tag (piuttosto che un attributo). Il codice che ho fornito fa direttamente riferimento al controllo server ComponentLink che caricherà il testo del collegamento dal corpo del controllo se non si trova nell'attributo. –

8

Spero che questa funzione rasoio ti aiuterà molto. Questa è una funzione molto utile per il rendering del tag link dal link component o dal link esterno.

@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> 
} 
Problemi correlati