SITECORE MANIA 開発者向け技術ブログ

SXA

バーンスティン オリバー

バーンスティン オリバー

SXAでScribanのカスタム関数

環境

  • Sitecore 10.0.1 rev. 004842.
  • Sitecore Experience Accelerator 10.0.0 rev. 200714

Scribanとは?

 Scribanは高速で軽量なスクリプト言語です[1]

 

 Scribanを使用すればレンダリングバリアントを使ってHTMLの中でさまざまなサイトコアアイテム関連関数を使用できます。SXAにて、使用できる埋め込み関数 [2]と組み込み関数[3]がいくつかありますが、サーバー側から呼び出されるカスタム関数を作ることも可能です

カスタム関数作成

アイテム作成

  例として、文字列と日付フィールドを持つアイテムとテンプレートを作成しましょう

 

 次に、レンダリングバリアントを作り、さらにその配下にバリアントを作り、バリアントの配下にScribanを作成しましょう。

 

 レンダリングバリアントのビューファイルも必要なので、ビューファイルを作成しましょう。レンダリングバリアントのビューファイルはこのように作成されます

 

 

 そこで、コントローラーレンダリングを作成しましょう。コントローラーの箇所にレンダリングバリアントの処理 

  ”Sitecore.XA.Foundation.RenderingVariants.Controllers.VariantsController,Sitecore.XA.Foundation.RenderingVariants” 

を入れましょう。

コントローラーアクションは”Index”になります。 データソースロケーションに、作成したアイテムが入ります。
データソーステンプレートに作成したアイテムテンプレートが入ります。 最後に、レンダリングビューパスに作成したcshtmlファイルを入れましょう。

 

サーバー側作成

  コントローラーレンダリングを作ったら、C#側で、コントローラーを作りましょう。IGenerateScribanContextProcessorをベースクラスにするのは必須です。 空白なコンストラクタとProcessというメソッドが必要です。Processの引数はScribanが使ってる情報になります。 このコントローラーにて、カスタム関数を作れます。

 

 

 前に作ったアイテムの日付フィールドのデータを引数として受け取り、好きな日付形式の文字列を出力する関数を作成しましょう。Scribanからアイテムのフィールドを呼び出すと、サーバー側ではFieldWrapper形式として読み込むことができます。そのため、FieldWrapperを受け取るdelegate string型の’delegateDateTimeFormat’を作成しましょう。

 次に、日付を扱うDateTimeFormatを作成しましょう。そして、Processの中で新しい引数としてDateTimeFormatのdelegateDateTimeFormatを作成し、Scribanの引数のGlobalScriptObjectに二つの引数を追加します。一つ目はScriban側で関数を呼び出す際の関数名を定義しましょう。二つ目は先ほど作成したデリゲートになります。

 

 

 最後に、カスタム関数を使うには、Sitecore(サイトコア)のパイプラインコンフィグにgenerateScribanContext設定を追加しなければなりません。processor typeは「コントローラーパス」、「アセンブリ」になります。  

 

 

Scriban作成

 それぞれの処理が設定されてるので、Scribanにて、作ったカスタム関数を使えるようになりました。 "i_datasource"は自動的にレンダリングのデータソースになるので、i_datasourceから作ったアイテムのフィールドをアクセスできます。データソースと新しく作った関数を使いましょう。Scribanのカスタム形は下記のように構造されます。
{{「サーバー側で定義した関数名」 「引数」}}

 今回のカスタム関数名は”getDateTimeFormat”で、受け取る引数はFieldWrapper(アイテムの”Date”フィールド)なので、Scriban上に

{{ getDateTimeFormat i_datasource.Date }}

    を書きましょう。

 

結果

 レンダリングをページに追加すれば、処理が走って、結果がHTMLの中で表示されます。

 

 

 

参考

1:Sitecore Documentation: Scriban テンプレートの使用

2:Sitecore Documentation: Scriban テンプレートの組み込み関数

3:Github: scriban/doc/builtins.md



※エントリーの内容・画像等は、公開時点での情報に基づきます。
※Sitecoreのバージョンによって実装されている機能が異なります。

この記事を読んだ人はこちらの記事も読んでます

Sitecore導入に関するご相談・資料ダウンロード

導入をご検討・ご依頼の方や、サービスについてご不明点がございましたらお気軽にお問い合わせください。

Sitecoreの運用問題を解決する

既にSitecoreを導入しているお客様向けサービス