現在表示中:

Web サイト(サイト管理)コンソールにカスタム列を追加

カスタム列を表示するように Web サイト管理コンソールを拡張できます。このコンソールは JSON オブジェクトをベースに構築されており、これを拡張するには ListInfoProvider インターフェイスを実装する OSGI サービスを作成します。このサービスが、コンソール構築のためにクライアントに送信される JSON オブジェクトを修正します。

このステップバイステップのチュートリアルでは、ListInfoProvider インターフェイスを実装して Web サイト管理コンソールに新しい列を表示する方法について説明します。主な手順は次のとおりです。

  1. OSGI サービスを作成し、そのサービスを含むバンドルを AEM サーバーにデプロイします。
  2. (オプション)コンソールの構築に使用される JSON オブジェクトをリクエストする JSON 呼び出しを発行して、新しいサービスをテストします。
  3. リポジトリ内のコンソールのノード構造を拡張して、新しい列を表示します。

注意:

このチュートリアルは、次のような管理コンソールの拡張にも利用できます。

  • デジタルアセットコンソール
  • コミュニティコンソール

OSGI サービスの作成

ListInfoProvider インターフェイスは、次の 2 つのメソッドを定義します。

  • リストのグローバルプロパティを更新する updateListGlobalInfo
  • 単一のリスト項目を更新する updateListItemInfo

どちらのメソッドにも次の引数があります。

  • request:関連付けられた Sling HTTP リクエストオブジェクト
  • info:更新する JSON オブジェクト。グローバルリストまたは現在のリスト項目に 1 つずつ
  • resource:Sling リソース

次の実装例では、

  • 各項目に starred プロパティを追加します。ページ名が「e」で始まる場合は trueで、それ以外の場合は false です。
  • starredCount プロパティを追加します。このプロパティはリストに対してグローバルで、星印の付いたリスト項目の数が格納されます。

OSGI サービスの作成手順

  1. CRXDE Lite でバンドルを作成します
  2. 次のサンプルコードを追加します。
  3. バンドルをビルドします。

新しいサービスが起動し、実行されます。

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"));
        }
    }

}

警告:

  • 指定されたリクエストやリソースに基づいて、情報を JSON オブジェクトに追加すべきかどうかを実装が判断する必要があります。
  • ListInfoProvider の実装が、応答オブジェクト内に既に存在するプロパティを定義している場合、そのプロパティの値は、指定した値で上書きされます。
    サービスランキングを使用して、複数の ListInfoProvider 実装の実行順序を管理できます。

新しいサービスのテスト

Web サイト管理コンソールを開いてサイトを閲覧すると、ブラウザーがコンソールの構築に使用されている JSON オブジェクトを取得するための ajax 呼び出しを発行します。例えば、/content/geometrixx フォルダーを閲覧すると、コンソールを構築するために、次のリクエストが AEM サーバーに送信されます。

http://localhost:4502/content/geometrixx.pages.json?start=0&limit=30&predicate=siteadmin

新しいサービスを含むバンドルのデプロイ後に、そのサービスが実行されていることを確認するには、以下をおこないます。

  1. ブラウザーで次の URL にアクセスします。
    http://localhost:4502/content/geometrixx.pages.json?start=0&limit=30&predicate=siteadmin
  2. 応答によって、新しいプロパティが次のように表示されます。

新しい列の表示

最後の手順では、/libs/wcm/core/content/siteadmin をオーバーレイすることによって、すべての Geometrixx ページで新しいプロパティを表示するように、Web サイト管理コンソールのノード構造を適応させます。次の手順を実行します。

  1. CRXDE Lite で、構造 /libs/wcm/core/content を反映するように、タイプ sling:Folder のノードを使用してノード構造 /apps/wcm/core/content を作成します。
  2. ノード /libs/wcm/core/content/siteadmin をコピーして、/apps/wcm/core/content の下に貼り付けます。
  3. ノード /apps/wcm/core/content/siteadmin/grid/assets/apps/wcm/core/content/siteadmin/grid/geometrixx にコピーして、次のようにプロパティを変更します。
    • pageText を削除
    • pathRegex /content/geometrixx(/.*)? に設定
      すべての Geometrixx Web サイトに対してグリッド設定が有効になります。
    • storeProxySuffix.pages.json に設定
    • 複数値プロパティ storeReaderFields を編集し、starred 値を追加します。
    • MSM 機能をアクティベートするには、次の MSM パラメーターを複数文字列プロパティ storeReaderFields に追加します。
      • msm:isSource
      • msm:isInBlueprint
      • msm:isLiveCopy
  4. (タイプ nt:unstructured の)starred ノードを、次のプロパティを設定して /apps/wcm/core/content/siteadmin/grid/geometrixx/columns の下に追加します。
    • dataIndex:String タイプの starred
    • header:String タイプの Starred
    • xtype:String タイプの gridcolumn
  5. (オプション)表示したくない列を /apps/wcm/core/content/siteadmin/grid/geometrixx/columns でドロップします。
  6. /siteadmin は、デフォルトとして /libs/wcm/core/content/siteadmin を指すバニティーパスです。
    このパスを /apps/wcm/core/content/siteadmin のサイト管理のバージョンにリダイレクトするには、プロパティ sling:vanityOrder/libs/wcm/core/content/siteadmin で定義されているより大きい値を持つように定義します。デフォルト値は 300 なので、それより大きい値が適しています。
  7. Web サイト管理コンソールに移動し、次の Geometrixx サイトに移動します。
    http://localhost:4502/siteadmin#/content/geometrixx
  8. Starred」という新しい列が使用可能になり、次のようにカスタム情報が表示されます。

警告:

pathRegex プロパティによって定義されるリクエストパスに複数のグリッド設定が一致する場合は、最も詳しい設定ではなく、最初の設定が使用されます。つまり、設定の順序が重要です。

サンプルパッケージ

このチュートリアルの結果は、パッケージ共有の Web サイト管理コンソールのカスタマイズパッケージで入手できます。

本作品は Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License によってライセンス許可を受けています。  Twitter™ および Facebook の投稿には、Creative Commons の規約内容は適用されません。

法律上の注意   |   プライバシーポリシー