AEM中的OOTB花岗岩渲染条件

AEM中的OOTB花岗岩渲染条件,aem,Aem,我创建了一个名为annotation的按钮,并添加了hasannotation OOTB granite渲染条件。在选择具有注释的图像时,不会渲染该按钮。 首先,需要将granite:rel属性添加到按钮中。 正如报告中所说: 这用于指示组件的语义关系 类似于HTMLrel属性 您可以在自定义按钮中添加AEM现有granite:rel作为AEM资产管理操作注释激活器,如图/libs/dam/gui/content/assets/jcr:content/actions/selection/ann

我创建了一个名为annotation的按钮,并添加了hasannotation OOTB granite渲染条件。在选择具有注释的图像时,不会渲染该按钮。


首先,需要将granite:rel属性添加到按钮中。 正如报告中所说:

这用于指示组件的语义关系 类似于HTMLrel属性

您可以在自定义按钮中添加AEM现有granite:rel作为AEM资产管理操作注释激活器,如图/libs/dam/gui/content/assets/jcr:content/actions/selection/annotate所示

或者,您也可以添加自定义值,例如my annotation rel。在这种情况下,您需要告诉AEM考虑您的自定义值。为此,需要覆盖/libs/dam/gui/coral/components/admin/contentrenderer/base/assetBase.jsp 并添加以下行:

 actionRels.add("my-annotation-rel");
更新:渲染条件不工作,因为路径未正确传递到重新条件组件。{requestPathInfo.suffix}不提供资产的实际路径,而是提供文件夹路径,因此当您处于“卡片/列/列表”视图中时,它无法检查

为了实现这一点,请执行以下步骤:

Overlay/libs/dam/gui/coral/components/admin/contentrenderer/base/base.jsp 在getActionRelsNode节点、boolean hasReplicate、boolean hasRemoveNode、boolean hasModifyAccessControl、boolean isExpiredAsset、boolean isExpiredSubAsset、boolean IsdAdmin、boolean isContentFragment方法中添加以下代码

boolean hasAnnotation = false;
NodeIterator nodeItr= node.getNodes();

  Node commentsNode;
  while(nodeItr.hasNext()) {
      Node childNode = nodeItr.nextNode();
      NodeIterator childItr = childNode.getNodes();
      while(childItr.hasNext()) {
          Node secondLevelChild = childItr.nextNode();
          if(secondLevelChild.getName().equals("comments")) {
              NodeIterator thirdLevelNode = secondLevelChild.getNodes();    
              while(thirdLevelNode.hasNext()){
              if(thirdLevelNode.nextNode().hasProperty("annotationData")){
                   hasAnnotation = true;
                 }
              }
           }
      }
    }
    if(hasAnnotation){
            actionRels.add("my-annotation-rel");
  }
将granite:rel字符串my annotation rel属性添加到自定义按钮

它应该会起作用

另一种不改变OOTB jsp文件行为的方法是,如果您正在自定义metadataeditor,那么granite呈现条件应该可以工作。在这种情况下,您必须首先覆盖此按钮和自定义按钮:

 /libs/dam/gui/content/assets/metadataeditor/jcr:content/actions
并在自定义按钮下添加granite:rendercondition节点,并将路径属性指定为

 ${empty requestPathInfo.suffix ? param.item : requestPathInfo.suffix}

hasanotations位于/libs/dam/gui/coral/components/commons/renderconditions/hasanotations/hasanotations.jsp中。它检查图像是否带有注释或不包含名为comment的子节点。如果有注释,则渲染按钮,否则不渲染。granit:rel将如何帮助渲染?如果您没有提到granit:rel,则菜单栏中的自定义按钮将不会显示,并且在您的渲染条件生效后,我已将属性添加到我的按钮中,在选择具有注释的图像时,按钮仍然不会显示。我必须清除缓存3-4次,然后对其进行渲染,再次,如果我单击任何其他图片,我必须清除缓存多次,然后将其隐藏。这是因为缓存问题还是渲染条件问题?我已经按照更新答案中提供的3个步骤进行了操作,但是在选择图像时,我仍然没有看到按钮在操作栏中被渲染。@ShaheenaSk,你可能做错了什么,它对我有效。请正确遵循这些步骤。