現在表示中:

目的

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

  • 設定済みの検索パスを使用するリソースのオーバーレイ
  • リソースタイプ階層を(sling:resourceSuperType プロパティを通じて)使用するタッチ操作向け UI のコンポーネントダイアログ(cq:dialog)のオーバーライド

Sling Resource Merger を使用すると、リソースやプロパティのオーバーレイ/オーバーライドが元のリソース/プロパティにマージされます。

  • カスタマイズされた定義のコンテンツの方が、元の定義のコンテンツよりも優先されます(つまり、前者が後者をオーバーレイまたはオーバーライドします)。
  • 必要な場合には、カスタマイズされた定義に含まれるプロパティが、元の定義からマージされたコンテンツをどう使用するかを指定します。

警告:

Sling Resource Merger および関連する手法は、Granite に対してのみ使用できます。これはつまり、タッチ操作向け UI でのみ使用できるという意味です。特に、この方法で定義された特定のオーバーライドは、コンポーネントのタッチ操作向けダイアログに対してのみ適用できます。

その他の領域(タッチ操作向けコンポーネントやクラシック UI の他の側面を含む)のオーバーレイ/オーバーライドでは、適切なノードと構造を元の場所からカスタマイズの定義先にコピーします。

AEM の目的

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

  • /libs にカスタマイズの変更が加えられないようにする。
  • /libs からレプリケートされる構造を減らす。
    Sling Resource Merger を使用するときは、/libs の構造全体をコピーすることは推奨されません。そうすると、カスタマイズ(通常は /apps)で維持される情報が多くなりすぎるからです。情報を不必要に複製すると、システムのアップグレード時に問題が発生しやすくなります。

注意:

オーバーライドは、検索パスに依存せず、sling:resourceSuperType プロパティに基づいて接続を確立します。

ただし、オーバーライドは /apps 以下に定義されるのが一般的です。AEM では、カスタマイズを /apps 以下に定義することがベストプラクティスとされています。なぜなら、/libs 以下のコンテンツを変更してはならないからです。

警告:

/libs パス内では何も変更しないでください。

/libs のコンテンツは、インスタンスを次回アップグレードするとき(場合によってはホットフィックスまたは機能パックを適用したとき)に上書きされるからです。

設定およびその他の変更に推奨される方法は次のとおりです。

  1. 必要な項目(/libs 内に存在)を、/apps の下で再作成します。
  2. /apps 内で変更作業をおこないます。

プロパティ

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

  • sling:hidePropertiesString または String[]
    非表示にするプロパティまたはプロパティのリストを指定します。
    ワイルドカード * を指定した場合はすべて非表示になります。
  • sling:hideResourceBoolean
    リソースを子も含めて完全に非表示にするかを示します。
  • sling:hideChildrenString または String[]
    非表示にする子ノードまたは子ノードのリストが格納されます。ノードのプロパティは維持されます。
    ワイルドカード * を指定した場合はすべて非表示になります。
  • sling:orderBeforeString
    現在のノードの直後に配置する兄弟ノードの名前が格納されます。

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

構造の作成

オーバーレイまたはオーバーライドを作成するには、元のノードを同じ構造で、目的の場所(通常は /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

注意:

Sling Resource Merger を使用するとき(つまりタッチ操作向け UI を扱うとき)は、/libs の構造全体をコピーすることは推奨されません。そうすると、/apps 内で維持される情報が多くなりすぎるからです。その場合、システムが何らかの理由でアップグレードされたときに問題が発生する可能性があります。

ユースケース

オーバーレイを標準の機能とあわせることで、次の操作が可能になります。

  • プロパティの追加

    /libs 定義に存在しないプロパティが /apps オーバーレイ/オーバーライドで必要になった場合に、プロパティを追加できます。

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

    /libs で定義されているプロパティについて、/apps オーバーレイ/オーバーライドで新しい値が必要になった場合に、プロパティを再定義できます。

    1. /apps 内に、対応するノードを作成します。
    2. このノード(apps 以下)で対応するプロパティを作成します。
      • このプロパティには、Sling Resource Resolver 設定に基づいた優先順位が付けられます。
      • プロパティタイプの変更がサポートされています。
        /libs で使用されているものとは異なるプロパティタイプを使用する場合、定義したプロパティタイプが使用されます。

    注意:

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

  • 自動作成されたプロパティの再定義

    デフォルトでは、自動作成されたプロパティ(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. プロパティ sling:hideProperties(タイプ String または String[])を作成します。これを使用して、非表示にする(無視する)プロパティを指定します。ワイルドカードを使用することもできます。次に例を示します。
      • *
      • ["*"]
      • 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 の呼び出し

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

注意:

リソースにアクセスするときは、適切なマウントポイントを使用することが推奨されます。

適切なマウントポイントを使用すれば、Sling Resource Merger が確実に呼び出され、完全にマージされたリソースが確実に返されます(/libs からレプリケートする必要がある構造が低減します)。

  • オーバーレイ:
    • 目的:検索パスに基づいてリソースをマージする。
    • マウントポイント:/mnt/overlay
    • 使用方法:マウントポイント + 相対パス
    • 例:
      • getResource('/mnt/overlay' + '<relative-path-to-resource>');
  • オーバーライド:
    • 目的:スーパータイプに基づいてリソースをマージする。
    • マウントポイント:/mnt/overide
    • 使用方法:マウントポイント + 絶対パス
    • 例:
      • getResource('/mnt/override' + '<absolute-path-to-resource>');

使用例

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

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