コフス技術ブログ

LiquidJSにて自作フィルターを使う方法

LiquidJSを使うとShopifyのLiquidテンプレートエンジンをクライアントサイドで使うことができますが、内部で使えるフィルターは必ずしもShopifyのLiquidテンプレートエンジンと同じではありません。

例えば数字をカンマ区切りで表示したい場合、ShopifyのLiquidテンプレートエンジンでは{{ 123456789 | money_without_currency }}とすると123,456,789と表示されますが、LiquidJSではこれに該当するフィルターが存在しません。

ですがLiquidJSでは割りと簡単に自作フィルターを追加することができます。

以下は{{money_without_currency}}と同様にカンマ区切りで数字を表示出来る{{number_with_delimiter}}というフィルターを追加する例です。

import { Liquid } from 'liquidjs';

const engine = new Liquid();
const appDiv: HTMLElement = document.getElementById('app');

/**
 * 数字をカンマ区切りに変換する
 * @param number
 */
const exchangeNumberWithDelimiter = (number: number) => number.toLocaleString();

// フィルターを追加登録
engine.registerFilter('number_with_delimiter', exchangeNumberWithDelimiter);

// パースとレンダリング
engine
  .parseAndRender('{{123456789 | number_with_delimiter}}')
  .then((render) => {
    console.log(render); // 123,456,789
    appDiv.innerHTML = render;
  });

フィルターで実行したい関数と、それを登録するregisterFilterメソッドを用意すれば簡単に自作フィルターを追加することができます。

参考:LiquidJS - Register Filters