カスタム列を表示するように Web サイト管理コンソールを拡張できます。このコンソールは JSON オブジェクトをベースに構築されており、これを拡張するには ListInfoProvider
インターフェイスを実装する OSGI サービスを作成します。このサービスが、コンソール構築のためにクライアントに送信される JSON オブジェクトを修正します。
このステップバイステップのチュートリアルでは、ListInfoProvider
インターフェイスを実装して Web サイト管理コンソールに新しい列を表示する方法について説明します。主な手順は次のとおりです。
このチュートリアルは、次のような管理コンソールの拡張にも利用できます。
ListInfoProvider
インターフェイスは、次の 2 つのメソッドを定義します。
updateListGlobalInfo
updateListItemInfo
どちらのメソッドにも次の引数があります。
request
:関連付けられた Sling HTTP リクエストオブジェクトinfo
:更新する JSON オブジェクト。グローバルリストまたは現在のリスト項目に 1 つずつresource
、Slingリソース。次の実装例では、
各項目に starred プロパティを追加します。ページ名が「true
e 」で始まる場合はで、それ以外の場合は false
です。
starredCount プロパティを追加します。このプロパティはリストに対してグローバルで、星印の付いたリスト項目の数が格納されます。
OSGI サービスの作成手順
新しいサービスが起動し、実行されます。
package com.test;
import com.day.cq.commons.ListInfoProvider;
import com.day.cq.i18n.I18n;
import com.day.cq.wcm.api.Page;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Service;
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.commons.json.JSONException;
import org.apache.sling.commons.json.JSONObject;
@Component(metatype = false)
@Service(value = ListInfoProvider.class)
public class StarredListInfoProvider implements ListInfoProvider {
private int count = 0;
public void updateListGlobalInfo(SlingHttpServletRequest request, JSONObject info, Resource resource) throws JSONException {
info.put("starredCount", count);
count = 0; // reset for next execution
}
public void updateListItemInfo(SlingHttpServletRequest request, JSONObject info, Resource resource) throws JSONException {
Page page = resource.adaptTo(Page.class);
if (page != null) {
// Consider starred if page name starts with 'e'
boolean starred = page.getName().startsWith("e");
if (starred) {
count++;
}
I18n i18n = new I18n(request);
info.put("starred", starred ? i18n.get("Yes") : i18n.get("No"));
}
}
}
ListInfoProvider
の実装が、応答オブジェクト内に既に存在するプロパティを定義している場合、そのプロパティの値は、指定した値で上書きされます。ListInfoProvider
実装の実行順序を管理できます。Web サイト管理コンソールを開いてサイトを閲覧すると、ブラウザーがコンソールの構築に使用されている JSON オブジェクトを取得するための ajax 呼び出しを発行します。例えば、/content/geometrixx
フォルダーを参照すると、AEMサーバーに次の要求が送信され、コンソールが構築されます。
http://localhost:4502/content/geometrixx.pages.json?start=0&limit=30&predicate=siteadmin
新しいサービスを含むバンドルのデプロイ後に、そのサービスが実行されていることを確認するには、以下をおこないます。
ブラウザーで次のURLを指定します。
http://localhost:4502/content/geometrixx.pages.json?start=0&limit=30&predicate=siteadmin
応答によって、新しいプロパティが次のように表示されます。
最後の手順では、Webサイト管理コンソールのノード構造を適合させ、/libs/wcm/core/content/siteadmin
をオーバーレイしてすべてのGeometrixxページの新しいプロパティを表示します。 以下の手順を実行します。
CRXDE Liteで、ノード構造/apps/wcm/core/content
をタイプsling:Folder
のノードで作成し、構造/libs/wcm/core/content
を反映します。
ノード/libs/wcm/core/content/siteadmin
をコピーして/apps/wcm/core/content
の下に貼り付けます。
ノード/apps/wcm/core/content/siteadmin/grid/assets
を/apps/wcm/core/content/siteadmin/grid/geometrixx
にコピーし、そのプロパティを変更します。
pageText を削除
pathRegexを/content/geometrixx(/.*?lang=ja)?
に設定
に設定すべての Geometrixx Web サイトに対してグリッド設定が有効になります。
storeProxySuffixを.pages.json
に設定
複数値プロパティ storeReaderFields を編集し、starred
値を追加します。
MSM機能をアクティブ化するには、次のMSMパラメーターをmulti-StringプロパティstoreReaderFieldsに追加します。
追加/apps/wcm/core/content/siteadmin/grid/geometrixx/columns
の下のstarred
ノード(タイプnt:unstructured)で、次のプロパティが含まれます。
starred
文字列型Starred
文字列型gridcolumn
文字列型(オプション)/apps/wcm/core/content/siteadmin/grid/geometrixx/columns
に表示したくない列をドロップします。
/siteadmin
は、デフォルトでは、を指すバニティパスで /libs/wcm/core/content/siteadmin
す。
これを/apps/wcm/core/content/siteadmin
上のご使用のバージョンのsiteadminにリダイレクトするには、/libs/wcm/core/content/siteadmin
上で定義された値より大きい値を持つプロパティsling:vanityOrder
を定義します。 デフォルト値は 300 なので、それより大きい値が適しています。
Webサイト管理コンソールに移動し、Geometrixxサイトに移動します。
「Starred」という新しい列が使用可能になり、次のようにカスタム情報が表示されます。
pathRegex プロパティによって定義されるリクエストパスに複数のグリッド設定が一致する場合は、最も詳しい設定ではなく、最初の設定が使用されます。つまり、設定の順序が重要です。
このチュートリアルの結果は、パッケージ共有のWebサイト管理コンソールパッケージのカスタマイズで確認できます。