レイアウト・サービスのレンダリング出力のカスタマイズ
このページの翻訳はAIによって自動的に行われました。可能な限り正確な翻訳を心掛けていますが、原文と異なる表現や解釈が含まれる場合があります。正確で公式な情報については、必ず英語の原文をご参照ください。
レンダリングをJSONにシリアル化する場合、レイアウト サービスはレンダリングの内容にレンダリングのデータ ソース アイテムのフィールドを入力します。
場合によっては、次のような他の種類のデータを出力に含める必要があります。
-
コンテキスト項目からのデータ。
-
データソースまたはコンテキストアイテムの子からのデータ。
-
他のアイテムからのデータ。
-
前述のデータの種類をより限定して表示し、不要なデータを過度にフェッチしないようにします。
-
計算された値またはより複雑な値。
-
xDBからの情報などの非アイテム データ。
-
外部システムからのSitecore以外のデータ。
次のセクションでは、レイアウト サービスによって返されるレンダリング出力をカスタマイズするためのいくつかのオプションについて説明します。
GraphQL APIの使用
Sitecoreレンダリングのレイアウト サービス出力をカスタマイズするには、レンダリングでGraphQLクエリを設定します。JSSでは、この手法を 統合GraphQLと呼びます。クエリは、レイアウトサービスリクエスト中、またはExperience Edgeを使用している場合は公開時にサーバー側で実行されます。
Sitecoreレイアウト サービスがページをレンダリングすると、ページのレイアウトのJSON表現と各レンダリング/コンポーネントのデータが返されます。通常、レンダリング/コンポーネント データは、Sitecoreデータソース アイテムのフィールドのセットです。統合されたGraphQLを使用すると、これをGraphQLクエリ結果に形を変えることができます。
この手法を使用するには、次のことを行う必要があります。
-
クエリするスキーマを持つSitecore GraphQLエンドポイント を定義します。
-
エンドポイントを使用するようにアプリケーションを設定します。例えば:
統合されたGraphQLは、GraphQLクエリをコンポーネントのレンダリングアイテムのComponent GraphQL Queryフィールドに格納することで動作します。たとえば、GraphQLサンプル アプリでは、/sitecore/layout/Renderings/JssBasicAppGraphQL/IntegratedPageに対してクエリを設定します。例えば:
defaultおよびjssレイアウト サービス構成では、$datasource、 $contextItem、および$languageの値が自動的に挿入されます。
Sitecoreがレイアウト リクエストを受信すると、コンポーネントが空でないGraphQLクエリを定義している場合、クエリはアプリに設定されたGraphQLエンドポイントに対してインプロセスで実行されます。結果は、返される通常のレンダリング フィールド値を置き換えます。
組み込みのレンダリング コンテンツ リゾルバーの選択または構成
ヘッドレス サービスでは、レンダリングごとにRendering Contents Resolverを設定して、レンダリングとそれに関連するデータのシリアル化方法を決定できます。レンダリング コンテンツ リゾルバは /sitecore/system/Modules/Layout Service/Rendering Contents Resolvers.デフォルトでは、ヘッドレスサービスは次のリゾルバーを提供します。
-
Datasource Resolver - デフォルトの動作。レンダリングのデータソース項目をシリアル化します。
-
Datasource Item Children Resolver - データソース項目の子をシリアル化します。
-
Context Item Resolver - データソースアイテムの代わりにコンテキストアイテムをシリアル化します。
-
Context Item Children Resolver - コンテキスト項目の子をシリアル化します。
-
Folder Filter Resolver - データソース項目の子孫をシリアル化します (フォルダーを除く)。
Rendering Contents Resolversフォルダに独自の設定を作成するには、次の使用可能なパラメータを使用します。
-
Type - これは、独自の実装を作成している場合を除き、Sitecore.LayoutService.ItemRendering.ContentsResolvers.RenderingContentsResolver, Sitecore.LayoutServiceです。
-
Include Server URL in Media URLs - JSSでビルドされたフロントエンドアプリをIntegratedモードで実行している場合を除き、常にこのフィールドをオンにします。
-
Use Context Item - データソースアイテムの代わりにコンテキストアイテムを使用します。
-
Item Selector Query - シリアル化されたアイテムをカスタマイズするためのSitecoreクエリを提供します。これは、上記の選択に応じて、データソースやコンテキストアイテムに対して相対的である必要があります。
大事なこのパラメーターを使用するときは、パフォーマンスに深刻な悪影響を与えるSitecoreクエリを簡単に作成できることに注意してください。
-
Parameters - 任意のパラメータを指定します。これらはデフォルトでは使用されませんが、独自の実装を作成する際に役立つ可能性があります。
レンダリング コンテキスト リゾルバを使用するには、適用先のコンポーネントを参照するレンダリング アイテムのRendering Contents Resolverフィールドで設定する必要があります。例については、Sitecore FormsをJSSと統合するときにFormレンダリングのリゾルバーを設定する このチュートリアル を参照してください。
IRenderingContentsResolverインターフェイスの作成
レイアウト サービスでは、IRenderingContentsResolverインターフェイスを使用して、シリアル化されたレンダリングの内容を完全にカスタマイズできます。
可能な限り、将来の互換性のために、以前のノーコードオプションのいずれかを使用することをお勧めします。
レンダリングのデフォルトのIRenderingContentsResolverインタフェースをオーバーライドするには、独自の実装を作成し、Rendering Contents Resolverアイテムを作成してカスタムTypeを指定します。例えば:
実装によって返されたオブジェクトのフィールドは、アイテムコンテンツであるかのようにフロントエンドコンポーネントにバインドできます(たとえば、Reactのprops )。
Sitecore.LayoutService.ItemRendering.ContentsResolvers.RenderingContentsResolverクラスを拡張し、クラスのProcessItemメソッドを使用して、高度なSitecoreエディターのアイテム フィールドのレンダリングを有効にすることができます。
個別のRESTエンドポイントの代わりに統合されたGraphQLクエリを使用する利点
上記の一部のシナリオでは、必要なデータにアクセスするために別のRESTエンドポイントを作成することが別の方法になる場合があります。ただし、前述の手法には、RESTエンドポイントを使用する場合と比較して、次のようないくつかの利点があります。
-
追加のHTTPラウンドトリップはありません。
-
コンポーネントへのデータの自動バインド。
-
データはサーバー/ユニバーサルレンダリングに使用できます。
-
現在のアプリケーション、コンテキストアイテム(ルート)、またはデータソースアイテムに関連する追加データのクエリが容易になります。
統合されたGraphQLクエリの使用と 、Layout Serviceによって返されるコンテキストデータの拡張との間には、潜在的なユースケースで重複する部分があります。
統合されたGraphQLクエリにより、コンテンツ作成者がルート内でそのレンダリングを利用する場合にのみ、データが使用可能になります。
レイアウト サービスによって返されるコンテキスト データの拡張は、通常、複数のコンポーネントで使用される可能性のある情報、またはPlaceholder内で管理されていない静的に配置されたコンポーネントのデータを提供することを目的としています。