我正在尝试实现自己的WCM导航组件版本,该组件的logic can be found here替代了我自己的逻辑:
import java.util.*;
import com.day.cq.wcm.api.Page;
import com.day.cq.wcm.api.PageFilter;
import com.adobe.cq.sightly.WCMUsePojo;
public class Navigation extends WCMUsePojo{
private Iterator<Page> items;
@Override
public void activate() throws Exception {
Page navRootPage = getCurrentPage().getAbsoluteParent(2);
items = navRootPage.listChildren(new PageFilter());
}
public Iterator<Page> getItems() {
return items;
}
}
HTL found here是相同的。
我能够遍历导航项目的第一层(深度4)。但是循环在item.html
中的这一行中断了:
<sly data-sly-test="${item.children.size > 0}" data-sly-call="${groupTemplate.group @ items = item.children}"></sly>
具体地说,item.children
似乎不起作用,即使它们是隐式的Sling对象。有什么想法为什么会破坏?
谢谢!
答案 0 :(得分:2)
在核心WCM组件中实现的Navigation
模型返回NavigationItem
的列表,该列表通过getChildren
方法公开其子级。这样您就可以使用item.children
从HTL / Sightly调用它。由于您的使用对象返回WCM Page
的列表,因此您需要使用listChildren
方法。您可以使用item.listChildren
从HTL / Sightly直接调用它。
通常,对于所有对象,您可以使用标准JavaBeans约定来调用属性获取器,请参见https://helpx.adobe.com/experience-manager/htl/using/use-api-java.html#Gettermethods。有关HTL / Sightly中AEM上下文中可用的所有对象的列表,请参见:https://helpx.adobe.com/experience-manager/htl/using/global-objects.html