2017-02-15 28 views
0

У меня ситуация, когда есть условный случай, когда редактор может выбрать макет дочерних элементов.Kentico - Отображение дочерних элементов с помощью преобразований

enter image description here

Как можно видеть из приведенных выше изображений, NewsItems имеет типа NewsContainer, который обеспечивает возможность для компоновки дочерних элементов типа NewItem. Если выбранный макет имеет тип, два элемента в строке, дочерние элементы должны отображаться вертикально, иначе горизонтально. На рисунке ниже показана структура преобразования, где мне нужно получить доступ к свойствам дочерних новостных элементов.

enter image description here

Любая помощь будет оценена. Благодарю.

PS: Кентико версия: 10

ОБНОВЛЕНИЯ на основе комментариев Как на комментарий Романа, я попытался это, но до сих пор ничего не появляется на выходе:

enter image description here

enter image description here

enter image description here

Применяя отдельные преобразования непосредственно к полю Transformation ретранслятора, выдает результат, но он не работает при использовании макроса.

ответ

1

Я немного смущен вашим описанием. Преобразование будет применено для этих новостных страниц прямо? Итак, вам нужно получить доступ к свойству макета родительской страницы, а не к дочерней странице, правильно? Если да, то я бы рекомендовал, чтобы переключиться в Text/тип преобразования XML и использовать этот макрос:

{%Documents[Documents[NodeAliasPath].Parent.NodeAliasPath].GetValue("LayoutField")%} 

и просто FYI из скриншота страницы NewsItems не кажется, что тип контейнера страница -> это более вероятно, тип содержимого, который не может отображать стандартные страницы.

+0

Я попробую это и вернусь, и да, типы страниц, как вы сказали. – MrClan

+0

Это, кажется, не возвращает мне никакого значения. – MrClan

+0

Является ли NodeAliasPath частью вашей конфигурации столбцов (или это свойство Columns пустое)? У вас есть преобразование текста/XML? Я тестировал его, и он работает нормально. – JanH

1

Вы можете реализовать два отдельных преобразования и использовать их имена в качестве значений в раскрывающемся списке «Макет». Теперь на странице «контейнер» вы должны поместить часть веб-части (повторитель, uni viewer и т. Д.) И введите макрос {%Layout%} в поле трансформации веб-части.

+0

Я попробую это и вернусь. – MrClan

+0

Пробовал, но, похоже, не работает. Пожалуйста, ознакомьтесь с обновленным вопросом с изображениями. – MrClan

+0

Вы получаете какую-либо ошибку? Что это? –

0

Метод Романа чист, однако, если вы просто хотите сделать это в одном преобразовании, это то, что вы бы сделали.

<%# IfCompare(Eval("Layout"), "horizontal", "The content if it's NOT horizontal", "the content if it IS horizontal") %> 

IfCompare нечетное мяч, что это «ложь» является первым и «истина» является второй (ненавижу).

Вы можете поместить всю логику в «», то, или вы можете сделать жизнь немного легче, если вы хорошо с некоторым повторяющимся кодом и просто показать, как и скрыть что применимо

<div class="horizontalLayout <%# IfCompare(Eval("Layout"), "horizontal", "hidden", "") %>"> 
    Horizontal Here 
</div> 
<div class="verticalLayout <%# IfCompare(Eval("Layout"), "horizontal", "", "hidden") %>"> 
    Vertical Layout here 
</div> 

См Transformation method references

+0

Да, это именно то, что я пытался сделать, но не знаю, как получить доступ к дочерним элементам из преобразования в типе NewsContainer. – MrClan

1

Лучшим подходом было бы условное заполнение поля преобразования с использованием макросов. Что-то вроде этого.

{% CurrentDocument.ApplyTransformation(([YOURCONDITION] ? "[TRANSFORMATION_A]" : "[TRANFORMATION_B]")) %}