我正在尝试过滤组件对话框中的标签。我知道我可以按名称空间过滤它,但是这只适用于根级别。我可以更深入地过滤标签选择吗?
例如:- 等
- 标签
- 名称空间
- 文章类型
- 资产类型
- 文章类型
- 名称空间
- 标签
我想过滤组件对话框中的标签,以便用户只能选择'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
没有限制。所以选择适合你需要的选项。
要使此工作,您需要更改/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;
};