将标记构建到AEM应用程序

为了在自定义AEM应用程序中以编程方式使用标签或扩展标签,本文档描述了

有关标记的相关信息:

  • 有关将内容标记为内容作者的信息,请参阅使用标记
  • 有关创建和管理标记以及已应用哪些内容标记的管理员观点,请参阅管理标记。

Tagging API概述

在AEM中实现标记框架允许使用JCR API管理标记和标记内容。 TagManager 确保在string array属性中作为值输 cq:tags 入的标记不会重复,它会删 TagID除指向非现有标记的标记,并更 TagID新已移动或合并的标记。TagManager 使用JCR观察侦听器,它还原任何不正确的更改。主类位于com.day.cq.taging包中:

  • JcrTagManagerFactory — 返回基于JCR的实 TagManager施它是Tagging API的参考实现。
  • TagManager — 允许按路径和名称解析和创建标记。
  • Tag — 定义标记对象。

获取基于JCR的TagManager

要检索TagManager实例,您需要JCR Session并调用getTagManager(Session):

@Reference
JcrTagManagerFactory jcrTagManagerFactory;

TagManager tagManager = jcrTagManagerFactory.getTagManager(session);

在典型的Sling上下文中,您还可以根据ResourceResolver调整TagManager:

TagManager tagManager = resourceResolver.adaptTo(TagManager.class);

检索Tag对象

可通过TagManager检索Tag,方法是解析现有标记或创建新标记:

Tag tag = tagManager.resolve("my/tag"); // for existing tags

Tag tag = tagManager.createTag("my/tag"); // for new tags

对于基于JCR的实现(将Tags映射到JCR Nodes),如果您有资源(例如/content/cq:tags/default/my/tag),则可以直接使用Sling的adaptTo机制:

Tag tag = resource.adaptTo(Tag.class);

虽然标记只能从​资源(而非节点)转换,但标记可以将​转换为​节点和资源:

Node node = tag.adaptTo(Node.class);
Resource node = tag.adaptTo(Resource.class);
注意

无法直接从Node调整为Tag,因为Node不实现Sling Adaptable.adaptTo(Class)方法。

获取和设置标记

// Getting the tags of a Resource:
Tag[] tags = tagManager.getTags(resource);

// Setting tags to a Resource:
tagManager.setTags(resource, tags);

搜索标记

// Searching for the Resource objects that are tagged with the tag object:
Iterator<Resource> it = tag.find();

// Retrieving the usage count of the tag object:
long count = tag.getCount();

// Searching for the Resource objects that are tagged with the tagID String:
 RangeIterator<Resource> it = tagManager.find(tagID);
注意

要使用的有效RangeIterator为:

com.day.cq.commons.RangeIterator

删除标记

tagManager.deleteTag(tag);

复制标记

可以将复制服务(Replicator)与标记一起使用,因为标记类型为nt:hierarchyNode:

replicator.replicate(session, replicationActionType, tagPath);

标记垃圾收集器

标记垃圾收集器是一种后台服务,用于清理隐藏和未使用的标记。 隐藏和未使用的标记是/content/cq:tags下面的标记,具有cq:movedTo属性,不在内容节点上使用。 他们的数为零。 通过使用此延迟删除过程,内容节点(即cq:tags属性)不必作为移动或合并操作的一部分进行更新。 在更新cq:tags属性时,cq:tags属性中的引用会自动更新,例如,通过页面属性对话框。

标记垃圾收集器默认每天运行一次。 可在以下位置进行配置:

http://<host>:<port>/system/console/configMgr/com.day.cq.tagging.impl.TagGarbageCollector

标记搜索和标记列表

搜索标记和标记列表的工作方式如下:

  • 搜索TagID将属性cq:movedTo设置为TagID并随后搜索cq:movedTo TagID的标签。
  • 搜索标记标题仅搜索没有cq:movedTo属性的标记。

不同语言的标签

标记title可以用不同语言定义。 然后,语言相关属性被添加到标记节点。 此属性的格式为jcr:title.<locale>,例如jcr:title.fr表示法语翻译。 <locale> 必须为小写ISO区域设置字符串,并使_用下划线()代替连字-符/短划线(),例如: de_ch.

例如,将​Animals​标记添加到​Products​页面时,值stockphotography:animals将添加到节点/content/wknd/en/products/jcr:content的属性cq:tags中。 转换从标记节点引用。

服务器端API已本地化title相关方法:

  • com.day.cq.tagging.Tag
    • getLocalizedTitle(Locale locale)
    • getLocalizedTitlePaths()
    • getLocalizedTitles()
    • getTitle(Locale locale)
    • getTitlePath(Locale locale)
  • com.day.cq.tagging.TagManager
    • canCreateTagByTitle(String tagTitlePath, Locale locale)
    • createTagByTitle(String tagTitlePath, Locale locale)
    • resolveByTitle(String tagTitlePath, Locale locale)

在AEM中,可以从页面语言或用户语言获取语言。

对于标记,本地化取决于上下文,因为标记titles可以以页面语言、用户语言或任何其他语言显示。

将新语言添加到“编辑标记”对话框

以下过程介绍如何向​标记编辑​对话框添加新语言(如芬兰语):

  1. 在​CRXDE​中,编辑节点/content/cq:tags的多值属性languages
  2. 添加fi_fi(表示芬兰语区域设置)并保存更改。

现在,在​标记​控制台中编辑标记时,页面属性的标记对话框和​编辑标记​对话框中均提供芬兰语。

注意

新语言必须是AEM认可的语言之一,即它必须作为/libs/wcm/core/resources/languages以下的节点可用。

On this page

Adobe Summit Banner

A virtual event April 27-28.

Expand your skills and get inspired.

Register for free
Adobe Summit Banner

A virtual event April 27-28.

Expand your skills and get inspired.

Register for free
Adobe Maker Awards Banner

Time to shine!

Apply now for the 2021 Adobe Experience Maker Awards.

Apply now
Adobe Maker Awards Banner

Time to shine!

Apply now for the 2021 Adobe Experience Maker Awards.

Apply now