为了以编程方式在自定义AEM应用程序中使用标记或扩展标记,本页介绍了
与
有关标记的相关信息,请参阅:
在AEM中实施标记框架后,可以使用JCR API管理标记和标记内容。 TagManager可确保在cq:tags
字符串数组属性中作为值输入的标记不重复,从而删除指向非现有标记的标记ID,并更新已移动或合并标记的标记ID。 TagManager使用JCR观察侦听器来还原任何不正确的更改。 主类位于com.day.cq.tagging包中:
TagManager
实施。 它是标记API的参考实施。TagManager
— 允许按路径和名称解析和创建标记。Tag
— 定义标记对象。要检索TagManager实例,您需要具有JCR Session
并调用getTagManager(Session)
:
@Reference
JcrTagManagerFactory jcrTagManagerFactory;
TagManager tagManager = jcrTagManagerFactory.getTagManager(session);
在典型的Sling上下文中,您还可以根据ResourceResolver
中的TagManager
进行调整:
TagManager tagManager = resourceResolver.adaptTo(TagManager.class);
通过解析现有标记或创建新标记,可通过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资源(而非节点)中转换,但标记可以从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/en/products/jcr:content的属性cq:tags
中。 转换从标记节点引用。
服务器端API已本地化了与title
相关的方法:
在AEM中,可以从页面语言或用户语言获取语言:
要在JSP中检索页面语言,请执行以下操作:
currentPage.getLanguage(false)
要在JSP中检索用户语言,请执行以下操作:
slingRequest.getLocale()
currentPage
和可 slingRequest
通过标记在JSP中使 <cq:definedobjects> 用。
对于标记,本地化取决于上下文,因为标记titles
可以以页面语言、用户语言或任何其他语言显示。
以下过程介绍如何向标记编辑对话框添加新语言(芬兰语):
在CRXDE中,编辑节点/content/cq:tags
的多值属性languages
。
添加fi_fi
— 表示芬兰语区域设置 — 并保存更改。
现在,在Tagging控制台中编辑标记时,页面属性的标记对话框和编辑标记对话框中都提供了新语言(芬兰语)。
新语言必须是AEM可识别的语言之一,即它需要作为/libs/wcm/core/resources/languages
下的节点提供。