在AEM Classic UI中有pathfield
xtype,允许程序员指定predicate
属性以过滤可选页面。
predicate
属性的值确定路径域中显示的页面。有许多OOTB谓词,例如'hierarchy'
,'folder'
,'hierarchyNotFile'
等。
可以通过编写实现org.apache.commons.collections.Predicate
类的OSGi服务来提供自定义谓词。具体而言,实现由predicate.name
属性的值选择。
例如:
@Service(Predicate.class)
@Component(metatype = false)
@Properties(@Property(name = "predicate.name", value = "productPage"))
public class ProductPagePredicate extends com.day.cq.commons.predicate.AbstractNodePredicate {
@Override
public boolean evaluate(Node n) {
// return true or false depending on the state of the node
}
}
可以通过以下方式使用:
<productPath
jcr:primaryType="cq:Widget"
allowBlank="false"
predicate="[productPage]" <-- refers to the OSGi service
fieldLabel="Product"
name="./productPath"
xtype="pathfield"/>
有没有办法在相当于路径字段的Touch UI中实现类似的自定义级别?
我可以看到小部件granite/ui/components/foundation/form/pathbrowser
被许多OOTB组件(foundation/components/image
等)使用。它看起来像是新接口中路径字段的1:1替换。但是,我无法在Granite UI documentation for AEM 6.2
该字段看起来像这样:
点击它会显示一个很好的界面,可以选择页面或资产:
如何过滤Touch UI路径浏览器中的可用页面?有没有办法让它使用之前定义的Predicate
用于Classic UI?
答案 0 :(得分:5)
在AEM 6.2中,它的工作方式与之前相同,并且可以重用早期版本中创建的谓词。
您可以在geometrixx中找到示例:
/libs/foundation/components/reference/cq:dialog/content/items/column/items/reference
这是字段定义本身(为了这篇文章而序列化为XML)
<reference
fieldLabel="Reference"
jcr:primaryType="nt:unstructured"
name="./path"
predicate="nosystem"
rootPath="/content"
sling:resourceType="granite/ui/components/foundation/form/pathbrowser" />
您可以在此Geometrixx页面上查看使用此字段的组件的外观:
/content/geometrixx/en/company/bod/jcr:content/par/reference_1