4

我正在遍历所有子页面以显示它们的标题和链接。但我还需要显示第一个段落节点(如果存在)。

例如,哇,我会从以下内容页面检索第一个 PAR 节点吗?

/content
  /foo
     /jcr:content
        /title
        /par <- need this one
        /par
        /image

我认为Page 类 getProperties().get()方法会起作用,但我只看到在 jcr:content 中返回属性的示例,而不是它下面的任何子节点。

    ArrayList aChildren = new ArrayList();
    String listroot = properties.get("listRoot", currentPage.getPath());

    Page rootPage = pageManager.getPage(listroot);
    if (rootPage != null) {
        Iterator<Page> children = rootPage.listChildren(new PageFilter(request));

        while (children.hasNext()) {
            Page child = children.next();

            out.println( child.getTitle() + "<br>" );
            //Output first PAR tag of this page here
        }

    }

这可以使用或其他特定于 CQ 的标签来完成,或者这是 java 函数的工作吗?

4

4 回答 4

9

您必须遍历子页面的子节点。

获取资源类型为 parsys 的第一个节点。拥有该节点后,您可以获取其路径并将其包含在当前页面中。

Resource childResource = resourceResolver.getResource(child.getPath());
Node childNode = childResource.adaptTo(Node.class);
Node jcrContent = childNode.getNode("jcr:content");
NodeIterator childrenNodes = jcrContent.getNodes();

while(childrenNodes.hasNext()){
    Node next = childrenNodes.nextNode();
    String resourceType = next.getProperty("sling:resourceType").getString();
    if(resourceType.equals("foundation/components/parsys")){
        %><cq:include path="<%= next.getPath() %>" resourceType="foundation/components/parsys" /><%
        break;
    }
}

这将在当前页面上嵌入子页面上的第一个 parsys 组件。我没有对此进行测试,因此可能需要进行一些修改才能使其正常工作。

于 2013-03-14T16:59:38.640 回答
2

你也可以试试这个:

<%@page session="false" import="com.day.cq.wcm.foundation.Paragraph,
                                com.day.cq.wcm.foundation.ParagraphSystem"%>
<%
ParagraphSystem parSys = ParagraphSystem.create(resource, slingRequest);
for (Paragraph par: parSys.paragraphs()){

有了这个,您可以遍历当前资源下的 parsys 节点。

于 2013-03-15T14:03:11.043 回答
1

CQ5 存储库中的每个节点都可以表示为一个Resource。您可以使用以下代码获取资源

//resolver being instance of org.apache.sling.api.resource.ResourceResolver
Resource paraResource = resolver.getResource("path of the paragraph");

然后你可以对资源进行操作

于 2013-03-14T15:57:22.637 回答
1

如果您尝试将 parsys 从一页引用到另一页,我会使用开箱即用的引用组件。该组件接受您站点上任何位置的组件路径,并将其显示在您选择的页面上。

于 2013-03-14T17:06:50.793 回答