如何在组件对话框中筛选标签.Adobe CQ



我正在尝试过滤组件对话框中的标签。我知道我可以按名称空间过滤它,但是这只适用于根级别。我可以更深入地过滤标签选择吗?

例如:

    • 标签
      • 名称空间
        • 文章类型
        • 资产类型

我想过滤组件对话框中的标签,以便用户只能选择'article-type'下的标签。

谢谢,

是,不是。官方的说法是,您可以根据小部件API进行更深入的操作,但是小部件JavaScript文件中有一个"bug"阻止了它的工作。我有同样的问题,我只是覆盖了这个JavaScript文件。

小部件定义:

<article jcr:primaryType="cq:Widget"
    fieldLabel="Article Type"
    name="./cq:tags"
    tagsBasePath="/etc/tags/namespace"
    xtype="tags">
    <namespaces jcr:primaryType="cq:WidgetCollection">
        <ns1 jcr:primaryType="nt:unstructured" maximum="1" name="article-type" />  
    </namespaces>  
</article>
<asset jcr:primaryType="cq:Widget"
    fieldLabel="Asset Type"
    name="./cq:tags"
    namespaces="[asset-type]"
    tagsBasePath="/etc/tags/offering"
    xtype="tags"/>

在这种情况下,只能选择article-type下面的一个Tag;您可以使用maximum属性限制该数量。asset-type没有限制。所以选择适合你需要的选项。

JavaScript覆盖:

要使此工作,您需要更改/libs/cq/tagging/widgets/source/CQ.tagging.js中的CQ.tagging.parseTag方法:

// private - splits tagID into namespace and local (also works for title paths)
CQ.tagging.parseTag = function(tag, isPath) {
    var tagInfo = {
        namespace: null,
        local: tag,
        getTagID: function() {
            return this.namespace + ":" + this.local;
        }
    };
    var tagParts = tag.split(':');
    if (tagParts[0] == 'article-type' || tagParts[0] == 'asset-type') {
        var realTag = tagParts[1];
        var pos = realTag.indexOf('/');
        tagInfo.namespace = realTag.substring(0, pos).trim();
        tagInfo.local = realTag.substring(pos + 1).trim();
    }
    else {
        // parse tag pattern: namespace:local
        var colonPos = tag.indexOf(isPath ? '/' : ':');
        if (colonPos > 0) {
            // the first colon ":" delimits a namespace
            // don't forget to trim the strings (in case of title paths)
            tagInfo.namespace = tag.substring(0, colonPos).trim();
            tagInfo.local = tag.substring(colonPos + 1).trim();
        }
    }
    return tagInfo;
};

最新更新