Tailwind Logo

XM Cloud のコンポーネントウィザードの設定 - その 5 Component variants

XM CloudHeadless SXA

公開日: 2024-10-09

Sitecore Headless SXA ではコンポーネントのレンダリングに関して、Variants を利用して切り替えることができます。今回は、コンポーネントを作成する際のベーステンプレートに関して調べていきます。

標準のコンポーネントの作成

今回は検証用として、まず標準的なコンポーネントとして以下の設定をしている Sample を作成します。

componentvariants01.png

Datasource のタブでは、Datasouce の項目を Automatically create data source under page ( Data フォルダの下にアイテムを自動で作成する)および Rendering template を以下のように設定します。

componentvariants02.png

また Behaviors に対しては、Dynamic placeholders を設定します。

componentvariants03.png

これで CMS 側でのコンポーネントの準備ができました。続いて、このコンポーネントで利用するサンプルを作成します。Next.js アプリのルートパスで以下のコマンドを実行します。

PowerShell
jss scaffold Sample

サンプルで生成されたコードに対して、Test を追加します。

TypeScript
import React from 'react';
import { ComponentParams, ComponentRendering } from '@sitecore-jss/sitecore-jss-nextjs';

interface SampleProps {
  rendering: ComponentRendering & { params: ComponentParams };
  params: ComponentParams;
}

export const Default = (props: SampleProps): JSX.Element => {
  const id = props.params.RenderingIdentifier;

  return (
    <div className={`component ${props.params.styles}`} id={id ? id : undefined}>
      <div className="component-content">
        <p>Sample Component</p>
      </div>
    </div>
  );
};

export const Test = (props: SampleProps): JSX.Element => {
  const id = props.params.RenderingIdentifier;

  return (
    <div className={`component ${props.params.styles}`} id={id ? id : undefined}>
      <div className="component-content">
        <p>Sample Test Component</p>
      </div>
    </div>
  );
};

これで、コンポーネントを配置して標準では Default を指定する形として、 Smaple Component が表示され、Test を指定した場合は Sample Test Component が表示されるようになります。

Variants の作成

上記のコンポーネントに対しての Variants の設定を追加していきます。これはサイトの下にある Presentation - Headless Variants の下に、今回のコンポーネントの名前である Sample を、その下に Default と Test を用意します。

componentvariants04.png

Experience Editor での動作確認

作成をしたコンポーネントを配置すると、Variant: の項目で Default と Test が表示されているのが分かります。

componentvariants05.png

無事、Variant の項目が表示されていることを確認することができました。

Pages での動作確認

今度は Pages で上記の設定を確認します。Pages の場合はパラメーターを参照している形ですが、Variants の項目が無いため選択することができません。

componentvariants06.png

今回作成をしたコンポーネントの Rendering Parameters を参照しにいくと、以下のようになっています。

componentvariants07.png

例えば、Promo コンポーネントの Rendering Parameters を参照しに行くと以下のテンプレートを継承していることが分かります。

componentvariants08.png

この Base Rendering Parameters に関しては、 /sitecore/templates/Foundation/JSS Experience Accelerator/Presentation/Rendering Parameters/BaseRenderingParameters で定義されており、Standard Value を確認しにいくと Variant の項目が含まれていることが分かります。

componentvariants09.png

そこで Rendering Parameters が利用しているベースを変更します。

componentvariants10.png

変更後、Pages を参照すると以下のように Variant を選択できるようになっています。

componentvariants11.png

Variant に対応したコンポーネントを作成する

実は最初のコンポーネントを作成するときに、Base になるテンプレートの選択が可能となっています。

componentvariants12.png

これで Rendering Parameters の項目を作成したときに指定できるようになり、Pages でも問題なく Variants を選択できるようになります。

まとめ

今回は Rendering Parameters の役割を確認しました。背景画像の時にも紹介をしましたが、Pages の動作は Rendering Parameters を参照しているため、編集しやすく項目を表示したい場合、この部分を見直すといいです。

関連タグ