我创建了一个名为annotation
的按钮,并添加了hasannotation
OOTB花岗岩渲染条件。选择具有注释的图像时,按钮不会呈现。
Image Of the custom button with granite:rendercondition
答案 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}并未提供资产的实际路径,而是提供了文件夹路径,因此无法检查您何时处于卡/列/列表视图中。
要实现此目的,请按照以下步骤操作:
将以下代码添加到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");
}
向您的自定义按钮添加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}