将标记构建到AEM应用程序

为了在自定义AEM应用程序中以编程方式使用标签或扩展标签,本页介绍了

有关标记的相关信息,请参阅:

  • 管理 标签,以了解有关创建和管理标签以及已应用内容标签的信息。
  • 使用 标签,了解有关标记内容的信息。

Tagging API概述

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

  • JcrTagManagerFactory — 返回TagManager的基于JCR的实现。 它是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);

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

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);

在客户端上添加标签

CQ.tagging.TagInputField 是用于输入标记的表单构件。它有一个弹出菜单,用于从现有标记中进行选择,包括自动完成和许多其他功能。 其xtype为tags

标记垃圾收集器

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

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

http://localhost:4502/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/geometrixx/cn/products/jcr:content的属性cq:tags中。 转换从标记节点引用。

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

  • com.day.cq.taging.Tag

    • getLocalizedTitle(区域设置)
    • getLocalizedTitlePaths()
    • getLocalizedTitles()
    • getTitle(区域设置)
    • getTitlePath(区域设置)
  • com.day.cq.taging.TagManager

    • canCreateTagByTitle(String tagTitlePath, Locale)
    • createTagByTitle(String tagTitlePath, Locale)
    • resolveByTitle(String tagTitlePath, Locale区域设置)

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

  • 要在JSP中检索页面语言,请执行以下操作:

    • currentPage.getLanguage(false)
  • 要在JSP中检索用户语言,请执行以下操作:

    • slingRequest.getLocale()

currentPageslingRequest 通过标签在JSP中可 <cq:definedobjects> 用。

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

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

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

  1. 在​CRXDE​中,编辑节点/content/cq:tags的多值属性languages

  2. 添加fi_fi — 表示芬兰语区域设置 — 并保存更改。

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

注意

新语言必须是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