カスタム AEM アプリケーション内のタグまたは拡張タグをプログラムで操作するために、このドキュメントでは、次の使用方法を説明します。
これは、次とやり取りします。
タグ付けに関する関連情報については、次を参照してください。
AEM のタグ付けフレームワークの実装により、JCR API を使用してタグおよびタグコンテンツを管理できます。TagManager
は、cq:tags
文字列配列プロパティに値として入力されたタグが重複しないように、存在しないタグを指している TagID
を削除し、移動または結合されたタグの TagID
を更新します。TagManager
は、間違った変更を元に戻す JCR 監視リスナーを使用します。メインクラスは com.day.cq.tagging パッケージ内にあります。
JcrTagManagerFactory
TagManager
の JCR ベースの実装を返します。タグ付け API のリファレンス実装です。TagManager
- パスと名前を使用して、タグを解決して作成できます。Tag
- タグオブジェクトを定義します。TagManager
インスタンスを取得するには、JCR Session
を取得して getTagManager(Session)
を呼び出す必要があります。
@Reference
JcrTagManagerFactory jcrTagManagerFactory;
TagManager tagManager = jcrTagManagerFactory.getTagManager(session);
通常の Sling コンテキストでは、TagManager
を ResourceResolver
に適合させることもできます。
TagManager tagManager = resourceResolver.adaptTo(TagManager.class);
Tag
は、既存のタグを解決するか新しいタグを作成することにより、TagManager
を介して取得できます。
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
は Sling の Adaptable.adaptTo(Class)
メソッドを実装しないので、Node
を Tag
に直接適合させることはできません。
// 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
プロパティがアップデートされると自動的にアップデートされます(例:ページプロパティダイアログを介して)。
タグのガベージコレクターは、デフォルトで 1 日に 1 回実行されます。これは、次の場所で設定できます。
http://<host>:<port>/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
)。
例えば、 動物 タグが 製品 ページ、値 stockphotography:animals
がプロパティに追加される cq:tags
ノードの /content/wknd/en/products/jcr:content
. 翻訳は、タグノードから参照されます。
サーバーサイド 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
はページ言語、ユーザー言語またはそれ以外の任意の言語で表示することができます。
次の手順では、新しい言語(例:フィンランド語)をタグを編集ダイアログに追加する方法を説明します。
/content/cq:tags
の複数値プロパティ languages
を編集します。fi_fi
を追加して、変更を保存します。タグ付けコンソールでタグを編集する際に、ページプロパティのタグダイアログとタグを編集ダイアログで、フィンランド語を使用できるようになりました。
新しい言語は、AEMで認識される言語の 1 つである必要があります。つまり、以下のノードとして使用できる必要があります。 /libs/wcm/core/resources/languages
.