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 Resource Resolver 設定に基づいた優先順位が付けられます。
-
プロパティタイプの変更がサポートされています。
/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
以下のページで、一部の例が紹介されています。
-
オーバーレイ:
-
オーバーライド: