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 で定義されるのが一般的です。AEMでは、カスタマイズを /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 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
以下のページで、一部の例が紹介されています。
-
オーバーレイ:
-
オーバーライド: