AEMでのSling Resource Mergerの使用 using-the-sling-resource-merger-in-aem

目的 purpose

Sling Resource Merger は、リソースのアクセスとマージのためのサービスを提供します. 次の両方に対して差分メカニズムを提供します。

  • 設定済み検索パスを使用するリソースの​オーバーレイ。

  • リソースタイプ階層を(プロパティを通じて)使用するタッチ操作対応 UI のコンポーネントダイアログ()のcq:dialogオーバーライドsling:resourceSuperType。

Sling Resource Mergerは、オーバーレイとオーバーライドリソース(およびそのプロパティ)の両方を元のリソースとプロパティと組み合わせます。

  • カスタマイズされた定義の内容は、元の定義よりも優先されます。 つまり、オーバーレイ​または​ オーバーライド ​です。

  • 必要な場合には、カスタマイズされた定義に含まれるプロパティが、元の定義から結合されたコンテンツをどう使用するかを指定します。

CAUTION
Sling Resource Merger および関連する手法は、Granite に対してのみ使用できます。 この状況は、標準のタッチ対応UIにのみ適していることを意味します。この方法で定義された特定のオーバーライドは、コンポーネントのタッチ対応ダイアログにのみ適用されます。
他の領域(タッチ対応コンポーネントまたはクラシック UIの他の部分を含む)をオーバーレイまたはオーバーライドするには、元の領域から適切なノードと構造をコピーします。 カスタマイズを定義する場所にコピーを配置します。

AEM の目的 goals-for-aem

AEM で Sling Resource Merger を使用する目的は、次のとおりです。

  • /libs にカスタマイズの変更が加えられないようにする。

  • /libs からレプリケートされる構造を減らす。

    Sling Resource Mergerを使用する場合、/libsから構造全体をコピーすることはお勧めしません。 その理由は、カスタマイズに保持される情報が多すぎるためです(通常は/apps)。 情報を複製すると、システムがアップグレードされたときに問題が発生する可能性が不必要に高まります。

NOTE
オーバーライドは検索パスに依存しません。 プロパティ sling:resourceSuperTypeを使用して接続を行います。
ただし、AEMのベストプラクティスは/appsでカスタマイズを定義することなので、オーバーライドは/appsで定義されることがよくあります。 理由は、/libsの下の項目は変更できないためです。
CAUTION
/libs パス内は一切変更し​ ない ​でください。
理由は、次回インスタンスをアップグレードするときに/libsのコンテンツが上書きされるからです。 また、ホットフィックスまたは機能パックを適用すると、上書きされる可能性があります。
設定およびその他の変更に推奨される方法は次のとおりです。
  1. 必要な項目(/libs 内に存在)を、/apps の下で再作成します。

  2. /apps 内で必要な変更を加えます

プロパティ properties

リソースマージャーには次のプロパティがあります。

  • sling:hideProperties(String または String[])

    非表示にするプロパティまたはプロパティのリストを指定します。

    ワイルドカード * を指定した場合はすべて非表示になります。

  • sling:hideResource(Boolean)

    リソースがその子を含めて完全に隠されているかどうかを示します。

  • sling:hideChildren(String または String[])

    非表示にする子ノードまたは子ノードのリストが含まれます。 ノードのプロパティは維持されます。

    ワイルドカード * を指定した場合はすべて非表示になります。

  • sling:orderBefore(String)

    現在のノードが前に配置されている兄弟ノードの名前が含まれます。

これらのプロパティは、対応する/元のリソース/プロパティ(/libsから)がオーバーレイ/オーバーライド(多くの場合/apps)でどのように使用されるかに影響します。

構造の作成 creating-the-structure

オーバーレイまたはオーバーライドを作成するには、元のノードを同じ構造で、目的の場所(通常は /apps)に再作成する必要があります。 次に例を示します。

  • オーバーレイ

    • サイトコンソールのナビゲーションエントリの定義(パネルに表示されるもの)は次の場所で定義されています。

      /libs/cq/core/content/nav/sites/jcr:title

    • オーバーレイするには、次のノードを作成します。

      /apps/cq/core/content/nav/sites

      次に、必要に応じて jcr:title プロパティを更新します。

  • オーバーライド

    • テキストコンソールのタッチ操作対応ダイアログボックスの定義は、次のように定義されます。

      /libs/foundation/components/text/cq:dialog

    • 上書きするには、次のノードを作成します。 次に例を示します。

      /apps/the-project/components/text/cq:dialog

