アセットエディターは、アセット共有を使用して見つけたアセットをクリックすると開くページです。アセットエディターでは、メタデータ、サムネール、タイトルおよびタグなどのアセットの特性を編集できます。
事前設定済みの編集コンポーネントを使用してエディターを設定する方法については、アセットエディターページの作成および設定を参照してください。
Adobe Enterprise Manager(AEM)開発者は、既存のエディターコンポーネントを使用するだけでなく、独自のコンポーネントを作成することもできます。
geometrixx には次のサンプルページがあります。
- Geometrixx サンプルページ:/content/geometrixx/en/press/asseteditor.html
- サンプルテンプレート:/apps/geometrixx/templates/asseteditor
- サンプルページのコンポーネント: /apps/geometrixx/components/asseteditor
AEM Assets コンポーネントでは、WCM 編集 clientlib の拡張が使用されます。clientlib は通常、init.jsp に読み込まれます。
デフォルトの(コアの init.jsp での)clientlib の読み込みとは異なり、AEM Assets テンプレートには以下が必要な条件となります。
- テンプレートには、(cq.wcm.edit ではなく)cq.dam.edit の clientlib を含める必要があります。
- clientlib は無効な WCM モード(例えば、「発行」での読み込み)でも、述語、アクション、レンズをレンダリングするために含める必要があります。
通常は、既存のサンプル init.jsp(/apps/geometrixx/components/asseteditor/init.jsp)をコピーすればこの要件を満たします。
<script type="text/javascript" src="<%= component.getPath() %>/component.js"></script>
一部の AEM Assets コンポーネントでは、AEM ウィジェットライブラリを使用します。コンテンツコンテキストで正常にレンダリングするには、追加のスタイルシートを読み込む必要があります。タグアクションコンポーネントでは、さらにもう 1 つのスタイルシートが必要です。
<link href="/etc/designs/geometrixx/ui.widgets.css" rel="stylesheet" type="text/css">
サンプルページコンポーネントでは、すべてのセレクターが static.css(/etc/designs/geometrixx/static.css)の .asseteditor で始まっている必要があります。ベストプラクティス:すべての .asseteditor セレクターをスタイルシートにコピーし、必要に応じてルールを適用します。
アセットエディターは Form Chooser を使用しています。これにより、フォームセレクターとフォームのパスをアセットの URL に追加するだけで、同じフォームページでリソース(ここではアセット)を編集できるようになります。
次に例を示します。
head.jsp(/apps/geometrixx/components/asseteditor/head.jsp)のサンプルハンドルは次の処理をおこないます。
- アセットが読み込まれるか、またはプレーンフォームが表示される必要があるかを検出します。
- アセットが読み込まれると、parsys はプレーンフォームページ以外では編集できないため、WCM モードを無効にします。
- アセットが読み込まれると、フォームページのタイトルではなくアセットのタイトルを使用します。
List<Resource> resources = FormsHelper.getFormEditResources(slingRequest); if (resources != null) { if (resources.size() == 1) { // single resource FormsHelper.setFormLoadResource(slingRequest, resources.get(0)); } else if (resources.size() > 1) { // multiple resources // not supported by CQ 5.3 } } Resource loadResource = (Resource) request.getAttribute("cq.form.loadresource"); String title; if (loadResource != null) { // an asset is loaded: disable WCM WCMMode.DISABLED.toRequest(request); String path = loadResource.getPath(); Asset asset = loadResource.adaptTo(Asset.class); try { // it might happen that the adobe xmp lib creates an array Object titleObj = asset.getMetadata("dc:title"); if (titleObj instanceof Object[]) { Object[] titleArray = (Object[]) titleObj; title = (titleArray.length > 0) ? titleArray[0].toString() : ""; } else { title = titleObj.toString(); } } catch (NullPointerException e) { title = path.substring(path.lastIndexOf("/") + 1); } } else { title = currentPage.getTitle() == null ? currentPage.getName() : currentPage.getTitle(); }
<title><%= title %></title>
-
<?xml version="1.0" encoding="UTF-8"?> <jcr:root xmlns:sling="http://sling.apache.org/jcr/sling/1.0" xmlns:cq="http://www.day.com/jcr/cq/1.0" xmlns:jcr="http://www.jcp.org/jcr/1.0" jcr:primaryType="cq:Component" jcr:title="Image Dimension" sling:resourceSuperType="foundation/components/parbase" allowedParents="[*/parsys]" componentGroup="Asset Editor"/>
-
<%-- Sample metadata field comopnent --%><%@ page import="com.day.cq.dam.api.Asset, java.security.AccessControlException" %><% %><%@include file="/libs/foundation/global.jsp"%><% String value = ""; String name = "dam:sampleMetadata"; boolean readOnly = false; // If the form page is requested for an asset loadResource will be the asset. Resource loadResource = (Resource) request.getAttribute("cq.form.loadresource"); if (loadResource != null) { // Determine if the loaded asset is read only. Session session = slingRequest.getResourceResolver().adaptTo(Session.class); try { session.checkPermission(loadResource.getPath(), "set_property"); readOnly = false; } catch (AccessControlException ace) { // checkPermission throws exception if asset is read only readOnly = true; } catch (RepositoryException re) {} // Get the value of the metadata. Asset asset = loadResource.adaptTo(Asset.class); try { value = asset.getMetadata(name).toString(); } catch (NullPointerException npe) { // no metadata dc:description available } } %> <div class="form_row"> <div class="form_leftcol"> <div class="form_leftcollabel">Sample Metadata</div> </div> <div class="form_rightcol"> <% if (readOnly) { %><c:out value="<%= value %>"/><% } else { %><input class="text" type="text" name="./jcr:content/metadata/<%= name %>" value="<c:out value="<%= value %>" />"><% }%> </div> </div>
メタデータフォームで使用可能な名前空間を変更することができます。
現在使用可能なメタデータは /libs/dam/options/metadata で定義されています。
- このディレクトリの最初のレベルには名前空間が保存されています。
- 各名前空間内のアイテムは、ローカルパーツアイテムの結果などのメタデータを表します。
- メタデータの内容には、タイプと複数値の各オプションが含まれています。
これらのオプションは /apps/dam/options/metadata で上書きできます。
- ディレクトリを /libs から /apps にコピーします。
- アイテムを削除、変更、または追加します。
注意:
新しい名前空間を追加した場合、リポジトリ/CRX に登録する必要があります。この作業を行わない場合、メタデータフォームで送信をおこなうとエラーが発生します。