Edited at

[EC-CUBE4] Twig内で使用できる独自のヘルパー関数を追加する方法


概要

EC-CUBE4のTwigテンプレートでは準備されたヘルパー関数を使用することができます。

<a href="{{ url('mypage') }}">{{ 'ご注文履歴'|trans }}</a>

url('mypage')は、url関数によってマイページのご注文履歴の画面のURLが表示されます。

url()のようなTwigテンプレート内で使用できる関数は、独自の関数を作ることができます。

では、独自のヘルパー関数を追加して使用する例を以下に示します。


実装


Extension を実装する

ファイル app/Customize/Twig/Extension/EccubeExtension.php を新規作成します。

以下のプログラムを実装すると{{ test(引数1, 引数2) }}のTwigヘルパー関数が使用できるようになります。


app/Customize/Twig/Extension/EccubeExtension.php

<?php

namespace Customize\Twig\Extension;
use Twig\Extension\AbstractExtension;
use Twig\TwigFunction;

class EccubeExtension extends AbstractExtension
{
public function getFunctions()
{
return [
new TwigFunction('test', [$this, 'getTest']),
];
}

public function getTest($x, $y){
$result = $x * $y;
return "{$x} * {$y} = {$result}";
}
}



Twig内で独自関数を使用する

使いたい任意のテンプレート内に独自関数を記述していきます。

{{ test(100, 2) }}をTOPページにおいてみましょう。


src/Eccube/Resource/template/default/index.twig

{% block main %}

{# 省略 #}

{{ test(100, 2) }}

{% endblock %}


結果.png

100 * 2 = 200

という結果が表示されたと思います。


おわりに

本来、テンプレートに表示させる内容はコントローラーから渡してあげたものぐらいに抑えておくべきです。

テンプレートでは渡された値を表示されるだけにとどめていたほうが良いのですが、どうしてもテンプレート内で処理をさせないといけない等の場合にこの方法をお試しくださいませ。