AEM のタグフレームワークの実装により、JCR API を使用してタグおよびタグコンテンツを管理できます。TagManager は、cq:tags 文字列配列プロパティに値として入力されたタグが重複しないようにして、存在しないタグを指している TagID を削除し、移動または結合されたタグの TagID を更新します。TagManager は、間違った変更を元に戻す JCR 監視リスナーを使用します。メインクラスは com.day.cq.tagging パッケージ内にあります。
- JcrTagManagerFactory - TagManager の JCR ベースの実装を返します。タグ付け API のリファレンス実装です。
- TagManager - パスと名前を使用して、タグを解決して作成できます。
- Tag - タグオブジェクトを定義します。
@Reference JcrTagManagerFactory jcrTagManagerFactory; TagManager tagManager = jcrTagManagerFactory.getTagManager(session);
TagManager tagManager = resourceResolver.adaptTo(TagManager.class);
Tag tag = tagManager.resolve("my/tag"); // for existing tags Tag tag = tagManager.createTag("my/tag"); // for new tags
Tag を JCR Nodes にマップする JCR ベースの実装の場合、リソースがあれば(例:/etc/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.replicate(session, replicationActionType, tagPath);
CQ.tagging.TagInputField は、タグを入力するためのフォームウィジェットです。既存のタグから選択できるポップアップメニューを備えており、自動入力などの機能もあります。この xtype は tags です。
タグのガベージコレクターは、非表示および未使用のタグをクリーンアップするバックグラウンドサービスです。非表示の未使用タグは /etc/tags の下にあり、cq:movedTo プロパティを持ちます。コンテンツノードでは使用されません(使用回数はゼロ)。この遅延削除プロセスを使用すると、移動またはマージ処理の一環としてコンテンツノード(cq:tags プロパティ)を更新する必要がありません。cq:tags プロパティ内の参照は、cq:tags プロパティが更新されるときに、ページプロパティのダイアログなどを介して自動的に更新されます。
タグのガベージコレクターは、デフォルトでは 1 日に 1 回実行されます。これは以下で設定できます。
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 関連のメソッドがあります。
- com.day.cq.tagging.Tag
- getLocalizedTitle(Locale locale)
- getLocalizedTitlePaths()
- getLocalizedTitles()
- getTitle(Locale locale)
- getTitlePath(Locale locale)
- getLocalizedTitle(Locale locale)
- com.day.cq.tagging.TagManager
- canCreateTagByTitle(String tagTitlePath, Locale locale)
- createTagByTitle(String tagTitlePath, Locale locale)
- resolveByTitle(String tagTitlePath, Locale locale)
- canCreateTagByTitle(String tagTitlePath, Locale locale)
AEM では、言語はページ言語またはユーザー言語のどちらかから取得できます。
- JSP でページ言語を取得するには:
- currentPage.getLanguage(false)
- JSP でユーザー言語を取得するには:
- slingRequest.getLocale()
currentPage および slingRequest は、<cq:definedObjects> タグを介して JSP で使用できます。
タグ付けの場合、ローカライズはコンテキストに依存します。タグの titles はページ言語、ユーザー言語またはそれ以外の任意の言語で表示することができます。
新しい言語(フィンランド語)を Tag Edit ダイアログに追加する方法を次に示します。
- CRXDE で、/etc/tags ノードの複数値プロパティ languages を編集します。
- フィンランド語のロケールを表す fi_fi を追加し、変更を保存します。
これで、タグ付けコンソールでタグを編集するときに、新しい言語(フィンランド語)がページプロパティのタグダイアログおよびタグの編集ダイアログで使用できるようになりました。
注意:
新しい言語は、AEM で認識される言語である必要があります。つまり、/libs/wcm/core/resources/languages の下でノードとして使用できる必要があります。