Aem 在HTL/Sightly中是否可以有条件地打开或关闭标记?
我是AEM的新手,所以任何建议都非常感谢 假设我有这样的东西:Aem 在HTL/Sightly中是否可以有条件地打开或关闭标记?,aem,sightly,Aem,Sightly,我是AEM的新手,所以任何建议都非常感谢 假设我有这样的东西: <div class="big-item" data-sly-list="${features.list}"> <sly data-sly-test="${ itemList.first || itemList.count == 5 || itemList.count == 9 || itemList.count == 13 || itemLi
<div class="big-item" data-sly-list="${features.list}">
<sly data-sly-test="${ itemList.first || itemList.count == 5 || itemList.count == 9 || itemList.count == 13 || itemList.count == 17 }">
<div class="small-item-wrapper>
<div class="additional-div">
</sly>
<div class="small-item">
<div>${item.somecontent}</div>
</div>
<sly data-sly-test="${ itemList.last || itemList.count == "4 || itemList.count == 8 || itemList.count == 12 || itemList.count == 16 }">
</div>
</div>
</sly>
</div>
基本上,我要做的是将每4件物品包装在一个单独的容器中
目前,关闭标记不会被渲染,或者只是在最后一次迭代之后才被关闭
这种html模板方法在AEM中可行吗?我可以用htl来做这件事吗?
目前,这对我不起作用,我想有一些自动化正在进行,我不知道
我该怎么做
当结构简单时(没有嵌套的div),当添加子div时,它开始中断。不,这是不允许的,因为HTL脚本应该是有效的HTML(因此没有未完成的/有条件的标记)。不过,还有一些解决办法。让我们假设您的项目看起来像(JS使用可以测试的对象): 然后可以使用以下HTL脚本渲染它们:
<div class="big-item" data-sly-use.logic="logic.js">
<div class="small-item-wrapper" data-sly-test="${logic.list.length > 0}">
<div class="additional-div">
<div class="small-item" data-sly-repeat="${logic.list @ begin=0, end=3}">
<div>${item}</div>
</div>
</div>
</div>
<div class="small-item-wrapper" data-sly-test="${logic.list.length > 4}">
<div class="additional-div">
<div class="small-item" data-sly-repeat="${logic.list @ begin=4, end=7}">
<div>${item}</div>
</div>
</div>
</div>
<div class="small-item-wrapper" data-sly-test="${logic.list.length > 8}">
<div class="additional-div">
<div class="small-item" data-sly-repeat="${logic.list @ begin=8, end=11}">
<div>${item}</div>
</div>
</div>
</div>
<div class="small-item-wrapper" data-sly-test="${logic.list.length > 12}">
<div class="additional-div">
<div class="small-item" data-sly-repeat="${logic.list @ begin=12, end=15}">
<div>${item}</div>
</div>
</div>
</div>
</div>
<div class="big-item">
<div class="small-item-wrapper" data-sly-repeat.marker="${logic.markers}">
<div class="additional-div">
<div class="small-item" data-sly-repeat="${logic.list @ begin=marker[0], end=marker[1]}">
<div>${item}</div>
</div>
</div>
</div>
</div>
和相应的HTL脚本:
<div class="big-item" data-sly-use.logic="logic.js">
<div class="small-item-wrapper" data-sly-test="${logic.list.length > 0}">
<div class="additional-div">
<div class="small-item" data-sly-repeat="${logic.list @ begin=0, end=3}">
<div>${item}</div>
</div>
</div>
</div>
<div class="small-item-wrapper" data-sly-test="${logic.list.length > 4}">
<div class="additional-div">
<div class="small-item" data-sly-repeat="${logic.list @ begin=4, end=7}">
<div>${item}</div>
</div>
</div>
</div>
<div class="small-item-wrapper" data-sly-test="${logic.list.length > 8}">
<div class="additional-div">
<div class="small-item" data-sly-repeat="${logic.list @ begin=8, end=11}">
<div>${item}</div>
</div>
</div>
</div>
<div class="small-item-wrapper" data-sly-test="${logic.list.length > 12}">
<div class="additional-div">
<div class="small-item" data-sly-repeat="${logic.list @ begin=12, end=15}">
<div>${item}</div>
</div>
</div>
</div>
</div>
<div class="big-item">
<div class="small-item-wrapper" data-sly-repeat.marker="${logic.markers}">
<div class="additional-div">
<div class="small-item" data-sly-repeat="${logic.list @ begin=marker[0], end=marker[1]}">
<div>${item}</div>
</div>
</div>
</div>
</div>
${item}
谢谢您的回答,非常感谢。因此,在我看来,处理这个问题的最佳方法是在对话框中重新建模数据。感谢您的详细解释,我不知道js逻辑片段的用法。