Asset Share Commons の Search Results 画面の Property Filter について
Asset Share Commons の Search Results 画面では、右側の Property Filter コンポーネントが設置されています。
例えば、☐VIDEO のチェックボックスのチェックを入れると、 Search Results 一覧は、動画アセットで絞り込みされます。
この Property Filter コンポーネントの設定方法を紹介します。
Type
下記の選択肢から一つ選択します:
- Checkboxes
- Radio buttons
- Slider
- Toggle
- Drop-down
Title
表示するタイトル
Metadata Property
アセットのメタデータの属性を設定します。この設定値でフィルタリングします。
Operation
属性値の合致方法、普段はEqualsと設定します。
Source
参照先、普段はLocalと設定します。
Options
フィルタリング条件を設定します。
ちなみに、dc:format属性に設定されている値は、アセットのMIMEタイプ(Multipurpose Internet Mail Extensions)であり、拡張子に紐づく情報です。複数が設定する場合、カンマ区切りで入力されています。
例えば、動画アセットの「QuickTime」、「Mp4」をフィルタリングする場合、「video/quicktime,video/mp4」と入力されています。
AEMの一時的なワークフローの通知メールについて
AEMの一時的なワークフロー(Transient Workflows)は、履歴がリポジトリに保存しないため、処理時間が短縮され、リポジトリの肥大化も大幅に抑制されるなど利点があります。
頻繁に実行されるワークフロー、且つ履歴が必要ないワークフローに対して、極めて推奨されています。
設定方法も簡単で、ワークフローのプロパティ設定画面に、「Transient Workflow」の☑チェックを入れて保存すれば、設定完了!
ここで一つの問題点は、一時的なワークフローが完了する際に、不要な通知メールがAEMから送信されることです。
例えば、大量のアセットがアップロードされる場合、一時的なワークフローの DAM Update Asset が起動され、ワークフローが完了する際に、大量の通知メールがユーザーの宛先に送信される事象が発生してしまいます。
この事象の解決方法は、AEMのOSGi設定により、SendTransientWorkflowCompletedEmailProcessのNotify on Complete ☑チェックボックスのチェックを外すことです。
この設定で、一時的なワークフローが完了する際に、AEMから不要な通知メールが送信しないようになりました。
AEMアセットのCUG設定時、所属しないグループの設定方法
AEMのCUG(Closed User Groups)設定によると、コンテンツリポジトリ内の特定のツリーに対する読み取りアクセスを制限することができます。
例えば、上記のように、アセットフォルダの /content/dam/myfolder-01 のプロパティ設定のCUG項目に、GroupAを追加すれば、GroupAに所属するユーザーのUser-A-01、User-A-02のみ、フォルダ /content/dam/myfolder-01 配下のアセットを読み取りアクセスが許可され、GroupA以外のユーザーからのアクセスは拒否されます。
ここで発生した問題は、GroupAに所属するユーザーのUser-A-01は、アセットフォルダの /content/dam/myfolder-01 をGroupBに共有したい時、プロパティ設定のCUG項目の Add User or Group ドロップダウンリストでは、所属するグループしか表示されていないため、User-A-01 は GroupBに所属しないので、GroupBをCUGグループに設定することができません。
どうすればいいだろうか。実は、 Add User or Group ドロップダウンリストに GroupBが表示されていないのは、 GroupBのグループ情報の読み取り権限が持っていないためです。ここまで分かれば、解決方法が簡単ですね。
adminユーザーでAEMにログインしてから、GroupBのPermissions設定画面を開きます、ここでは、GroupBのグループ情報のPathが表示されているので、このPathをメモします。
次は、GroupAのPermissions設定画面を開きます、「Add ACE」ボタンを押下し、「Add New Entry for "Group-A"」設定画面では、Path項目に、上記でメモしていたGroupBのグループ情報のPathを入力する。Privileges項目に、jcr:readを入力し、「Add」ボタンを押下します。
ここでは、User-A-01 ユーザーで AEM にログインすれば、アセットフォルダのプロパティ設定のCUG項目の Add User or Group ドロップダウンリストに GroupBも表示できるようになりました。
このように、フォルダの共有したいグループの「グループ情報Path」を自分所属するグループの読み取り(jcr:read)Permissions設定に追加すれば、フォルダのプロパティ設定のCUG項目に、共有したいグループを追加することができますので、フォルダの共有することができます。
AEMのImageコンポーネントについて
AEMのImageコンポーネントは、ページのオーサリングでよく使われる汎用コンポーネントの一つです。
このコンポーネントのプロパティ設定では、「タイトル」、「代替テキスト」が未入力の場合、画像ファイルの「フィアル名」がHTMLの title、alt 属性に設定されてしまう事象があります。
<img src="/content/test/_jcr_content/1627455779321.jpg" alt="dog-103.jpg" title="dog-103.jpg" class="cq-dd-image">
そして、画像にカーソルを当てた時、ファイル名のポップアップが表示されています。
これから、AEMのImageコンポーネントをカスタマイズして、事象を解消する方法を紹介します。
一先ず、Imageコンポーネントのソースコードを/libs配下から、/appsにコピーしてオーバーライドします。
コピー元
/libs/foundation/components/image/image.jsp
コピー先
/apps/foundation/components/image/image.jsp
ここで、「タイトル」、「代替テキスト」が未入力の場合、HTMLの title、alt 属性自体が出力しないように改修します。
//画像ファイルのファイル名を取得する String fileName = image.getFileName(); //Titleが未設定の場合、Title属性自体を削除する if(fileName && properties.get("jcr:title", "").length() == 0){ imgStr = imgStr.replace("title=\"" + fileName + "\"", ""); } //Alt Textが未設定の場合、Alt属性自体を削除する if(fileName && properties.get("alt", "").length() == 0){ imgStr = imgStr.replace("alt=\"" + fileName + "\"", ""); }
生成したHTMLを見ると、「タイトル」、「代替テキスト」が未入力の場合、title、alt 属性自体が出力されていない。
<img src="/content/test/_jcr_content/1627455779321.jpg" class="cq-dd-image">
画像にカーソルを当てた時、ファイル名のポップアップが表示されていません。
AEMアセットのサムネイルを設定する方法
AEMアセットのサムネイルは、アセットがAEMにアップロードされた際に、アセット更新ワークフローが生成されたものです。アセットの種類により、サムネイルが生成されない場合もあります。
今回は、手動でAEMアセットのサムネイルを設定する方法を紹介します。
既存のAEMサムネイルサイズを調べる
アップロードされたアセットの場合、jcr:content/renditions の配下に、自動的に四つのサムネイル画像ファイルが生成されています。
手動で設定する場合、四つのサムネイル画像ファイルを事前用意します。
# | ファイル名 | 拡張子 | サイズ |
---|---|---|---|
1 | cq5dam.thumbnail.140.100.png | png | 140 × 100 |
2 | cq5dam.thumbnail.319.319.png | png | 319 × 319 |
3 | cq5dam.thumbnail.48.48.png | png | 48 × 48 |
4 | cq5dam.web.1280.1280.jpeg | jpeg | 1280 × 1280 |
サムネイル画像ファイルの準備
ペイントで用意した画像ファイルを開き、上記のサイズに合わせて、ペイントの「イメージのプロパティ」編集画面より、ピクセル単位の幅、高さを設定し、指定されたファイル名で保存します。
ここまで、サムネイル画像ファイルの準備が完了です。
AEMアセットのサムネイルの設定
アセット一覧画面から、該当するアセットをクリックし、アセット詳細画面を開きます。
「Add Rendition」ボタンを押下し、用意した四つの画像ファウルを一つずつアップロードし、成功メッセージ表示されることを確認します。
アセット一覧画面に戻ると、各ビューモードでアセットのサムネイルが表示されることを確認できます。
Asset Share Commons の Detailページへのリンクについて
Asset Share Commons の Search Results 画面では、検索したアセット一覧が表示されます。アセットのサムネイル画像などをクリックすると、Detailページへ遷移されます。
そして、アセットの種類ごとに、色んなDetailページが用意されます。
- 画像ファイル ⇒ image.htmlページへ遷移
- 動画ファイル ⇒ video.htmlページへ遷移
- 不明ファイル ⇒ details.htmlページへ遷移
例えば、画像ファイル(拡張子:png、jpeg、bmpなど)なら、image.htmlページへ遷移され、このページの画像コンポーネントでアセットのサムネイル画像が表示されます。 動画ファイル(拡張子:mp4、mov、flv)なら、video.htmlページへ遷移され、このページの動画コンポーネントでアセットのサムネイル動画の生成もできます。
ここでは、アセット種類の特定は、拡張子により、Asset Share Commons の バンドルで行われていますが、全ての拡張子には対応しきれません。
仮に、アセットの種類特定できない(不明ファイル)場合、details.htmlページへ遷移され、このページでは、サムネイル画像しか表示できません。 下記のように、拡張子がmp4の動画ファイルは、種類特定できませんので、details.htmlページで開かれ、動画の生成ができない状態になっています。
この記事は、正しいDetailページへ遷移するように、HTL側でカスタマイズする方法を紹介します。
Search Results コンポーネントのプロパティ設定画面に、拡張子と遷移先ページのパス項目を追加します。
HTLからアセットのURL(fullUrl)をjavascriptに渡します。
/apps/asset-share-commons/components/search/results/result/list/templates/list.html
<sly data-sly-use.details="${'asset-share-commons/clientlibs/clientlib-my/js/details.js' @ href=assetDetails.fullUrl ,propertyItems = propertyItems}"></sly>
そして、javascriptでは、「プロパティ設定した拡張子」の場合、URLに含まれる「Detailページのパス」を「プロパティ設定した遷移先ページのパス」に書き換えて、HTLに新しいURLを返却します。
/apps/asset-share-commons/clientlibs/clientlib-my/js/details.js
if (this.href && this.propertyItems) { fullUrl = this.href; //拡張子 var dt = fullUrl.split("."); if (dt) { extension = dt[dt.length - 1]; } //今現在のDetailページのパス var detailPage = getFromPage(this.href); //URLを書き換える if (detailPage && propertyItems && propertyItems.length > 0) { var obj = null; for(let i = 0; i < propertyItems.length; i++){ obj = JSON.parse(propertyItems[i]); if (obj.extension && obj.extension !== "" && obj.extension.toLowerCase() === extension.toLowerCase()) { fullUrl = fullUrl.replace(detailPage, obj.to); } } } } return { fullUrl:fullUrl };
HTLでは、javascriptで処理したURLをアセットのリンクのhrefに設定します。
<td class="image"> <a href="${details.fullUrl}"><img src="${asset.properties['rendition?name=list'] || properties['missingImage'] @ context = 'attribute'}" alt="${asset.properties['title']}"/></a> </td>
これから、Search Results 画面では、検索したアセット一覧から、拡張子がmp4の動画ファイルをクリックすれば、生成ボタン付きのvideo.htmlページへ遷移されます。
Asset Share Commons の Search Results 画面の期限管理
Asset Share Commons の Search Results 画面では、期限切れのアセットを検索結果から除外するフィルター機能があります。この実現方法を紹介します。
Search Results コンポーネントのプロパティ設定画面を開きます。
Search Restrictions(検索の制限)の「Add」ボタンを押下し、新しい検索制限項目が追加され、「Exclude expired assets(期限切れのアセットを除外)」と選択します。
ここまで、除外するフィルターの設定が完了、期限切れのアセットあれば、除外されますね。では、下記のアセットを例として、期限切れる場合の表示状況を試してみます。
AEM の CRXDE Lite 画面を開き、上記アセットのjcr:content/metadataノードに、下記の属性を追加します。
# | name | Type | Value |
---|---|---|---|
1 | prism:expirationDate | Date | (過去の日付) |
+ metadata - jcr:primaryType = "nt:unstructured" - prism:expirationDate = "2021-01-01T00:00:00.000+09:00"
保存すると、上記の期限切れのアセットは検索結果から除外されました。