バリアントのレンダリングでの ModelReference フィールド レンダラーの使用

概要

ModelReference フィールド レンダラーでは、レンダリング バリアントを使用して、ネストされたオブジェクト (商品バンドルなど) を持つモデルを参照できます。

SXA には、デフォルトのレンダリングとレンダリング バリアント (Reference フィールド レンダラーや Model フィールド レンダラーなど) のセットが付属しています。ただし、タイプ コレクションのモデル プロパティを処理するには、ModelReference フィールド レンダラーを使用する必要があります。

ModelReference フィールド レンダラーでは、レンダリング モデル内の指定されたコレクションが反復処理され、追加の Model フィールド レンダラーをサブアイテムとして使用してデータを抽出できます。アイテムの [パススルー フィールド] フィールドでコレクションを指定します。ターゲットとなるモデル コレクション プロパティでは、IEnumerable インターフェースを実装する必要があります。

レンダリング バリアントの構造図。

標準のフィールド レンダラーは、ModelReference フィールド レンダラーの下でネストされた形式で使用できます。また、次の商品バンドルの図に示すように、ModelReference フィールド レンダラーをネストして、複数レベルのネストされたオブジェクト (階層) を持つモデルでコレクション プロパティをターゲットにすることもできます (非推奨)。

ModelReferenceContentTree94.png

次のクラスの図は、ModelReference フィールド レンダラーを使用する方法の例を示しています。この図には、ネストされた 4 つのコレクションがあり、これらを通じて、ModelReference レンダラーを使用して商品バンドル コンポーネントのデフォルトのレンダリング バリアントが繰り返し処理されます。

  • ProductBundleRenderingModel により、LineItems コレクションが繰り返し処理されます。

  • ProductVariant クラスにより、VariantSelections コレクションが繰り返し処理されます。

  • BundleVariantsReference により、ValidProductVariants コレクションが繰り返し処理されます。

  • Options クラスにより、Options コレクションが繰り返し処理されます。

  • BundleValueVariantsReference により、Variants コレクションが繰り返し処理されます。

商品バンドル レンダリング モデルの図

Scriban テンプレートを変更して、商品バンドルをカスタマイズできます。

ModelReference レンダラーを使用するには、コレクション プロパティを使用してレンダリング モデル クラスを作成する必要があります。モデル クラスは VariantsRenderingModel から継承する必要があります。

using Sitecore.XA.Foundation.Variants.Abstractions.Models; 
namespace ProductList.Models 
{ 
    public class ProductListRenderingModel: VariantsRenderingModel 
    { 
        public ICollection<Product> Products { get; set; } 
    } 
} 

Sitecore.Commerce.XA.Foundation.Common.config 設定ファイルで ModelReference フィールド レンダラーを登録するには、次のコード スニペットを使用します。

<sitecore> 
    <services> 
        <register                             serviceType="Sitecore.Commerce.XA.Foundation.Common.RenderingVariants.Services.ICollectionPropertyExtractor, Sitecore.Commerce.XA.Foundation.Common" implementationType="Sitecore.Commerce.XA.Foundation.Common.RenderingVariants.Services.CollectionPropertyExtractor, Sitecore.Commerce.XA.Foundation.Common" lifetime="Singleton"/> 
    </services> 

<parseVariantFields> 
    <processor type="Sitecore.Commerce.XA.Foundation.Common.RenderingVariants.ParseVariantFields.ParseModelReference, Sitecore.Commerce.XA.Foundation.Common" resolve="true" /> 
</parseVariantFields> 

<renderVariantField> 
    <processor type="Sitecore.Commerce.XA.Foundation.Common.Pipelines.RenderVariantField.RenderModelReference, Sitecore.Commerce.XA.Foundation.Common" resolve="true" /> 
</renderVariantField> 
</sitecore>