環境
- Sitecore 10.0.1 rev. 004842.
- Sitecore Experience Accelerator 10.0.0 rev. 200714
Scribanとは?
Scribanは高速で軽量なスクリプト言語です[1]。
![](/-/media/Images/blogs/2023/20231213/NEW-EXAMPLE-SCRIB.ashx?h=293&w=512&hash=2206312EE7A08582647A6C45B2C9C2AF)
Scribanを使用すればレンダリングバリアントを使ってHTMLの中でさまざまなサイトコアアイテム関連関数を使用できます。SXAにて、使用できる埋め込み関数
[2]と組み込み関数[3]がいくつかありますが、サーバー側から呼び出されるカスタム関数を作ることも可能です。
カスタム関数作成
アイテム作成
例として、文字列と日付フィールドを持つアイテムとテンプレートを作成しましょう。
次に、レンダリングバリアントを作り、さらにその配下にバリアントを作り、バリアントの配下にScribanを作成しましょう。
レンダリングバリアントのビューファイルも必要なので、ビューファイルを作成しましょう。レンダリングバリアントのビューファイルはこのように作成されます
![](/-/media/Images/blogs/2023/20231213/view-file.ashx?h=222&w=1198&hash=CD3A648D29C027858F8646DF52158019)
そこで、コントローラーレンダリングを作成しましょう。コントローラーの箇所にレンダリングバリアントの処理
”Sitecore.XA.Foundation.RenderingVariants.Controllers.VariantsController,Sitecore.XA.Foundation.RenderingVariants”
を入れましょう。
コントローラーアクションは”Index”になります。
データソースロケーションに、作成したアイテムが入ります。
データソーステンプレートに作成したアイテムテンプレートが入ります。
最後に、レンダリングビューパスに作成したcshtmlファイルを入れましょう。
![](/-/media/Images/blogs/2023/20231213/rendering-controller-and-action.ashx?h=198&w=845&hash=3A0FAD1AE5FD7B198FB896E19CB3DC79)
![](/-/media/Images/blogs/2023/20231213/rendering-datasource.ashx?h=250&w=763&hash=0A4372A802A30A9584BB60B9FDCA58EB)
![](/-/media/Images/blogs/2023/20231213/rendering-view-path.ashx?h=94&w=454&hash=BB0E00E9D00DE2A420AEA79F974AA547)
サーバー側作成
コントローラーレンダリングを作ったら、C#側で、コントローラーを作りましょう。IGenerateScribanContextProcessorをベースクラスにするのは必須です。
空白なコンストラクタとProcessというメソッドが必要です。Processの引数はScribanが使ってる情報になります。
このコントローラーにて、カスタム関数を作れます。
![](/-/media/Images/blogs/2023/20231213/empty-controller.ashx)
前に作ったアイテムの日付フィールドのデータを引数として受け取り、好きな日付形式の文字列を出力する関数を作成しましょう。Scribanからアイテムのフィールドを呼び出すと、サーバー側ではFieldWrapper形式として読み込むことができます。そのため、FieldWrapperを受け取るdelegate string型の’delegateDateTimeFormat’を作成しましょう。
次に、日付を扱うDateTimeFormatを作成しましょう。そして、Processの中で新しい引数としてDateTimeFormatのdelegateDateTimeFormatを作成し、Scribanの引数のGlobalScriptObjectに二つの引数を追加します。一つ目はScriban側で関数を呼び出す際の関数名を定義しましょう。二つ目は先ほど作成したデリゲートになります。
![](/-/media/Images/blogs/2023/20231213/final-controller.ashx?h=394&w=1202&hash=B8F2F9A8D26B3A82038102D23628AE29)
最後に、カスタム関数を使うには、Sitecore(サイトコア)のパイプラインコンフィグにgenerateScribanContext設定を追加しなければなりません。processor typeは「コントローラーパス」、「アセンブリ」になります。
![](/-/media/Images/blogs/2023/20231213/config.ashx?h=123&w=1269&hash=A4DA5E79984EB4C7D91982CD5AC27ED8)
Scriban作成
それぞれの処理が設定されてるので、Scribanにて、作ったカスタム関数を使えるようになりました。
"i_datasource"は自動的にレンダリングのデータソースになるので、i_datasourceから作ったアイテムのフィールドをアクセスできます。データソースと新しく作った関数を使いましょう。Scribanのカスタム形は下記のように構造されます。
{{「サーバー側で定義した関数名」 「引数」}}
今回のカスタム関数名は”getDateTimeFormat”で、受け取る引数はFieldWrapper(アイテムの”Date”フィールド)なので、Scriban上に
{{ getDateTimeFormat i_datasource.Date }}
を書きましょう。
![](/-/media/Images/blogs/2023/20231213/NEW-SCRIBAN-ENDINGNING.ashx?h=94&w=620&hash=5FA023CAFF2AF77F60C03B03412EE6E9)
結果
レンダリングをページに追加すれば、処理が走って、結果がHTMLの中で表示されます。
![](/-/media/Images/blogs/2023/20231213/final-result.ashx)
参考
1:Sitecore Documentation: Scriban テンプレートの使用
2:Sitecore Documentation: Scriban テンプレートの組み込み関数
3:Github: scriban/doc/builtins.md
※エントリーの内容・画像等は、公開時点での情報に基づきます。
※Sitecoreのバージョンによって実装されている機能が異なります。