いずれかを作成するには、スケルトン構造を再作成するだけで済みます。 構造の再作成を簡単にするために、すべての中間ノードのタイプをnt:unstructuredにすることができます(元のノードタイプを反映する必要はありません。 例:/libs。

したがって、上記のオーバーレイの例では、次のノードが必要です。

/apps
  /cq
    /core
      /content
        /nav
          /sites
NOTE
Sling Resource Mergerを使用する場合(つまり、標準のタッチ対応UIを扱う場合)、/libsから構造全体をコピーすることはお勧めしません。 その理由は、/appsに保持されている情報が多すぎるためです。 その結果、システムがアップグレードされたときに問題が発生する可能性があります。

ユースケース use-cases

これらのユースケースでは、標準機能を使用して次の操作を行うことができます。

  • プロパティの追加

    プロパティは/libs定義に存在しませんが、/apps オーバーレイ / オーバーライドで必要です。

    1. /apps 内に、対応するノードを作成します。
    2. このノード``で新しいプロパティを作成します。
  • プロパティの再定義(自動作成されたプロパティ以外)

    プロパティは/libsで定義されていますが、/apps オーバーレイ / オーバーライドには新しい値が必要です。

    1. /apps 内に、対応するノードを作成します。

    2. このノード(apps以下)に一致するプロパティを作成します

      • プロパティには、Sling リソースリゾルバー設定に基づく優先度があります。

      • プロパティタイプの変更がサポートされています。

        /libs で使用されているものとは異なるプロパティタイプを使用する場合、その定義したプロパティタイプが使用されます。

    note
    NOTE
    プロパティタイプの変更がサポートされています。
  • 自動作成されたプロパティの再定義

    デフォルトでは、自動作成されたプロパティ(jcr:primaryTypeなど)は、現在/libsの下にあるノードタイプが確実に尊重されるように、オーバーレイ/オーバーライドの対象にはなりません。 オーバーレイ/オーバーライドを適用するには、/appsでノードを再作成し、プロパティを明示的に非表示にして再定義する必要があります。

    1. /apps 以下に、必要な jcr:primaryType を持つ、対応するノードを作成します。

    2. 自動作成されたプロパティに設定された値で、そのノードに sling:hideProperties プロパティを作成します。例:jcr:primaryType

      /appsで定義されたこのプロパティは、/libsで定義されたものよりも優先されるようになりました

  • ノードおよびその子の再定義

    ノードとその子は/libsで定義されていますが、/apps オーバーレイ / オーバーライドでは新しい設定が必要です。

    1. 次のアクションを組み合わせます。

      1. ノードの子の非表示(そのノードのプロパティは維持)
      2. プロパティ/プロパティの再定義
  • プロパティの非表示

    プロパティは/libsで定義されていますが、/apps オーバーレイ / オーバーライドでは必要ありません。

    1. /apps 内に、対応するノードを作成します。

    2. String 型または String[] 型の sling:hideProperties プロパティを作成します。 非表示/無視するプロパティを指定するには、を使用します。 ワイルドカードも使用できます。 次に例を示します。

      • *
      • ["*"]
      • jcr:title
      • ["jcr:title", "jcr:description"]
  • ノードおよびその子の非表示

    ノードとその子は/libsで定義されていますが、/apps オーバーレイ / オーバーライドでは必要ありません。

    1. /apps 以下に、対応するノードを作成します。

    2. sling:hideResource プロパティを作成します

      • 型:Boolean
      • 値:true
  • ノードの子の非表示(そのノードのプロパティは維持)

    ノード、そのプロパティおよびその子が /libs に定義されていて、 ノードとそのプロパティは/apps オーバーレイ / オーバーライドで必要ですが、/apps オーバーレイ / オーバーライドでは一部またはすべての子ノードは必要ありません。

    1. /apps 以下に、対応するノードを作成します。

    2. sling:hideChildren プロパティを作成します。

      • 型:String[]
      • 値:非表示/無視する子ノード(/libsで定義)のリスト

      ワイルドカード *を使用すると、すべての子ノードを非表示にしたり、無視したりできます。

  • ノードの並べ替え

    ノードとその兄弟が /libs 内で定義されていて、 順序を変更するには、/apps オーバーレイまたはオーバーライドでノードを再作成します。 /libsの適切な兄弟ノードを参照して、新しい位置を定義します。

    • sling:orderBefore プロパティを使用します。

      1. /apps 以下に、対応するノードを作成します。

      2. sling:orderBefore プロパティを作成します。

        現在のノードが次の前に配置されているノード(/libsなど)を指定します。

        • 型:String
        • 値:<before-SiblingName>

コードからSling Resource Mergerを呼び出します invoking-the-sling-resource-merger-from-your-code

Sling Resource Merger には 2 つのカスタムリソースプロバイダーが含まれています。1 つはオーバーレイ用、もう 1 つはオーバーライド用です。 それぞれ、コード内でマウントポイントを使用して呼び出すことができます。

NOTE
リソースにアクセスする場合は、適切なマウントポイントを使用することをお勧めします。
このアプローチでは、Sling Resource Mergerが呼び出され、完全に結合されたリソースが返されます。 また、/libsからコピーする必要がある構造の量も減ります。
  • オーバーレイ:

    • 目的:検索パスに基づいてリソースを結合する。

    • マウントポイント:/mnt/overlay

    • 使用方法:mount point + relative path

    • 例:

      • getResource('/mnt/overlay' + '<relative-path-to-resource>');
  • オーバーライド:

    • 目的:スーパータイプに基づいてリソースを結合する。

    • マウントポイント:/mnt/overide

    • 使用方法:mount point + absolute path

    • 例:

      • getResource('/mnt/override' + '<absolute-path-to-resource>');

使用例 example-of-usage

以下のページで、一部の例が紹介されています。

recommendation-more-help
experience-manager-65-lts-help-main-toc