如何在 aem 的 next/previous 页面上 navigate/browse?

How to navigate/browse on next/previous page in aem?

我正在 AEM 6.3 中开发页面。现在我有一种情况要开发一个包含 2 个链接的页面,这些链接浏览到与当前页面相关的下一页和上一页。假设我的项目站点 /content/project/en 下有 3 个页面。

假设,如果我在B页,那么我的下一页应该是C页,上一页应该是A页。这两个链接 (next/previous) 应该将我重定向到 Page APage B

可能有很多方法可以做到这一点,但我的想法是,我将发出一个 ajax get 请求,该请求将 return 我在 [= 中的下一页和上一页52=] 格式。为此,我将使用 sling servlet 对象获取页面路径,并使用查询生成器对该路径进行查询以获取下一页和上一页。这种方法在页面数量非常有限的情况下效果很好,但如果页面增加就会很耗时。

我想要一个简单的解决方案来实现它。或者 aem 中是否有任何插件可以执行此操作?我也尝试用 currentPage.nextSibling() 直接做到这一点,但 aem 中不存在这样的东西。

一个可能的解决方案是创建一个终点 -

  • 可以在页面上调用
  • returns 页面路径(使用 page.listChildren())作为 JSON 数组

两种方法 -

  1. 在您的应用程序的基础页面中,添加呈现 json
  2. 的 jsp listChildren.jsp
  3. 使用选择器 listChildren 和扩展名 json 创建一个基于 resourceType 的 servlet。 ResourceType 是页面的资源类型 myapp/page/testpage

在正在呈现的页面的父页面上调用此端点,从而获得所有兄弟页面路径和当前页面路径的列表。您可以使此端点可捕获,以避免多次发布命中。

一旦得到JSON,在JS中使用它来获取当前页面路径的索引(使用find(‘path/to/current/page))。一旦有了索引,就可以使用 index-1 和 index+1 来获取上一页和下一页路径。

注意 - 如果您使用网站的短路径 url 请确保 JSON 也 return 短路径

作为 next/previous link 页面上的新要求的补充,应根据当前页面的创建日期进行排序。所以我想出了以下解决方案。

我创建了一个名为 'Next Previous Pagination' 的组件,并使用了 htl 语言的 WCMUsePojo 模型。该模型负责获取当前页面的下一页和上一页。以下是获取下一页和上一页的 jcr 查询。

下一页,

select page.* from [cq:Page] AS page WHERE 
ISDESCENDANTNODE(page,'/content/project/myCurrentPage') 
AND page.[jcr:content/jcr:created] >= CAST('${createdDateOfCurrentPage}' AS 
DATE) AND NAME(page) <>'${currentPageName}' ORDER BY page. 
[jcr:content/jcr:created] asc Limit 1

上一页,

select page.* from [cq:Page] AS page WHERE 
ISDESCENDANTNODE(page,'/content/project/myCurrentPage') 
AND page.[jcr:content/jcr:created] <= CAST('${createdDateOfCurrentPage}' AS 
DATE) AND NAME(page) <>'${currentPageName}' ORDER BY page. 
[jcr:content/jcr:created] desc Limit 1