我遇到的情况是编辑器可以选择子项的布局。
从上图中可以看出, NewsItems 的类型为 NewsContainer ,它为 NewItem类型的子项的布局提供了选项。如果选择的布局类型为每行两个项目,则子项目应垂直显示,否则应水平显示。下图显示了转换结构,我需要访问子新闻项的属性。
任何帮助将不胜感激。感谢。
PS:Kentico版本:10
根据评论更新 根据罗马的评论,我试过这个,但输出中仍然没有出现:
将单个转换直接应用于转发器的转换字段,生成输出,但在使用宏时不起作用。
答案 0 :(得分:1)
我对你的描述感到有点困惑。转换将适用于那些News1-4页面吗?所以你需要访问父页面的布局属性,而不是子页面,对吗?如果是这样,我建议切换到Text / XML转换类型并使用此宏:
{%Documents[Documents[NodeAliasPath].Parent.NodeAliasPath].GetValue("LayoutField")%}
从屏幕截图中只看到FYI,NewsItems页面似乎不是容器页面类型 - >它更可能只是内容页面类型,无法列出标准页面。
答案 1 :(得分:1)
您可以实现两个单独的转换,并将它们的代码名称用作布局下拉列表中的值。现在你应该把一些列表网页部分(转发器,单一浏览器等)放在'容器上。页面并将{%Layout%}
宏输入到Web部件转换字段中。
答案 2 :(得分:1)
更好的方法是使用宏有条件地填充转换字段。这样的事情。
{% CurrentDocument.ApplyTransformation( ([YOURCONDITION] ? "[TRANSFORMATION_A]" : "[TRANFORMATION_B]") ) %}
答案 3 :(得分:0)
Roman的方法很干净,但是如果你纯粹想在一次转型中做到这一点,那就是你要做的。
<%# IfCompare(Eval("Layout"), "horizontal", "The content if it's NOT horizontal", "the content if it IS horizontal") %>
IfCompare是一个奇怪的球,它是假的&#39;是第一个真实的&#39;是第二个(讨厌那个)。
您可以将所有逻辑放在&#34;&#34;那么,或者你可以让生活变得更容易,如果你对一些重复的代码没有问题,只显示两者并隐藏适用的那些
<div class="horizontalLayout <%# IfCompare(Eval("Layout"), "horizontal", "hidden", "") %>">
Horizontal Here
</div>
<div class="verticalLayout <%# IfCompare(Eval("Layout"), "horizontal", "", "hidden") %>">
Vertical Layout here
</div>