1

友達を表示するために大きなコードを使用し、いくつかのテンプレートで使用しているため、マクロにしたかったのですが、構文が非常に一般的ではなく、これを行う方法があるかどうかわかりません。

分離したいコードの部分は次のとおりです。

       {% if(fr.email != null) %}
            <p>
                <span class ="label">Email Address: </span> 
                <a  class="email" href="{{ path('friend_email', {'id': fr.id}) }}">
                    {{ fr.email }}
                </a>
            </p>
        {% endif %}

        {% if(fr.phone != null) %}
            <p>
                <span class="label">Phone: </span>
        {{ fr.phone }}
            </p>
        {% endif %}

など、約 10 個の変数について。別のテンプレートでこれを使用していますが、fr.email、fr.phone などの代わりに、friend.email、friend.phone... が必要です。

私はこれを試しましたが、成功しませんでした:

{% macro display_friend(fr) %}

    {% if({{ fr }}.email != null) %}
            <p>
                <span class ="label">Email Address: </span> 
                <a  class="email" href="{{ path('friend_email', {'id': {{ fr }}.id}) }}">
                    {{ {{ fr }}.email }}
                </a>
            </p>
        {% endif %}

        {% if({{ fr }}.phone != null) %}
            <p>
                <span class="label">Phone: </span>
        {{ {{ fr }}.phone }}
            </p>
        {% endif %}
{% endmacro %}

必要に応じて、各テンプレートで fr.email、fr.phone、fr.* ... を使用できるので、継承が機能する可能性がありますか?

だから私の質問は: コード マクロのこの部分を作成する方法はありますか? はいの場合、それはより良くなるか、継承はより良くなりますか?

4

2 に答える 2

4

あなたの状況では、マクロを使用するのではなく、 with オプションを使用して小枝ファイルを含めるだけです。たとえば、次のことができます。

{% include 'AcmeDemoBundle:Demo:showFriend.html.twig' with {'fr': friend} %}

showFriend.html.twig は次のようになります。

   {% if(fr.email != null) %}
        <p>
            <span class ="label">Email Address: </span> 
            <a  class="email" href="{{ path('friend_email', {'id': fr.id}) }}">
                {{ fr.email }}
            </a>
        </p>
    {% endif %}

    {% if(fr.phone != null) %}
        <p>
            <span class="label">Phone: </span>
    {{ fr.phone }}
        </p>
    {% endif %}
于 2012-09-14T13:42:42.540 に答える
1

マクロ内では、そのまま使用fr.varできます

{% if({{ fr }}.email != null) %}

となります

{% if fr.email %}

ご覧のとおり、指定する!= null必要はありません(動作するかどうかさえ疑問ですが、おそらく動作するはずですfr.email not is null

于 2012-09-14T13:34:55.400 に答える