如何过滤AEM Granite UI路径浏览器中可见的页面?

时间:2017-01-16 13:31:27

标签: aem

在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

中找到对它的任何引用

该字段看起来像这样:

Path Browser field in a Touch UI dialog

点击它会显示一个很好的界面,可以选择页面或资产:

Path selection in the path browser field

如何过滤Touch UI路径浏览器中的可用页面?有没有办法让它使用之前定义的Predicate用于Classic UI?

1 个答案:

答案 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