將標籤建置到AEM應用程式中 building-tagging-into-an-aem-application
若要以程式設計方式使用自訂AEM應用程式中的標籤或擴充標籤,本頁會說明如何使用
那個會與
如需關於標籤的相關資訊,請參閱:
標籤API的總覽 overview-of-the-tagging-api
AEM中標籤架構的實作允許使用JCR API管理標籤和標籤內容。 TagManager會確保在cq:tags
字串陣列屬性上作為值輸入的標籤不會重複,它會移除指向不存在標籤的TagID,並更新已移動或合併標籤的標籤ID。 TagManager會使用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);
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);
在使用者端上標籤 tagging-on-the-client-side
表單Widget CQ.tagging.TagInputField
用於輸入標籤。 它有一個彈出式選單,可供您從現有標籤中選取,包括自動完成和許多其他功能。 其xtype為tags
。
標籤記憶體回收器 the-tag-garbage-collector
標籤記憶體回收行程是一種背景服務,可清除隱藏且未使用的標籤。 隱藏和未使用的標籤是/content/cq:tags
以下的標籤,這些標籤具有cq:movedTo
屬性,而且未用於內容節點 — 它們的計數為零。 透過使用這個延遲刪除程式,內容節點(即cq:tags
屬性)不必隨著移動或合併操作而更新。 更新cq:tags
屬性時(例如,透過頁面屬性對話方塊),cq:tags
屬性中的參考會自動更新。
標籤記憶體回收行程預設為每天執行一次。 您可以在下列位置進行設定:
http://localhost:4502/system/console/configMgr/com.day.cq.tagging.impl.TagGarbageCollector
標籤搜尋和標籤清單 tag-search-and-tag-listing
搜尋標籤和標籤清單的工作方式如下:
-
搜尋TagID會搜尋屬性
cq:movedTo
設為TagID並遵循cq:movedTo
TagID的標籤。 -
搜尋標籤Title只會搜尋沒有
cq:movedTo
屬性的標籤。
不同語言的標籤 tags-in-different-languages
如管理標籤的檔案中所述,在管理不同語言的標籤一節中,可以使用不同語言定義標籤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
相關方法:
-
- getLocalizedTitle(地區設定)
- getLocalizedTitlePaths()
- getLocalizedTitles()
- getTitle(地區設定)
- getTitlePath(地區設定)
-
- canCreateTagByTitle(String tagTitlePath, Locale)
- createTagByTitle(String tagTitlePath, Locale)
- resolveByTitle(String tagTitlePath, Locale)
在AEM中,可以從頁面語言或使用者語言取得語言:
-
擷取JSP中的頁面語言:
currentPage.getLanguage(false)
-
擷取JSP中的使用者語言:
slingRequest.getLocale()
currentPage
和slingRequest
可透過<cq:definedObjects>標籤在JSP中使用。
對於標籤,本地化取決於內容,因為標籤titles
可以頁面語言、使用者語言或任何其他語言顯示。
新增語言至編輯標籤對話方塊 adding-a-new-language-to-the-edit-tag-dialog
下列程式說明如何將語言(芬蘭文)新增到 標籤編輯 對話方塊:
-
在 CRXDE 中,編輯節點
/content/cq:tags
的多值屬性languages
。 -
新增
fi_fi
(代表芬蘭語言環境)並儲存變更。
在 標籤 主控台中編輯標籤時,現在可以在頁面屬性的標籤對話方塊和 編輯標籤 對話方塊中使用新語言(芬蘭文)。
/libs/wcm/core/resources/languages
以下的節點。/content/cq:tags
節點的languages屬性重設為預設值。 因此,在安裝之前,必須從屬性新增它。