如何在 aem 的 next/previous 页面上 navigate/browse?
How to navigate/browse on next/previous page in aem?
我正在 AEM 6.3 中开发页面。现在我有一种情况要开发一个包含 2 个链接的页面,这些链接浏览到与当前页面相关的下一页和上一页。假设我的项目站点 /content/project/en 下有 3 个页面。
- A页
- B页
- C页
假设,如果我在B页,那么我的下一页应该是C页,上一页应该是A页。这两个链接 (next/previous) 应该将我重定向到 Page A 和 Page B。
可能有很多方法可以做到这一点,但我的想法是,我将发出一个 ajax get 请求,该请求将 return 我在 [= 中的下一页和上一页52=] 格式。为此,我将使用 sling servlet 对象获取页面路径,并使用查询生成器对该路径进行查询以获取下一页和上一页。这种方法在页面数量非常有限的情况下效果很好,但如果页面增加就会很耗时。
我想要一个简单的解决方案来实现它。或者 aem 中是否有任何插件可以执行此操作?我也尝试用 currentPage.nextSibling() 直接做到这一点,但 aem 中不存在这样的东西。
一个可能的解决方案是创建一个终点 -
- 可以在页面上调用
- returns 页面路径(使用 page.listChildren())作为 JSON 数组
两种方法 -
- 在您的应用程序的基础页面中,添加呈现 json
的 jsp listChildren.jsp
- 使用选择器
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
我正在 AEM 6.3 中开发页面。现在我有一种情况要开发一个包含 2 个链接的页面,这些链接浏览到与当前页面相关的下一页和上一页。假设我的项目站点 /content/project/en 下有 3 个页面。
- A页
- B页
- C页
假设,如果我在B页,那么我的下一页应该是C页,上一页应该是A页。这两个链接 (next/previous) 应该将我重定向到 Page A 和 Page B。
可能有很多方法可以做到这一点,但我的想法是,我将发出一个 ajax get 请求,该请求将 return 我在 [= 中的下一页和上一页52=] 格式。为此,我将使用 sling servlet 对象获取页面路径,并使用查询生成器对该路径进行查询以获取下一页和上一页。这种方法在页面数量非常有限的情况下效果很好,但如果页面增加就会很耗时。
我想要一个简单的解决方案来实现它。或者 aem 中是否有任何插件可以执行此操作?我也尝试用 currentPage.nextSibling() 直接做到这一点,但 aem 中不存在这样的东西。
一个可能的解决方案是创建一个终点 -
- 可以在页面上调用
- returns 页面路径(使用 page.listChildren())作为 JSON 数组
两种方法 -
- 在您的应用程序的基础页面中,添加呈现 json 的 jsp
- 使用选择器
listChildren
和扩展名json
创建一个基于 resourceType 的 servlet。 ResourceType 是页面的资源类型myapp/page/testpage
listChildren.jsp
在正在呈现的页面的父页面上调用此端点,从而获得所有兄弟页面路径和当前页面路径的列表。您可以使此端点可捕获,以避免多次发布命中。
一旦得到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