在 AEM 应用程序中生成标记 building-tagging-into-aem-applications
为了以编程方式使用自定义AEM应用程序中的标记或扩展标记,本文档介绍了如何使用
会与
有关标记的相关信息:
- 请参阅 使用标记 有关将内容标记为内容作者的信息。
- 有关创建和管理标记以及已对哪些内容应用标记的信息,请参阅管理标记。
标记API概述 overview-of-the-tagging-api
实施 标记框架 AEM中的,允许使用JCR API管理标记和标记内容。 TagManager
确保在 cq:tags
字符串数组属性不重复,它会删除 TagID
s指向不存在的标记和更新 TagID
用于移动或合并的标记。 TagManager
使用JCR观察侦听器来还原任何不正确的更改。 主类位于 com.day.cq.tagg 包:
JcrTagManagerFactory
— 返回基于JCR的TagManager
. 它是标记API的参考实施。TagManager
— 允许按路径和名称解析和创建标记。Tag
— 定义标记对象。
获取基于JCR的标签管理器 getting-a-jcr-based-tagmanager
检索 TagManager
例如,您需要拥有JCR Session
并调用 getTagManager(Session)
:
@Reference
JcrTagManagerFactory jcrTagManagerFactory;
TagManager tagManager = jcrTagManagerFactory.getTagManager(session);
在典型的Sling上下文中,您还可以适应 TagManager
从 ResourceResolver
:
TagManager tagManager = resourceResolver.adaptTo(TagManager.class);
检索标记对象 retrieving-a-tag-object
A Tag
可通过 TagManager
,通过解析现有标记或创建现有标记:
Tag tag = tagManager.resolve("my/tag"); // for existing tags
Tag tag = tagManager.createTag("my/tag"); // for new tags
对于基于JCR的实施,其映射了 Tags
转到JCR Nodes
,您可以直接使用Sling adaptTo
机制(如果您有资源,例如 /content/cq:tags/default/my/tag
):
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-and-setting-tags
// Getting the tags of a Resource:
Tag[] tags = tagManager.getTags(resource);
// Setting tags to a Resource:
tagManager.setTags(resource, tags);
搜索标记 searching-for-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
删除标记 deleting-tags
tagManager.deleteTag(tag);
复制标记 replicating-tags
可以使用复制服务(Replicator
),因为标记的类型为 nt:hierarchyNode
:
replicator.replicate(session, replicationActionType, tagPath);
标记垃圾收集器 the-tag-garbage-collector
标记垃圾收集器是一种后台服务,用于清理隐藏和未使用的标记。 隐藏和未使用的标记是以下标记 /content/cq:tags
具有 cq:movedTo
属性和,而不在内容节点上使用。 他们的数量为零。 通过使用这种延迟删除流程,内容节点(即 cq:tags
属性)不必作为移动或合并操作的一部分进行更新。 中的引用 cq:tags
属性在以下情况下自动更新 cq:tags
例如,通过页面属性对话框更新属性。
默认情况下,标记垃圾回收器每天运行一次。 这可以在以下位置配置:
http://<host>:<port>/system/console/configMgr/com.day.cq.tagging.impl.TagGarbageCollector
标记搜索和标记列表 tag-search-and-tag-listing
搜索标记和标记列表的工作方式如下:
- 搜索
TagID
搜索具有属性的标记cq:movedTo
设置为TagID
并遵循cq:movedTo
TagID
s. - 搜索标记标题只会搜索没有的标记
cq:movedTo
属性。
不同语言的标记 tags-in-different-languages
标记 title
可以用不同的语言定义。 然后,将区分语言的属性添加到标记节点。 此属性的格式为 jcr:title.<locale>
例如, jcr:title.fr
法文版的。 <locale>
必须为小写ISO区域设置字符串并使用下划线(_
)而不是连字符/短划线(-
),例如: de_ch
.
例如,当 动物 标记将添加到 产品 页面,值 stockphotography:animals
添加到属性 cq:tags
节点的 /content/wknd/en/products/jcr:content
. 将从标记节点中引用翻译。
服务器端API已本地化 title
相关方法:
-
getLocalizedTitle(Locale locale)
getLocalizedTitlePaths()
getLocalizedTitles()
getTitle(Locale locale)
getTitlePath(Locale locale)
-
canCreateTagByTitle(String tagTitlePath, Locale locale)
createTagByTitle(String tagTitlePath, Locale locale)
resolveByTitle(String tagTitlePath, Locale locale)
在AEM中,可以从页面语言或用户语言获取语言。
对于标记,本地化取决于作为标记的上下文 titles
能够以页面语言、用户语言或任何其他语言显示。
向“编辑标记”对话框添加新语言 adding-a-new-language-to-the-edit-tag-dialog
以下过程介绍如何向添加新的语言(例如,芬兰语) 标记编辑 对话框:
- 在 CRXDE,编辑多值属性
languages
节点的/content/cq:tags
. - 添加
fi_fi
,表示芬兰语区域设置,并保存更改。
芬兰语现在可在页面属性的标记对话框中以及 编辑标记 对话框。 标记 控制台。
/libs/wcm/core/resources/languages
.