Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

概要

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
という結果が表示されたと思います。

おわりに

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

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away