Здравствуйте, У меня возникла проблема с перекосом связанного компонента.
Я создал EmailSetup (вид UML diagram) Компонент с товаром.
Компонент продукта имеет схему (EmailBlockWithCode).
продукта: Tridion: проблема с компонентом Template при циклировании связанных компонентов
- - Code = "wms_III"
- - Предмет:
- - Key = "ProductKey"
- - Content = "ProductContent"
-
-
- CallToAction:
- - Предмет:
- - Ключ = "BluetoothKey"
- - Содержание = "BluetoothContent"
- - Предмет:
Когда я цикл по этому компоненту с кодом:
<products>
<!-- TemplateBeginRepeat name="Component.Fields.Product" -->
@@GetComponent(Field,'Product')@@
<product name="@@[email protected]@">
<!-- TemplateBeginRepeat name="Product.Fields.Item" -->
<@@[email protected]@><![CDATA[@@[email protected]@]]></@@[email protected]@>
<!-- TemplateEndRepeat -->
<!-- TemplateBeginRepeat name="Product.Fields.CallToAction" -->
@@GetComponent(Field,'CallToAction')@@
<@@[email protected]@><![CDATA[@@[email protected]@]]></@@[email protected]@>
<!-- TemplateEndRepeat -->
</product>
<!-- TemplateEndRepeat -->
</products>
Это функция GetComponent
[TemplateCallable]
public string GetComponent(string tcmUri, string packageVariable) {
Assert.NotEmpty("tcmUri", tcmUri);
Assert.NotEmpty("packageVariable", packageVariable);
IdentifiableObject identifiableObject = m_Engine.GetObject(new TcmUri(tcmUri));
if (identifiableObject as Component == null) {
throw new BuildingBlockException("Given tcmUri '" + tcmUri + "' is not a Component.");
}
Item previousItem = m_Package.GetByName(packageVariable);
if (previousItem != null) {
m_Package.Remove(previousItem);
}
Component component = identifiableObject as Component;
m_Package.PushItem(packageVariable, m_Package.CreateTridionItem(ContentType.Component, component));
return "";
}
Мой выход:
<products>
<product name="wms_III">
</product>
</products>
Так что моя проблема в том, что код не зацикливает
над «item» (key = ProductKey; content = ProductContent) Я нашел функцию IteratingOverMultivalueEmbeddedFields, но это также не будет зацикливать мой продукт. Код:
<!-- TemplateBeginRepeat name="Component.Fields.Product" -->
@@GetComponent(Field,'Product')@@
<!-- TemplateBeginRepeat name="Product.Fields" -->
@@[email protected]@
<!-- TemplateBeginRepeat name="Field.Values" -->
<!-- TemplateBeginIf cond="Field.ContentType = 'text/plain'" -->
@@RenderComponentField(FieldPath, TemplateRepeatIndex)@@
<!-- TemplateEndIf -->
<!-- TemplateBeginIf cond="Field.ContentType = 'tridion/field'" -->
<!-- TemplateBeginRepeat name="Field.Fields" -->
@@[email protected]@
<!-- TemplateBeginRepeat name="Field.Values" -->
@@RenderComponentField(FieldPath, TemplateRepeatIndex)@@
<!-- TemplateEndRepeat -->
<!-- TemplateEndRepeat -->
<!-- TemplateEndIf -->
<!-- TemplateEndRepeat -->
<!-- TemplateEndRepeat -->
Fixed. проверил мой ответ –