如何在组件对话框中过滤标签。 Adobe CQ

时间:2015-09-23 00:17:17

标签: cq5 xtype

我正在尝试过滤组件对话框中的标签。我知道我可以通过命名空间过滤它,但这仅适用于根级别。我可以将标签选择过滤一层吗?

例如:

    • 标记
      • 命名空间
        • 文章型
          • 博客
          • 消息
        • 资产类型
          • 图像
          • 视频

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

谢谢,

1 个答案:

答案 0 :(得分:3)

是和否。根据小部件API,您可以正式进行更深入的操作,但Widget JavaScript文件中存在一个“错误”,导致其无法正常工作。我遇到了同样的问题,我只是覆盖了这个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以下的一个标签;您可以使用maximum属性限制数字。 asset-type没有限制。因此,请选择适合您需求的选项。

JavaScript覆盖:

要使其发挥作用,您需要更改CQ.tagging.parseTag中的方法/libs/cq/tagging/widgets/source/CQ.tagging.js

// 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;
};