Hi Folks,
I have a page (pagea), this page exist in en, fr, and de
Now this page has 3 language copies
I need to fetch all the existing language copies of page, how would I fetch it using some API.
Please do not suggest below
http://localhost:4502/libs/wcm/core/content/pageinfo.json?path=/content/test/en/pagea
Any pointers is highly appreciated.
Thanks,
Pradeep
Solved! Go to Solution.
Views
Replies
Total Likes
Hello @pradeepdubey82
Please try following API:
for (final Page page : languagemanager.getLanguageRoots(res,
currentPagePath)) {
languagePages.put(page.getLanguage(false), page);
}
Here getLanguageRoots() should return all Language copies of current page. The relevant language details can then be retreived via page.getLanguage()
Hello @pradeepdubey82
You might want to explore LanguageManager API
It is used extensively in https://github.com/adobe/aem-core-wcm-components/blob/main/bundles/core/src/main/java/com/adobe/cq/w...
So, some good examples would be available in the java file.
I could not see any method in https://github.com/adobe/aem-core-wcm-components/blob/main/bundles/core/src/main/java/com/adobe/cq/w...
Which is giving list of language copies of current page.
My requirement is, let's say I am on pagea of en, then it should return list of language copies
/content/test/fr/pagea
/content/test/de/pagea
Please check this java doc for LiveRelationshipManager interface which provides methods to get live copies of the given resource (in your case page resource).
Hello @pradeepdubey82
Please try following API:
for (final Page page : languagemanager.getLanguageRoots(res,
currentPagePath)) {
languagePages.put(page.getLanguage(false), page);
}
Here getLanguageRoots() should return all Language copies of current page. The relevant language details can then be retreived via page.getLanguage()
I just implemented LanguageManager for the same use case as @pradeepdubey82.
getLanguageRoots() does not get the language copies, rather it gets the language roots in your site structure based on the provided page.
For the original example getLanguageRoots() on /content/test/en/pagea would return:
/content/test/fr
/content/test/de
but what is needed is:
/content/test/fr/pagea
/content/test/de/pagea
You could technically use this and do some string manipulation to the paths but there is a simpler solution.
Instead you should use getAdjacentLanguageInfo(). I was able to process the return value with this:
Map<Language, LanguageManager.Info> languagePages = (languageManager.getAdjacentLanguageInfo(Resolver, path));
for (Map.Entry<Language, LanguageManager.Info> entry : languagePages.entrySet()) {
String path = entry.getValue().getPath();
Page localePage = pageManager.getPage(entry.getValue().getPath());
...
...
...
}
Views
Replies
Total Likes
Hi @rkody
In author it works however in publisher its not working. How we can achieve this from publisher. Kindly suggest me.
Map<Language, LanguageManager.Info> languagePages = languageManager.getAdjacentLanguageInfo(resolver, bluePrintPage.getPath());
Here languagePages getting null pointer exception.
Views
Replies
Total Likes
Hi @neo-silicon ,
It's hard to say what the issue is without looking at the AEM instance. I have had some issues with null pointers because of permissions in the past so that might be a problem. Check the error logs for anything related.
Can you debug the publisher? If not, put some log statements on each part of your line of code and deploy.
i.e.
LOGGER.info("Page: {}", bluePrintPage);
LOGGER.info("Page path: {}", bluePrintPage.getPath());
LOGGER.info("Resolver: {}", resolver);
LOGGER.info("Language Manager: {}, languageManager");
Then you can check to see if any of these variables are null and go from there.
Views
Replies
Total Likes
Views
Likes
Replies
Views
Likes
Replies
Views
Likes
Replies
Views
Likes
Replies