6

I have a component in tridion where its metadata design has a field called 'list' which is populated using Categories and Keywords

I used a DWT code to populate items present in the list using the following code using My DWT TBB

<!-- TemplateBeginRepeat name="Metadata.list" -->

    <!-- TemplateBeginIf cond="list" --> 
        @@RenderComponentField('list',TemplateRepeatIndex)@@ ,
    <!-- TemplateEndIf -->

<!-- TemplateEndRepeat -->

but Im getting preview as

one,two,three,four,five,

desired output should be like: one,two,three,four,five

so for this i need to get the maximum count of "TemplateRepeatIndex" Is there any inbuilt function to check the same.

using Tridion-sp1,2011.

Frank van Puffelen
  • 565,676
  • 79
  • 828
  • 807
User 4.5.5
  • 1,311
  • 3
  • 12
  • 20

4 Answers4

9

You can solve this with the built in function: CollectionLength.

When you have a multi-valued text field "multiValuedField" you can find the item count using the following expression:

@@CollectionLength("Component.Fields.multiValuedField")@@

Collection Length receives an expression that is the fully qualified name of an item and a value selector of a package item.

The value returned is a string. When you need to perform an integer comparison or calculation you need to parse the value to an integer:

@@parseInt(${CollectionLength("multivalued")})@@

This works because the string between @@ and ${} is parsed as JScript.

Arjen Stobbe
  • 1,684
  • 9
  • 15
6

An easy solution would be to switch your logic around.

You can check if TemplateRepeatIndex is 0. If it is not, output the comma in front of the value.

Peter Kjaer
  • 4,316
  • 13
  • 23
2

I believe the only way to do this would be to create a TBB that adds the field count as an item in the package. You would then be able to do the following:

<!-- TemplateBeginRepeat name="Metadata.primary_topic" -->

<!-- TemplateBeginIf cond="primary_topic" --> 
@@RenderComponentField('primary_topic',TemplateRepeatIndex)@@<!-- TemplateBeginIf cond="TemplateRepeatIndex &lt; PrimaryTopicCount"--> ,<!-- TemplateEndIf -->
<!-- TemplateEndIf -->

<!-- TemplateEndRepeat -->
Jeremy Grand-Scrutton
  • 2,802
  • 14
  • 20
  • you mean a C# TBB. Can we take a loop in which we set a variable to count the repeatIndex and then after the end of the loop declaring another loop to get the value from the variable which gives the maximum count. – User 4.5.5 Aug 21 '12 at 09:57
  • A C# Fragment or Assembly that counts the number of primary_topic values and pushes this count value to the package. – Arjen Stobbe Aug 21 '12 at 10:09
2

Walter solved and explained this topic a few years ago by introducing a custom function.

http://sdltridionworld.com/community/extension_overview/dreamweavercia.aspx

Don't forget to recompile his code for the current version of Tridion.

Update: you can find all built-in functions (and examples of their usage) that Tridion has for use in DWT on this page: http://code.google.com/p/tridion-practice/wiki/BuiltInFunctionsForUseInHtmlTemplates

Frank van Puffelen
  • 565,676
  • 79
  • 828
  • 807