為了以程式設計方式使用自訂AEM應用程式中的標籤或擴充標籤,本頁說明的使用
與
如需標籤的相關資訊,請參閱:
在AEM中實作標籤架構可使用JCR API管理標籤和標籤內容。 TagManager可確保在cq:tags
字串陣列屬性上輸入作為值的標籤不會重複,它會移除指向非現有標籤的TagID,並更新已移動或合併標籤的TagID。 TagManager使用JCR觀察監聽器來回復任何不正確的變更。 主類位於com.day.cq.tagging包中:
TagManager
以JCR為基礎的實作。 這是標籤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);
雖然標籤只能從資源(而非節點)轉換,但標籤可以轉換為節點和資源:
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
是用於輸入標籤的表單小工具。它有一個彈出式功能表,可從現有標籤中選取,包括自動完成功能和許多其他功能。 其類型為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控制台中編輯標籤時,頁面屬性的標籤對話方塊和Edit Tag對話方塊中都可使用新語言(芬蘭文)。
新語言必須是AEM認可的語言之一,亦即,它必須是/libs/wcm/core/resources/languages
下方的節點。