AEM中的OOTB花岗岩渲染条件

时间:2019-03-05 06:25:44

标签: aem

我创建了一个名为annotation的按钮,并添加了hasannotation OOTB花岗岩渲染条件。选择具有注释的图像时,按钮不会呈现。
Image Of the custom button with granite:rendercondition

Properties of the button

Properties of granite:rendercondition node

1 个答案:

答案 0 :(得分:1)

首先,您需要在按钮上添加granite:rel属性。 如documentation中所述:

  

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

您可以在您的自定义按钮中将AEM现有的granite:rel添加为“ aem-assets-admin-actions-annotate-activator”,如/ 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");

更新:渲染条件不起作用,因为该路径未正确传递到redercondition组件。 {requestPathInfo.suffix}并未提供资产的实际路径,而是提供了文件夹路径,因此无法检查您何时处于卡/列/列表视图中。

要实现此目的,请按照以下步骤操作:

  1. 覆盖/libs/dam/gui/coral/components/admin/contentrenderer/base/base.jsp
  2. 将以下代码添加到getActionRels(Node node,boolean hasReplicate,boolean hasRemoveNode,boolean hasModifyAccessControl,boolean isExpiredAsset,boolean isExpiredSubAsset,boolean isDAMAdmin,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");
      }
    
  3. 向您的自定义按钮添加granite:rel(字符串)“ my-annotation-rel”属性

应该可以。

另一种无需更改OOTB jsp文件行为的方式,如果您要自定义metadataeditor,则花岗岩渲染条件应该可以工作。在这种情况下,您必须先将此按钮和您的自定义按钮重叠:

 /libs/dam/gui/content/assets/metadataeditor/jcr:content/actions

并在自定义按钮下添加granite:rendercondition节点,并将path属性指定为

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