SXA Storefront 設定ファイルの拡張
SXA Storefront 設定ファイルは、拡張性を有効にするために機能領域ごとにグループ化されているため、要件に合わせてデフォルトの実装をカスタマイズおよび置換できます。単一の設定ファイルに複数のレンダリングが含まれる場合もあれば、レンダリングに独自の設定ファイルがある場合もあります。
設定ファイルは C:\inetpub\wwwroot\<SXAStorefront>\App_Config\Include\Feature\Commerce
ディレクトリにあり、以下のものが含まれています。
-
Sitecore.Commerce.XA.Feature.Catalog.config
- この設定ファイルには、カタログに関連するすべてのものが含まれています。 -
Sitecore.Commerce.XA.Feature.<rendering>.config
- いくつかのレンダリングには、Sitecore.Commerce.XA.Feature.Cart.config
、Sitecore.Commerce.XA.Feature.Checkout.config
、Sitecore.Commerce.XA.Feature.FreeGiftSelection.config
、Sitecore.Commerce.Feature.Minicart.config
などの独自の設定ファイルがあります。
SXA Storefront 設定ファイルは、Sitecore に組み込まれた依存関係挿入を利用し、次の拡張ポイントを備えています。デフォルトでは、SXA Storefront 設定ファイルには、定義およびカスタマイズできる 4 つの一般的な設定があります。
必要に応じて、設定ファイルを追加できます。
次のコードは、設定ファイルの構造の例です。
<configuration>
<sitecore>
<commerce.XA>
<models>
<!--<Ajax calls model>--->
<!--<Rendering model>--->
</models>
</commerce.XA>
<pipelines>
<!--<Pipelines’ processors>--->
</pipelines>
<services>
<!--<Registered services>--->
</services>
</sitecore>
</configuration>
Ajax 呼び出しモデル
次の例は、Sitecore.Commerce.XA.Feature.Cart.config
ファイルから取得したもので、カートの行数を取得するために Ajax 呼び出しで使用されるモデルが定義されています。呼び出しのフロントエンドとバックエンド間でより多くの情報を渡したい場合は、元の CartLinesCountJsonResult
クラスから継承する新しいカスタム クラスを作成してから、定義したカスタム クラスを指すようにデフォルト設定にパッチを適用する新しいカスタム設定ファイルを追加します。変更の性質と実装によっては、Ajax 呼び出しを実行する JavaScript と、呼び出しを受信するバックエンド メソッドの更新が必要になる場合もあります。
<commerce.XA>
<models>
<CartLinesCountJsonResult
type="Sitecore.Commerce.XA.Feature.Cart.Models.JsonResults.CartLinesCountJsonResult, Sitecore.Commerce.XA.Feature.Cart" />
</models>
</commerce.XA>
レンダリング モデル
独自の MVC レンダリング モデルを追加できます。<models> セクションでは、次のものを定義します。
-
レンダリング モデルの新しいタイプ
次の例は、Sitecore.Commerce.XA.Feature.MiniCart.config
ファイルから取得したもので、ミニカート レンダリング モデルを定義します。
<commerce.XA>
<models>
<MinicartRenderingModel
type="Sitecore.Commerce.XA.Feature.Cart.Models.MinicartRenderingModel, Sitecore.Commerce.XA.Feature.Cart" />
</commerce.XA>
既存のレンダリング モデルで公開されているコンテンツを拡張して、より多くのデータをレンダリングで使用できるようにする場合は、元のクラスから継承する新しいカスタム クラスを作成する必要があります。この場合は、MinicartRenderingModel
クラスです。その後で、定義したカスタム クラスを指すようにデフォルト設定にパッチを適用する新しいカスタム設定ファイルを追加します。
Razor ビューをベースとした通常の MVC レンダリングで使用されるモデルを拡張する場合は、ビューを更新して追加情報をフェッチします。デフォルトのビューを更新する代わりに、レンダリングのクローンを作成して、それを新しいカスタム ビューにポイントします。レンダリングのクローンを作成することにより、商品のアップグレード中にカスタマイズが上書きされないようにします。レンダリングがレンダリング バリアントに基づいている場合は、SXA レンダラーを使用してカスタム モデルの新しいプロパティにアクセスできます。レンダリング バリアントが Scriban テンプレートを使用する場合、新しいモデルのプロパティはすぐに利用可能になり、Scriban コードからアクセスできます。ビューの場合と同様に、商品のアップグレード時にカスタマイズが上書きされないように、レンダリングのクローンを作成することが重要です。
パイプラインおよびプロセッサー
既存のパイプラインを変更したり、カスタム パイプラインを追加したりできます。各パイプラインには一連のプロセッサーが含まれています。<pipelines>
セクションでは、拡張または追加するパイプラインを定義してから、新規またはカスタマイズしたプロセッサーを指定します。
-
初期化の一部であるプロセッサー
-
ExperienceAccelerator など、指定されたグループの一部であるプロセッサー
次の例は、Sitecore.Commerce.XA.Feature.Catalog.config
ファイルから取得したもので、標準の SXA パイプラインは InitializeGlobalFilters
、パッチが適用されている新しいコマース固有のプロセッサーは PrepareSearchItems
です。
<pipelines>
<initialize>
<processor
patch:before="processor[@type='Sitecore.Mvc.Pipelines.Loader.InitializeGlobalFilters, Sitecore.Mvc']"
type="Sitecore.Commerce.XA.Feature.Catalog.Pipelines.Initialize.RegisterRoutes, Sitecore.Commerce.XA.Feature.Catalog" />
</initialize>
<group groupName="experienceAccelerator">
<pipelines>
<processSearchItems>
<processor type="Sitecore.Commerce.XA.Feature.Catalog.Pipelines.Search.PrepareSearchItems, Sitecore.Commerce.XA.Feature.Catalog" resolve="true" />
</processSearchItems>
</pipelines>
</group>
</pipelines>
サービス
各サービス レイヤーには、カスタマイズ可能な独自のインターフェイスがあります。サービスは通常、ある種の API であり、SXA Storefront では、各レンダリングの MVC コントローラーがサービスとして登録されるため、カスタマイズして置き換えることができます。<services>
セクションでは、サービスとインターフェイスを登録し、有効期間サービス (Transient
または Singleton
) を定義します。サービスごとに、以下を指定します。
-
serviceType
- インターフェース API を設定します。 -
implementationType
- インターフェイスを実装します。 -
有効期間サービス - サービスの処理方法を決定します。Transient 有効期間サービスは、サービス コンテナーから要求されるたびに作成されます。一方、Singleton 有効期間サービスは、最初に要求されたときに作成され、その後のすべての要求は同じインスタンスを使用します。
次の例は、Sitecore.Commerce.XA.Feature.Catalog.config
ファイルから取得したもので、商品価格コントローラーとインターフェースは、一時的なものとして Sitecore に登録されます。
<service>
<register
serviceType="Sitecore.Commerce.XA.Feature.Catalog.Controllers.ProductPriceController,
Sitecore.Commerce.XA.Feature.Catalog"
implementationType="Sitecore.Commerce.XA.Feature.Catalog.Controllers.ProductPriceController,
Sitecore.Commerce.XA.Feature.Catalog"
lifetime="Transient" />
</service>