首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将javascripts发送到底层?(在symfony 2中)

如何将javascripts发送到底层?(在symfony 2中)
EN

Stack Overflow用户
提问于 2011-06-30 20:35:43
回答 3查看 1.9K关注 0票数 5

我想创建的视图可以自己打印一些html代码,同时将javascript代码发送到底部,而不扩展布局。

我的想法是,我有一个布局,然后当前url的特定视图扩展了该布局,在该视图中,我包含了其他视图,这些视图具有向范围外的其他块添加代码的功能(因为它们不是从布局继承的,也不是从布局继承的视图)。这有可能吗?

假设这是我布局的一部分:

代码语言:javascript
复制
{# ::layout.html.twig #}
.
.
{% block javascripts %}
{% endblock %}
</body>
.
.

这是我的观点:

代码语言:javascript
复制
{# Company:Bundle:about.html.twig #}
{% extends '::layout.html.twig' %}
.
.
{% include 'Company:buttons:google_button.html.twig' %}
.
.

这是我想要包含的视图,例如,google +1按钮:

代码语言:javascript
复制
{# Company:buttons:google_button.html.twig #}
<gb></gb> {# or whatever #}

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

有没有可能用twig和symfony2做这样的事情?

EN

回答 3

Stack Overflow用户

发布于 2011-06-30 23:16:55

我猜您必须编写自己的Twig扩展,它将定义两个函数,比如add_jsprint_js

小枝扩展:

代码语言:javascript
复制
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';
    }
}

依赖注入配置:

代码语言:javascript
复制
<service id="twig.extension.me.my" class="Me\MyBundle\Twig\Extension\MyExtension" public="false">
    <tag name="twig.extension" />
</service>

最终用途:

代码语言:javascript
复制
{# ::layout.html.twig #}

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

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

{% put_js('<script>...</script>') %}
票数 2
EN

Stack Overflow用户

发布于 2013-03-05 06:00:09

我只想实现一个包含@Crozin代码的包,但在packagist.org上我发现了一个已经完成的包:

Asset Managment Bundle

票数 2
EN

Stack Overflow用户

发布于 2011-11-02 23:33:27

我刚刚使用‘Use’实现了您所面临的确切问题:http://twig.sensiolabs.org/doc/tags/use.html

需要进行一些重构,因为您需要从主基文件中删除javascript块,并将其再次包含在javascript分支文件中。然后在视图中,您可以通过首先定义以下内容来访问javascript块:

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6534822

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档