こんにちはジャムです。
本記事では、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のデフォルトで使えるフィールターは以下リンクです。
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;
}
}
以上です。