AEMでのSling Resource Mergerの使用 using-the-sling-resource-merger-in-aem
目的 purpose
Sling Resource Merger は、リソースのアクセスとマージのためのサービスを提供します. 次の両方に対して差分メカニズムを提供します。
Sling Resource Mergerは、オーバーレイとオーバーライドリソース(およびそのプロパティ)の両方を元のリソースとプロパティと組み合わせます。
-
カスタマイズされた定義の内容は、元の定義よりも優先されます。 つまり、オーバーレイまたは オーバーライド です。
-
必要な場合には、カスタマイズされた定義に含まれるプロパティが、元の定義から結合されたコンテンツをどう使用するかを指定します。
AEM の目的 goals-for-aem
AEM で Sling Resource Merger を使用する目的は、次のとおりです。
-
/libsにカスタマイズの変更が加えられないようにする。 -
/libsからレプリケートされる構造を減らす。Sling Resource Mergerを使用する場合、
/libsから構造全体をコピーすることはお勧めしません。 その理由は、カスタマイズに保持される情報が多すぎるためです(通常は/apps)。 情報を複製すると、システムがアップグレードされたときに問題が発生する可能性が不必要に高まります。
sling:resourceSuperTypeを使用して接続を行います。/appsでカスタマイズを定義することなので、オーバーライドは/appsで定義されることがよくあります。 理由は、/libsの下の項目は変更できないためです。/libs パス内は一切変更し ない でください。/libsのコンテンツが上書きされるからです。 また、ホットフィックスまたは機能パックを適用すると、上書きされる可能性があります。-
必要な項目(
/libs内に存在)を、/appsの下で再作成します。 -
/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
/libsから構造全体をコピーすることはお勧めしません。 その理由は、/appsに保持されている情報が多すぎるためです。 その結果、システムがアップグレードされたときに問題が発生する可能性があります。ユースケース use-cases
これらのユースケースでは、標準機能を使用して次の操作を行うことができます。
-
プロパティの追加
プロパティは
/libs定義に存在しませんが、/appsオーバーレイ / オーバーライドで必要です。/apps内に、対応するノードを作成します。- このノード``で新しいプロパティを作成します。
-
プロパティの再定義(自動作成されたプロパティ以外)
プロパティは
/libsで定義されていますが、/appsオーバーレイ / オーバーライドには新しい値が必要です。-
/apps内に、対応するノードを作成します。 -
このノード(
apps以下)に一致するプロパティを作成します-
プロパティには、Sling リソースリゾルバー設定に基づく優先度があります。
-
プロパティタイプの変更がサポートされています。
/libsで使用されているものとは異なるプロパティタイプを使用する場合、その定義したプロパティタイプが使用されます。
-
note NOTE プロパティタイプの変更がサポートされています。 -
-
自動作成されたプロパティの再定義
デフォルトでは、自動作成されたプロパティ(
jcr:primaryTypeなど)は、現在/libsの下にあるノードタイプが確実に尊重されるように、オーバーレイ/オーバーライドの対象にはなりません。 オーバーレイ/オーバーライドを適用するには、/appsでノードを再作成し、プロパティを明示的に非表示にして再定義する必要があります。-
/apps以下に、必要なjcr:primaryTypeを持つ、対応するノードを作成します。 -
自動作成されたプロパティに設定された値で、そのノードに
sling:hidePropertiesプロパティを作成します。例:jcr:primaryType/appsで定義されたこのプロパティは、/libsで定義されたものよりも優先されるようになりました
-
-
ノードおよびその子の再定義
ノードとその子は
/libsで定義されていますが、/appsオーバーレイ / オーバーライドでは新しい設定が必要です。-
次のアクションを組み合わせます。
- ノードの子の非表示(そのノードのプロパティは維持)
- プロパティ/プロパティの再定義
-
-
プロパティの非表示
プロパティは
/libsで定義されていますが、/appsオーバーレイ / オーバーライドでは必要ありません。-
/apps内に、対応するノードを作成します。 -
String型またはString[]型のsling:hidePropertiesプロパティを作成します。 非表示/無視するプロパティを指定するには、を使用します。 ワイルドカードも使用できます。 次に例を示します。*["*"]jcr:title["jcr:title", "jcr:description"]
-
-
ノードおよびその子の非表示
ノードとその子は
/libsで定義されていますが、/appsオーバーレイ / オーバーライドでは必要ありません。-
/apps以下に、対応するノードを作成します。 -
sling:hideResourceプロパティを作成します- 型:
Boolean - 値:
true
- 型:
-
-
ノードの子の非表示(そのノードのプロパティは維持)
ノード、そのプロパティおよびその子が
/libsに定義されていて、 ノードとそのプロパティは/appsオーバーレイ / オーバーライドで必要ですが、/appsオーバーレイ / オーバーライドでは一部またはすべての子ノードは必要ありません。-
/apps以下に、対応するノードを作成します。 -
sling:hideChildrenプロパティを作成します。- 型:
String[] - 値:非表示/無視する子ノード(
/libsで定義)のリスト
ワイルドカード *を使用すると、すべての子ノードを非表示にしたり、無視したりできます。
- 型:
-
-
ノードの並べ替え
ノードとその兄弟が
/libs内で定義されていて、 順序を変更するには、/appsオーバーレイまたはオーバーライドでノードを再作成します。/libsの適切な兄弟ノードを参照して、新しい位置を定義します。-
sling:orderBeforeプロパティを使用します。-
/apps以下に、対応するノードを作成します。 -
sling:orderBeforeプロパティを作成します。現在のノードが次の前に配置されているノード(
/libsなど)を指定します。- 型:
String - 値:
<before-SiblingName>
- 型:
-
-
コードからSling Resource Mergerを呼び出します invoking-the-sling-resource-merger-from-your-code
Sling Resource Merger には 2 つのカスタムリソースプロバイダーが含まれています。1 つはオーバーレイ用、もう 1 つはオーバーライド用です。 それぞれ、コード内でマウントポイントを使用して呼び出すことができます。
/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
以下のページで、一部の例が紹介されています。
-
オーバーレイ:
-
オーバーライド: