以编程方式安排aem 6.4中的内容

问题描述 投票:2回答:2

大家。我是与aem合作的新手。我正在使用aem 6.4。我的任务是根据JSON文件的内容以编程方式对cq:projectaem内容的顺序进行排序。应将JSON文件的内容设置为初始子项,而不是按创建日期排序的子项。

这是我的cq:page的当前结构。如果child2是JSON文件中指示的那个,则它应该是第一个要显示的文件。 JSON文件的内容只是一个子项的名称,因此即使有10个子项,JSON文件的内容也应始终是列表中的第一个。

enter image description here

我花了几个小时研究如何实现这个,虽然我仍然找不到任何解决方案。关于如何创建这个的任何见解?谢谢!

java adobe aem cq5 aem-6
2个回答
0
投票

据我了解,您想要一种方法来命令cq:Page的命名子项成为列表中的第一个。

这是可能的,因为cq:Page是一个orderable节点。否则这是不可能的。你在CRX Explorer中检查任何nodetype。

我认为添加关于JSON的一点使问题复杂化。您只需要一个简单的方法,如下所示:

private void orderAsFirstChild(String childName, Node parentNode) throws RepositoryException {
    if (parentNode.hasNode(childName)) {

      // find current first child name
      String firstChildName = Optional.ofNullable(parentNode.getNodes())
          .map(NodeIterator::nextNode)
          .map(node -> {
            try {
              node.getName();
            } catch (RepositoryException e) {
              e.printStackTrace();
            }
            return (String) null;
          }) //
          .orElse(null);
      parentNode.orderBefore(childName, firstChildName);
    }
  }

你可能应该稍微清理一下,但这是使用Node#orderBefore的一般想法


0
投票

这可能有所帮助 -

  1. 从父节点获取子节点。(你将获得'iterator'将其转换为list-Convert Iterator to ArrayList
  2. 立即删除所有子节点。并保持以上列表的备份。遍历列表,确定首先要放置的节点(通过标题或其他属性)将其添加到单独的集合(LinkedHashSet-以维护顺序)。
  3. 现在在上面的集合中的特定节点之后以相同的顺序添加剩余的项目/节点。(您可能需要再次迭代)
  4. 现在,此Set具有您想要的顺序的节点/资源,迭代,创建节点并保存您的更改。
© www.soinside.com 2019 - 2024. All rights reserved.