2013-01-04 22 views
6

sto bisogno di creare 2 loop utilizzando TemplateBeginRepeat dove ho bisogno di uscita tag personalizzatiTemplateBeginRepeat in ordine inverso

<!-- TemplateBeginRepeat name="customtag" --> 
    ${RenderComponentPresentation(Field, rendercustomtagstarttemplate)} 
<!-- TemplateEndRepeat --> 

uscita un po 'di html

<!-- TemplateBeginRepeat name="customtag" --> 
    ${RenderComponentPresentation(Field, rendercustomtagclosetemplate)} 
<!-- TemplateEndRepeat --> 

Dal momento che il secondo ciclo si chiude il tag personalizzato reso da il primo ciclo, il secondo ciclo dovrebbe essere eseguito in ordine inverso. (poiché i tag devono essere chiusi in ordine inverso). Come eseguo il secondo ciclo nell'ordine inverso dei componenti con TemplateBeginRepeat?

+0

Che tipo è 'customtag'? È un campo? –

+0

Tieni presente che $ {} deve essere utilizzato solo per le eccezioni e non per impostazione predefinita.Ti permette di valutare (rendere) le espressioni prima, prima del default @@ @@. –

risposta

6

Non esiste un modo integrato per eseguire il loop degli articoli ripetuti in ordine inverso.


Se il customtag è un elemento array (tipicamente una serie di componenti o presentazioni Component) nel pacchetto, si può spingere un elenco nel pacchetto che contiene gli stessi elementi in ordine inverso e quindi un ciclo su tale elemento .

<!-- TemplateBeginRepeat name="customtag_reversed" --> 

Se il customtag è un campo, questo non funzionerà, perché non si può spingere un campo nel pacchetto. In tal caso vi suggerisco di creare una funzione personalizzata che emette i tag personalizzati nell'ordine corretto, ad esempio:

@@RenderCustomTags('customtag', 'Order.Reverse')@@ 

Aggiornamento

Se customtag è un componente di collegamento campo , è meglio per aggiungere semplicemente quei Componenti collegati al pacchetto come elemento di Array di componenti. Nuno fornito un link ad un TBB su SDL Tridion mondo, ma questo è il frammento più critico:

// Tridion.ContentManager.Templating.ComponentPresentation 
var list = new List<ComponentPresentation>(); 

list.Add(new ComponentPresentation(Component.Id, ComponentTemplate.Id)); 
// you'll want to do a loop of these for every linked Component 

var item = package.CreateStringItem(ContentType.ComponentArray, 
            ComponentPresentationList.ToXml(list)); 
package.PushItem("customtag_Components", item); 

Avrai voglia di fare un ciclo di questi per ogni componente legata:

list.Add(new ComponentPresentation(Component.Id, ComponentTemplate.Id)); 

E invece di codificare a fondo l'ID modello componente nel codice C#, puoi anche considerare di lasciarlo vuoto in C# e tenerlo all'interno della chiamata RenderComponentPresentation nel tuo DWT come fai già.

+0

Frank, customtag è un campo di metadati di collegamento a componenti multi-valore – user1949001

+1

Quindi è un campo. Dovrai quindi creare la tua collezione personale (crea ComponentArray in C#, spinga al pacchetto con ordine inverso). Esempio qui http://www.sdltridionworld.com/community/extension_overview/useful_tbbs.aspx - controlla TBB o "Get Sibling Components" per Componenti di gruppo per tipo di modello) –

+0

Hai ragione Nuno, spingendo i Componenti collegati nel il pacchetto funzionerà probabilmente meglio in questo caso. Aggiornerò la mia risposta –

5

Il problema qui sembra essere che la sintassi di Dreamweaver è adatta solo per le attività di programmazione più semplici. Frank e Nuno hanno mostrato che spostare un po 'di della logica in un modello C# dà un miglioramento, ma dovresti anche considerare di spostare la generazione di questa uscita interamente nel modello C#. In altre parole, una volta arrivato al punto di dover utilizzare qualcosa di diverso dal DWT, la definizione del problema cambia, poiché il problema ora descritto è molto incentrato sul DWT.

La necessità di eseguire il ciclo al contrario esiste solo perché si desidera chiudere i costrutti nell'ordine corretto. In una lingua come C# è possibile ottenere questo risultato utilizzando chiamate di funzioni nidificate (anche ricorsive) o (forse più probabilmente) spingendo il risultato finale in una pila.

+0

Dom concordato. E dato il richiamo a 'RenderComponentPresentation' qui, che probabilmente genererà la maggior parte dell'HTML, il C# per gestire l'aspetto probabilmente non emetterà molto HTML (forse solo un' ul' e 'li's). Se sei collegato alla possibilità di modificare l'origine in un secondo momento senza richiedere Visual Studio, ti suggerirei un frammento TBB in C# come alternativa ai costrutti complessi nel DWT. –

+0

Cosa succede se un DWT chiama il modello in cui si trova? :-) Frank, non vedo le liste, però. Questo sembra più un annidamento di qualunque cosa-i nodi-voglia l'autore: '

rest of the content

', dove div, p e span sono i campi' customtag'. Quindi forse C# restituisce solo parentesi angolari e attributi? Speriamo che questo componente sia per sviluppatori o utenti esperti. –

Problemi correlati