1

星評価のようなものを生成する必要があり、スタイリングなどのhtmlを生成する必要があります。

        <div class="star on"><i>*</i></div>
        <div class="star on"><i>*</i></div>
        <div class="star on"><i>*</i></div>
        <div class="star"><i></i></div>
        <div class="star"><i></i></div>

アクティブな星のパラメータを渡す小枝関数を使用してレンダリングしたいと思います。

{{ stars(4) }}

HTMLコードを生成するためにtwig関数を正しく使用していますか?または、{%include ...%}を使用する必要があります

4

2 に答える 2

3

このような単純なタスクを過剰に設計する必要はありません。

Controllerで配列を生成すると、次のようになります。

$stars = array(
    true,
    true,
    true,
    false,
    false,
);

次に、TwigでHTMLをレンダリングできます。

{% for star in stars %}
    <div class="star{{ star ? ' on' }}"<i>{{ star ? '*' }}</i></div>
{% endfor %}

Twigのみで操作したい場合は、マクロを使用することをお勧めします。

{% macro stars(stars, total) %}
    {% for item in 1..total %}
        {{ item }}<br>
        {% if item <= stars %}
            <div class="star on"><i>*</i></div>
        {% else %}
            <div class="star"><i></i></div>
        {% endif %}
    {% endfor %}
{% endmacro %}

同じテンプレートでマクロを定義した_self場合は、関数のように別のファイルでマクロを呼び出す必要がありますがimport、ファイルを必要な小枝に入れることを忘れないでください。マクロに関する章(上記のリンク)を参照してください。

次の呼び出しは、質問で説明したHTML構造を生成します。

{{ _self.stars(3,5) }}
于 2012-09-01T14:25:00.250 に答える
2

ドキュメントの「 Twigの拡張」セクションを参照してください。そのページの最初のセクションの表によると、コンテンツ生成に関数を使用するのは自然なことです。私はたくさんのTwig関数を作成していますが、問題を解決するために1つ作成することをお勧めします。

ところで、関数はHTMLコードを使用して別のテンプレートをレンダリングできます。Twig関数のPHPコードでHTMLコードを直接生成しないでください。Twig関数とは別のテンプレートをレンダリングするには、そのテンプレートにサービスを挿入し、service_containerサービスを取得して、そのテンプレートでメソッドtemplatingを呼び出します。render()

return $this->container->get('templating')->render($pathToYourCustomTemplate);

通常、必要なサービスを個別に注入するのが最善ですが、のtemplating代わりにサービスを注入するservice_containerと、循環依存の問題が発生します。そのため、コンテナ全体をTwig拡張機能に注入することは合理的な例外です。

于 2012-09-01T20:01:38.413 に答える