將標記內建至 AEM 應用程式中 building-tagging-into-aem-applications

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

會與

有關標籤的相關資訊:

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

標籤API的總覽 overview-of-the-tagging-api

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

  • JcrTagManagerFactory — 傳回TagManager的JCR型實作。 此版本為「標籤API」的參考實作。
  • TagManager — 允許依路徑和名稱解析及建立標籤。
  • Tag — 定義標籤物件。

取得JCR型TagManager getting-a-jcr-based-tagmanager

若要擷取TagManager執行個體,您必須有JCR Session並且呼叫getTagManager(Session)

@Reference
JcrTagManagerFactory jcrTagManagerFactory;

TagManager tagManager = jcrTagManagerFactory.getTagManager(session);

在一般Sling內容中,您也可以從ResourceResolver調整TagManager

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

擷取標籤物件 retrieving-a-tag-object

可透過TagManager透過解析現有標籤或建立標籤來擷取Tag

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

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

對於將Tags對應到JCR Nodes的JCR型實作,如果您有資源(例如/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);
NOTE
無法直接從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);
NOTE
要使用的有效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的標籤。
  • 搜尋標籤標題只會搜尋沒有cq:movedTo屬性的標籤。

不同語言的標籤 tags-in-different-languages

標籤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可以頁面語言、使用者語言或任何其他語言顯示。

新增語言至編輯標籤對話方塊 adding-a-new-language-to-the-edit-tag-dialog

下列程式說明如何新增語言(例如,芬蘭文)至​ 標籤編輯 ​對話方塊:

  1. 在​ CRXDE ​中,編輯節點/content/cq:tags的多值屬性languages
  2. 新增fi_fi (代表芬蘭語言環境)並儲存變更。

在​ 標籤 ​主控台中編輯標籤時,現在可以在頁面屬性的標籤對話方塊和​ 編輯標籤 ​對話方塊中使用芬蘭文。

NOTE
新語言必須是AEM認可的語言之一。 也就是說,它必須能做為/libs/wcm/core/resources/languages以下的節點。
recommendation-more-help
fbcff2a9-b6fe-4574-b04a-21e75df764ab