我正在使用 AEM 6.3 开发页面。现在,我有一种情况要开发一个页面,其中包含2个链接,分别浏览到下一页和上一页以及当前页面。假设我在项目站点 / content / project / en 下有3个页面。
假设,如果我位于页面B 上,那么我的下一页应该是页面C ,上一页应该是页面A 。这两个链接(下一个/上一个)应该将我重定向到页面A 和页面B 。
可能有很多方法可以做到这一点,但是我要记住的是,我将发出ajax get请求,该请求将以键/值格式返回下一页和上一页。为此,我将使用sling servlet对象获取页面路径,并使用查询生成器在该路径上进行查询以获取下一页和上一页。如果页面数量非常有限,则此方法效果很好,但如果页面增加,则将很耗时。
我想要一个简单的解决方案来实现这一目标。还是aem中有任何插件可以做到这一点?我还尝试使用 currentPage.nextSibling()来做到这一点,但是aem中没有这样的东西。
答案 0 :(得分:0)
一种可能的解决方案是创建一个端点-
两种方法-
listChildren.jsp
listChildren
和扩展名json
创建一个基于resourceType的servlet。 ResourceType是页面的resourceType myapp/page/testpage
在要呈现的页面的父页面上调用此终结点,这样您就可以获得所有同级页面路径和当前页面路径的列表。您可以将此端点设置为可捕获的,从而避免多次发布。
一旦获得JSON,请在JS中使用它来获取当前页面路径的索引(使用find(‘path/to/current/page)
)。一旦有了索引,就可以使用index-1和index + 1来获取上一页和下一页的路径。
注意-如果您在网站网址中使用短路径,请确保JSON也返回短路径
答案 1 :(得分:0)
作为新要求的补充,应将下一个/上一个链接上的页面与当前页面相对应的创建日期排序。所以我想出了以下解决方案。
我已经创建了一个组件名称“ 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