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

あるページから別のページにparsysを参照しようとしている場合は、すぐに使用できる参照コンポーネントを使用します。このコンポーネントは、サイトの任意の場所にあるコンポーネントへのパスを受け入れ、選択したページに表示します。

于 2013-03-14T17:06:50.793 に答える
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 に答える