5

レイアウトを拡張せずに、HTMLコードを単独で印刷できるビューを作成し、同時にjavascriptコードを下部に送信したい

アイデアは、レイアウトがあり、現在の URL の特定のビューがそのレイアウトを拡張し、そのビュー内に、スコープ外の他のブロックにコードを追加する力を持つ他のビューを含めることです (それらはレイアウトまたはそれを継承するビューから継承しないでください)。それは可能ですか?

これが私のレイアウトの一部であるとします:

{# ::layout.html.twig #}
.
.
{% block javascripts %}
{% endblock %}
</body>
.
.

これが私の見解です:

{# Company:Bundle:about.html.twig #}
{% extends '::layout.html.twig' %}
.
.
{% include 'Company:buttons:google_button.html.twig' %}
.
.

そして、これは私が含めたいビューです。たとえば、Google +1 ボタンです。

{# Company:buttons:google_button.html.twig #}
<gb></gb> {# or whatever #}

{# somehow send '<script>blabla</script>' to the 'javascripts' block #}

小枝とsymfony2でこのようなことをすることは可能ですか?

4

3 に答える 3

2

@Crozinのコードを含むバンドルを実装したかったのですが、packagist.orgで、すでに完成したバンドルを見つけました。

資産管理バンドル

于 2013-03-04T22:00:08.713 に答える
2

add_jsと の 2 つの関数を定義する独自の Twig 拡張機能を作成する必要があると思いますprint_js

小枝拡張:

namespace Me\MyBundle\Twig\Extension;

class MyExtension extends \Twig_Extension {
    private $js = array();

    /**
     * {@inheritdoc}
     */
    public function getFunctions() {
        return array(
            'put_js' => new \Twig_Function_Method($this, 'putJs', array('is_safe' => array('html'))),
            'print_js' => new \Twig_Function_Method($this, 'printJs', array('is_safe' => array('html')))
        );
    }

    public function putJs($js) {
        $this->js[] = $js;
    }

    public function printJs() {
        return implode(PHP_EOL, $this->js);
    }

    /**
     * Returns the name of the extension.
     *
     * @return string The extension name
     */
    public function getName() {
        return 'my';
    }
}

依存性注入構成:

<service id="twig.extension.me.my" class="Me\MyBundle\Twig\Extension\MyExtension" public="false">
    <tag name="twig.extension" />
</service>

最終的な使用法:

{# ::layout.html.twig #}

   ...
   {{ print_js() }}
</body>

{# Company:buttons:google_button.html.twig #}

{% put_js('<script>...</script>') %}
于 2011-06-30T15:16:55.110 に答える
1

「使用」を使用して直面している正確な問題を実装しました: http://twig.sensiolabs.org/doc/tags/use.html

メインのベース ファイルから javascript ブロックを削除し、javascript twig ファイルに再度含める必要があるため、リファクタリングが必要になります。次に、ビュー内で、最初に次を定義することにより、javascript ブロックにアクセスできます。

{% use 'ExampleBundle::javascript.html.twig' with javascript' %}

于 2011-11-02T15:33:27.183 に答える