Циклические ссылки на компоненты во встроенном поле
У нас есть "компонент A", который имеет многозначное поле типа "встроенное поле". Встроенное поле, в свою очередь, имеет многозначное поле типа "Ссылка на компонент".
Это выглядит так:Компонент A -> Встроенные поля Shcema -> Ссылки на компоненты
Как перебрать и получить доступ к полям 'Component Links' в Dreamweaver? Также поле компонента поддерживает три разные схемы, и мы хотим проверить имена этих схем в dreamweaver.
Я нашел этот пост полезным. Но больше деталей было бы действительно здорово.
5 ответов
Посмотрите на эти вопросы:
Как обрабатывать вложенные повторяющиеся области в TBB Dreamweaver в SDL Tridion 2011 SP1
Получение значений связанного компонента в Dreamweaver TBB и создание его SiteEditable
И эта страница из поваренной книги практики Tridion:
Они охватывают наиболее распространенные проблемы, с которыми вы можете столкнуться при доступе к полям в DWT.
Если они не отвечают на ваш вопрос, обновите ваш вопрос:
- соответствующий фрагмент XML вашего компонента
- фрагмент DWT, показывающий, что вы уже пробовали
Вы можете легко перебрать ссылку на компонент во встроенном поле с несколькими значениями, но нет прямого способа получить значения ссылки на компонент, вы должны использовать либо расширение dwt, либо.net tbb. Есть несколько доступных на sdltridionworld.com.
Я сделал это ранее с вложенным шаблоном. Вы также можете попробовать вложенный / суб-шаблон из вашего основного dwt tbb на основе схемы компонента поля ссылки компонента в цикле.
Также я бы предложил использовать бритвенные шаблоны.
Вы можете перебрать абзац поля с несколькими значениями во абзацах поля встроенной схемы следующим образом:
<!-- TemplateBeginRepeat name="Component.Fields.paragraphs" -->
<h2>@@Field.header@@ (@@TemplateRepeatIndex@@)</h2>
<!-- TemplateBeginRepeat name="Field.paragraph" -->
<p>@@Field@@</p>
<!-- TemplateEndRepeat -->
<!-- TemplateEndRepeat -->
Как ранее упоминалось Викасом, повторение поля связи многозначных компонентов многозначного поля встроенной схемы является относительно простым. Ваш код DWT должен следовать этой форме:
<!-- TemplateBeginRepeat name="XML Name of Embedded Schema Fields" -->
<!-- TemplateBeginRepeat name="XML Name of multivalued Component Link field" -->
@@Field@@ - Should write out the TCM ID of your linked component
<!-- TemplateEndRepeat -->
<!-- TemplateEndRepeat -->
Однако вы не можете получить доступ к полям или деталям схемы этих компонентов с помощью готовых шаблонов Dreamweaver.
Вы можете:
- установите Dreamweaver Get eXtension на свой сервер Content Manager, который позволит вам извлекать поля связанных компонентов (среди прочего), используя
@@Get(...)@@
синтаксис - Используйте "Получить связанные компоненты" .Net TBB из стандартных строительных блоков шаблона SDL Tridion 2011 перед вашим шаблоном Dreamweaver, который поместит связанные компоненты в пакет шаблонов, чтобы вы могли выполнять итерации по ним напрямую.
- Напишите свой собственный.Net TBB для обработки вашей конкретной бизнес-логики, связанной с этими ссылками, и выводите html (не рекомендуется) или именованный элемент пакета, элементы или массив элементов, которые вы можете обрабатывать из вашего DWT.
- Вызовите другой (вложенный) шаблон компонента из вашего DWT с помощью
@@RenderComponentPresentation(Field, "tcm:x-xx-32")@@
- Любая комбинация вышеперечисленного
Пожалуйста, попробуйте использовать следующий код:
<!-- TemplateBeginRepeat name="paragraphs" -->
<!-- TemplateBeginRepeat name="Internal_Link" -->
<!-- TemplateBeginIf cond = "Internal_Link != ''" -->
<p> @@Component.ID@@ </p>
<!-- TemplateEndIf -->
<!-- TemplateEndRepeat -->
<!-- TemplateEndRepeat -->
Для проверки нулевого компонента вы можете использовать следующий код:
<!-- TemplateBeginRepeat name="paragraphs0.Internal_Link" -->