ECCUBE4

EC-CUBE4 Twigで独自フィルターを作成する

こんにちはジャムです。

本記事では、EC-CUBE4のTwigで使用できるフィルター機能の拡張方法について解説します。

本記事を書いたきっかけとしては、データベースに保存している郵便番号をTwig上で表記する際に、データベースでは’1000000’みたいに保存しているが、表記としては100-0000みたいにする必要があったためです。

Twig フィルターとは

Twig上で変数を展開(表示)する際に、表示方法を変更する事ができる機能です。表記方法は {{ 変数名|フィルター名 }} で表示することができます。

例えば、 payment_dateという変数に”2020-11-25 00:00:00″というdatetimeのデータが入っているとします。

そのまま {{ payment_date }}と表記すると、2020-11-25 00:00:00と表記されてしまいます。

ただ、実際の表記は日付だけを表示したいということがあります。

このような場合にフィルターを使って表現する事ができます。

具体的な書き方は {{ payment_date | date(‘Y/m/d’) }}と書くことで、2020/11/21と表記することができます。

この date(‘Y/m/d’)の部分がフィルターになります。

dateはデフォルトで使えるフィルターになります。

Twigのデフォルトで使えるフィールターは以下リンクです。

Twigフィルターリンク

EC-CUBE4で独自フィルターを定義する

EC-CUBE4で独自フィルターを定義するには、「EccubeExtension.php」というファイルを作成します。

作成場所は「Customize/Twig/Extension」です。

ポイントは3つです。

  • AbstractExtensionを継承する
  • getFiltersメソッドに new TwigFilterを定義する
  • 実際のメソッドを定義する

以下ソースコードは7桁の数字(郵便番号)を3桁の数字-4桁の数字に表記するフィルターの定義です。

<?php

namespace Customize\Twig\Extension;

use Eccube\Entity\Product;
use Eccube\Entity\ProductClass;
use Twig\Extension\AbstractExtension;
use Twig\TwigFilter;
use Twig\TwigFunction;

class EccubeExtension extends AbstractExtension
{
    public function getFilters()
    {
        return [
            new TwigFilter('postal_code', [$this, 'formatPostalCode']),
        ];
    }

    public function formatPostalCode($value)
    {
        $forntPostalCode = substr($value, 0, 3);
        $endPostalCode = substr($value, 3, 4);
        $formatPostalCode = $forntPostalCode . '-' . $endPostalCode;

        return $formatPostalCode;
    }
}

以上です。