2015-09-23 2 views
2

Я пытаюсь отфильтровать теги в диалоге компонентов. Я знаю, что я могу отфильтровать его по пространству имен, однако это относится только к корневому уровню. Могу ли я отфильтровать выбор тегов на один уровень глубже?Как фильтровать теги в диалоге компонентов. Adobe CQ

, например:

  • и т.д.
    • теги
      • пространства имен
        • статья типа
          • блог
          • Новости
        • актив типа
          • изображение
          • видео

Я хочу отфильтровать теги в диалоге компонентов, чтобы пользователь мог выбирать теги под «article-type».

Thanks,

ответ

3

Да и нет. Официально вы можете пойти глубже в соответствии с API-интерфейсом виджета, но в файле 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; 
}; 
+0

Спасибо Томас! Вы изменили файл CQ.tagging.js в самой папке libs? Или вы создали надпись для нее? – mayurM

+0

@mayurM Я фактически перезаписываю сам исходный файл. Не уверен, что оверлей будет работать в этом случае, поскольку это JavaScript, который загружается через clientlibrarymanager. Но вы можете попробовать, если оверлей будет работать также – Thomas

+0

Не уверен, могу ли я задать этот вопрос или нет, я также работаю над тем же самым тегом в CQ5. Может ли кто-нибудь предложить мне, как изменить свойства ширины и высоты этого диалога. Я пробовал в tag.jsp и вкладке поля тега, но не использовал. – mchinta

 Смежные вопросы

  • Нет связанных вопросов^_^