【问题标题】:How to navigate/browse on next/previous page in aem?如何在 aem 中导航/浏览下一页/上一页?
【发布时间】:2018-10-02 20:04:29
【问题描述】:

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

  • A页
  • 页面 B
  • C页

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

可能有很多方法可以做到这一点,但我想到的是,我将发出一个 ajax get 请求,它将以键/值格式返回我的下一页和上一页。为此,我将使用 sling servlet 对象来获取页面路径,并使用查询构建器在该路径上进行查询以获取下一页和上一页。如果页面数量非常有限,则此方法可以正常工作,但如果页面增加,则会很耗时。

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

【问题讨论】:

  • 你可以使用 page.listChildren() helpx.adobe.com/experience-manager/6-3/sites/developing/using/… 然后在页面间移动
  • 是的可以使用它,但我必须在每个页面上迭代 page.listChildren()。如果我没记错的话,那也很耗时。
  • @JunaidZubair nope,listChildren() 在这种情况下会比查询更快,因为您只列出第一级子级。请参阅最佳实践中概述的 when to use JCR queries
  • @JunaidZubair 您的页面最终将被缓存在调度程序中。因此,如果路径设置正确,这将是每次缓存创建的一次活动。

标签: java aem


【解决方案1】:

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

  • 可以在页面上调用
  • 以 JSON 数组形式返回页面路径(使用 page.listChildren())

两种方法-

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

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

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

注意 - 如果您使用网站网址的短路径,请确保 JSON 也返回短路径

【讨论】:

  • 这可以解决问题,但我有新的要求。现在我必须根据页面创建日期的某些条件获取下一页/上一页。
【解决方案2】:

作为新要求的补充,下一个/上一个链接上的页面应按当前页面的创建日期排序。所以我想出了以下解决方案。

我创建了一个组件名称“下一个上一个分页”,并使用了一个 HTML 语言的 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-27
    • 2021-08-28
    • 2016-03-18
    • 2012-07-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多