在AEM應用程式中建立標籤

為了以程式設計方式使用自訂AEM應用程式中的標籤或擴充標籤,本檔案說明的使用

有關標籤的相關資訊:

  • 如需將內容標籤為內容作者的相關資訊,請參閱使用標籤
  • 請參閱管理標籤,以了解管理員關於建立和管理標籤的觀點,以及已套用哪些內容標籤。

標籤API概述

在AEM中實作標籤架構可使用JCR API管理標籤和標籤內容。 TagManager 確保在字串陣列屬性上輸入 cq:tags 為值的標籤不會重複,它會移 TagID除指向非現有標籤的標籤,以及移 TagID動或合併標籤的更新。TagManager 使用JCR觀察接聽程式來回復任何不正確的變更。主類位於com.day.cq.tagging包中:

  • JcrTagManagerFactory — 傳回以JCR為基礎的實作 TagManager。這是標籤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);

檢索標籤對象

透過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 TagIDs的標籤。
  • 搜尋標籤標題只會搜尋沒有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下方的節點。

本頁內容