Как получить максимальное количество индексов для TemplateRepeatIndex в DWT
У меня есть компонент в Tridion, где его дизайн метаданных имеет поле под названием "список", который заполняется с использованием категорий и ключевых слов
Я использовал код DWT для заполнения элементов, присутствующих в списке, используя следующий код, используя My DWT TBB
<!-- TemplateBeginRepeat name="Metadata.list" -->
<!-- TemplateBeginIf cond="list" -->
@@RenderComponentField('list',TemplateRepeatIndex)@@ ,
<!-- TemplateEndIf -->
<!-- TemplateEndRepeat -->
но я получаю предварительный просмотр как
раз, два, три, четыре, пять,
желаемый результат должен быть таким: один, два, три, четыре, пять
так что для этого мне нужно получить максимальное количество "TemplateRepeatIndex" Есть ли встроенная функция, чтобы проверить то же самое.
используя Tridion-sp1,2011.
4 ответа
Вы можете решить это с помощью встроенной функции: CollectionLength.
Если у вас есть многозначное текстовое поле "multiValuedField", вы можете найти количество элементов, используя следующее выражение:
@@CollectionLength("Component.Fields.multiValuedField")@@
Коллекция Length получает выражение, которое является полностью определенным именем элемента и селектором значения элемента пакета.
Возвращаемое значение является строкой. Когда вам нужно выполнить целочисленное сравнение или вычисление, вам нужно проанализировать значение в целое число:
@@parseInt(${CollectionLength("multivalued")})@@
Это работает, потому что строка между @@ и ${} анализируется как JScript.
Простым решением было бы переключить вашу логику.
Вы можете проверить, равен ли TemplateRepeatIndex 0. Если это не так, выведите запятую перед значением.
Я считаю, что единственный способ сделать это - создать TBB, который добавляет количество полей как элемент в пакете. Тогда вы сможете сделать следующее:
<!-- TemplateBeginRepeat name="Metadata.primary_topic" -->
<!-- TemplateBeginIf cond="primary_topic" -->
@@RenderComponentField('primary_topic',TemplateRepeatIndex)@@<!-- TemplateBeginIf cond="TemplateRepeatIndex < PrimaryTopicCount"--> ,<!-- TemplateEndIf -->
<!-- TemplateEndIf -->
<!-- TemplateEndRepeat -->
Уолтер решил и объяснил эту тему несколько лет назад, представив пользовательскую функцию.
http://sdltridionworld.com/community/extension_overview/dreamweavercia.aspx
Не забудьте перекомпилировать его код для текущей версии Tridion.
Обновление: вы можете найти все встроенные функции (и примеры их использования), которые Tridion имеет для использования в DWT, на этой странице: http://code.google.com/p/tridion-practice/wiki/BuiltInFunctionsForUseInHtmlTemplates