how to get page path and title of child and grand child pages in aem
Can anyone help?
I have a path of a root page and I want to retrieve all the child pages of root page and grandchild and grandchild of root page. My structure is like this
rootPage
|
|
|---------childPage
|
|
|---------grandChildPage
2 answers
-
answered 2021-02-19 05:58
Roger
I think this should work.
public static void visitRecursively(Node node, Session currentSession) { try{ NodeIterator list = node.getNodes(); while(list.hasNext()) { Node childNode = list.nextNode(); // Verify child node for cqPage type if((childNode.hasProperty("jcr:primaryType")) && (childNode.getProperty("jcr:primaryType").getValue().getString()).equals("cq:Page") ){ Node jcrNode = childNode.getNode("jcr:content"); // Iterate some of the page properties String articleTitle="";String jcrDesc="";String jcrTitle="";String keywords=""; if(jcrNode.hasProperty("articleTitle")){ articleTitle = jcrNode.getProperty("articleTitle").getString(); log.info("articleTitle--->"+articleTitle); } if(jcrNode.hasProperty("jcr:description")){ jcrDesc = jcrNode.getProperty("jcr:description").getString(); log.info("jcr:description--->"+jcrDesc); } if(jcrNode.hasProperty("jcr:title")){ jcrTitle = jcrNode.getProperty("jcr:title").getString(); log.info("jcr:title--->"+jcrTitle); } if(jcrNode.hasProperty("keywords")){ keywords = jcrNode.getProperty("keywords").getString(); log.info("keywords--->"+keywords); } String pagePropertiesString = "articleTitle--->"+articleTitle + "jcr:description--->"+jcrDesc+"jcr:title--->"+jcrTitle + "keywords--->"+keywords ; log.info("Page Properties :---> Node "+ childNode.getName()+ "Properties : " + pagePropertiesString ); } visitRecursively(childNode,currentSession); } } catch (RepositoryException rpe){ log.info("Exception in recursive listing:"); }
-
answered 2021-02-23 18:50
Daniel Hernandez
You can easily do this with SlingQuery
final List<Resource> descendantPages = $(rootPage).("cq:Page").asList();
source: https://sling.apache.org/documentation/bundles/sling-query.html
or with a plain SQL2 query
final String query = "SELECT page.* FROM [cq:PageContent] AS page " + "WHERE ISDESCENDANTNODE(page, '%s')"; resolver.findResources(String.format(query, rootPage.getPath()), JCR_SQL2);
How many English words
do you know?
do you know?
Test your English vocabulary size, and measure
how many words do you know
Online Test
how many words do you know
Powered by Examplum