Populate dropdown with tag values | Community
Skip to main content
February 23, 2017
Solved

Populate dropdown with tag values

  • February 23, 2017
  • 6 replies
  • 4113 views

Hi ,

I have requirement to populate the tags values to drop down in AEM 6.2 and in AEM 5.6.1. 

Any suggestions please.

 

Thanks

This post is no longer active and is closed to new replies. Need help? Start a new post to ask your question.
Best answer by smacdonald2008

What you need to do is using TagManager API - as talked about here: 

http://scottsdigitalcommunity.blogspot.ca/2016/06/developing-sightly-component-that.html

You can use custom tag libs too: 

http://scottsdigitalcommunity.blogspot.ca/2016/05/using-custom-tag-libraries-to-search.html

6 replies

Prince_Shivhare
Community Advisor
Community Advisor
February 23, 2017

Hi,

Can look into this article:

It can help you.

http://adobeaemclub.com/populate-tags-based-on-selection-in-pathfield-classic-ui/

 

~ Prince

dragon2AAuthor
February 23, 2017

Hi Prince,

Thanks for the response. 

 I guess that one is like populating the cq:tags from the jcr content.I am trying to populate specific section of tags dropdown.

 

Thanks

sandeepm744005
March 3, 2017

Similiar requirement i have to achieve, please let me know if there is any way ?

smacdonald2008
smacdonald2008Accepted solution
March 3, 2017
kautuk_sahni
Community Manager
Community Manager
March 6, 2017

Adding on top of what scott has mentioned, i would to share with you one article which really help you start developing with TagManager APis

Link:- http://labs.6dglobal.com/blog/2016-09-05/a-primer-on-programmatic-tagging-in-aem/

Link:- http://www.programcreek.com/java-api-examples/index.php?api=com.day.cq.tagging.TagManager

~kautuk

Kautuk Sahni
yoanns60676056
March 7, 2017
<dropDownTags        cq:showOnCreate="{Boolean}true"        jcr:primaryType="nt:unstructured"        sling:resourceType="granite/ui/components/foundation/form/autocomplete"        allowBulkEdit="{Boolean}true"        cq-msm-lockable="cq:tags"        emptyText="Add Tags"        fieldLabel="Tag"        metaType="tags"        multiple="{Boolean}true"        name="./tag"        renderReadOnly="{Boolean}true">    <datasource jcr:primaryType="nt:unstructured"                sling:resourceType="datasourceTags"/>    <values            jcr:primaryType="nt:unstructured"            sling:resourceType="granite/ui/components/foundation/form/autocomplete/tags"            multiline="{Boolean}true"/>    <options            jcr:primaryType="nt:unstructured"            sling:resourceType="granite/ui/components/foundation/form/autocomplete/list"/></dropDownTags>

 

Servlet

@SlingServlet(methods = "GET",        resourceTypes = "datasourceTags")public class DatasourceTags extends SlingAllMethodsServlet {private static final Logger LOGGER = LoggerFactory.getLogger(DatasourceTheme.class);    protected void doGet(SlingHttpServletRequest slingRequest, SlingHttpServletResponse response)throws ServletException, IOException {final ResourceResolver resourceResolver = slingRequest.getResourceResolver();        TagManager tm = resourceResolver.adaptTo(TagManager.class);        List<Tag> tags = new ArrayList<Tag>();        String path = "";        if (slingRequest.getRequestParameter("item") != null) { path = slingRequest.getRequestParameter("item").getString();        } else { String referer = slingRequest.getHeader("Referer");            if (StringUtils.isNotEmpty(referer)) { path = referer.substring(referer.indexOf(".html"));            } }if (path != null) { String[] parts = path.split("/");            if (resourceResolver.getResource("/etc/tags/tags_theme/" + parts[2]) != null) { Tag pageTags = resourceResolver.getResource("/etc/tags/tags_theme/" + parts[2]).adaptTo(Tag.class);                if (pageTags != null) {for (Tag tag : Lists.newArrayList(pageTags.listChildren())) { tags.add(tag);                    } } } }final Locale locale = slingRequest.getLocale();        final ResourceResolver resolver = resourceResolver;        @SuppressWarnings("unchecked") DataSource ds = new SimpleDataSource(new TransformIterator(tags.iterator(), new Transformer() {public Object transform(Object o) { Tag tag = (Tag) o;                String tagId = tag.getTagID();                ValueMap vm = new ValueMapDecorator(new HashMap<String, Object>());                vm.put("value", tagId);                vm.put("text", tag.getTitle(locale));                return new ValueMapResource(resolver, new ResourceMetadata(), "nt:unstructured", vm);            } }));        slingRequest.setAttribute(DataSource.class.getName(), ds);    } }

Hi, you need to feed a ValueMap thanks to a data source in a servlet that extends SlingAllMethodsServlet then use this datasource as parameter in your _cq_dialog/.content.xml. Don't forget to replace 

tags_theme

by your own section name.

Was this usefull ?