2013-01-04 99 views
6

我需要,我需要輸出的自定義標籤TemplateBeginRepeat以相反的順序

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

輸出一些HTML

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

創建使用TemplateBeginRepeat 2路由於第二回路閉合通過呈現的自定義標籤第一個循環,第二個循環應該以相反的順序運行。 (因爲標籤需要以相反的順序關閉)。我如何以與TemplateBeginRepeat組件相反的順序運行第二個循環?

+0

'customtag'是什麼類型?它是一個領域? –

+0

請注意,$ {}只能用於例外情況,而不是默認情況下。它允許您在默認的@@ @@之前首先評估(呈現)表達式。 –

回答

6

沒有內置的方式以相反的順序循環重複的項目。


如果您customtag是一個數組項目在包(通常是組件或組件演示的數組),你可以把一個列表到包含以相反的順序在該項目相同的項目,然後循環包。

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

如果您customtag是一個領域,這是行不通的,因爲你不能現場推入包。在這種情況下,我建議創建輸出正確的順序您的自定義標籤的自定義功能,如:

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

更新

如果customtag零部件鏈接領域,它的更好簡單地將這些鏈接的組件作爲組件數組項添加到包中。努諾提供的鏈接上支持SDL Tridion世界一個TBB,但是這是最關鍵的片段:

// 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); 

你會想要做這些的循環,每聯成分:

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

而且而不是在C#代碼中對組件模板ID進行硬編碼,您也可以考慮將它留在C#中爲空,並像您已經做的那樣將它保留在DWT中的RenderComponentPresentation調用中。

+0

Frank,customtag是一個多值的Component Link元數據字段 – user1949001

+1

所以這是一個字段。然後你必須創建你自己的集合(在C#中創建ComponentArray,以反向順序推送到包)。以下示例http://www.sdltridionworld.com/community/extension_overview/useful_tbbs.aspx - 檢查「按模板類型分組組件」TBB或「獲取兄弟組件」 –

+0

您是對的Nuno,將鏈接的組件推入包在這種情況下可能會更好。我會更新我的答案。 –

5

這裏的問題似乎是Dreamweaver語法只適用於最簡單的編程任務。 Frank和Nuno已經表明,將一些的某些的邏輯轉換爲C#模板會有所改進,但是您還應該考慮將此輸出的生成完全從移至C#模板。換句話說,一旦你需要使用除DWT之外的其他東西,你的問題定義就會改變,因爲現在描述的問題非常以DWT爲中心。

需要反向循環只存在,因爲你想關閉你的構造以正確的順序。在像C#這樣的語言中,通過使用嵌套(甚至是遞歸)函數調用,或者(可能更有可能)將關閉輸出推送到堆棧,可以實現此結果。

+0

約定Dom。在這裏調用RenderComponentPresentation(可能會生成大部分HTML),處理外觀的C#可能不會輸出太多的HTML(可能只是一個'ul'和''''')。如果你願意在不需要Visual Studio的情況下修改源代碼,我會建議使用C#片段TBB作爲DWT中棘手構造的替代方案。 –

+0

如果DWT調用它所在的模板會發生什麼? :-)弗蘭克,但我沒有看到名單。這更像是作者想要的任何節點的嵌套:'

rest of the content

',其中div,p和span是'customtag'字段。所以也許C#只是輸出尖括號和屬性?希望這個組件適用於開發者或超級用戶。 –