没有内置的方法可以以相反的顺序循环重复的项目。
如果您customtag
是包中的数组项(通常是组件或组件表示的数组),您可以将列表以相反的顺序推送到包含相同项的包中,然后循环该项。
<!-- TemplateBeginRepeat name="customtag_reversed" -->
如果您customtag
是一个字段,这将不起作用,因为您无法将字段推送到包中。在这种情况下,我建议创建一个自定义函数,以正确的顺序输出您的自定义标签,例如:
@@RenderCustomTags('customtag', 'Order.Reverse')@@
更新
如果customtag
是一个组件链接字段,最好将那些链接的组件作为组件数组项简单地添加到包中。Nuno 在 SDL Tridion World 上提供了一个 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# 中将其留空,并将其保留RenderComponentPresentation
在 DWT 的调用中,就像您已经做的那样。