2012-01-07 11 views
10

Mi problema:Symfony2 Assetic + plantilla Twig JavaScript Herencia

tengo 3 plantillas:

  • main.html.twig (archivo principal de diseño)
  • layout.html.twig (una anulación de la disposición específica paquete que contiene algo de JS específica paquete etiquetas)
  • create.html.twig (un archivo de plantilla específico de página que también contiene algunas etiquetas JS específicas de la página)

Estoy definiendo un bloque llamado 'javascript' en mi diseño base (main.html.twig), y luego lo anulo (pero llamando al {{ parent() }} en layout.html.twig. Esto funciona bien, y las etiquetas JS del archivo de plantilla principal aún se incluyen por encima de las de la plantilla layout.html.twig.

luego hacer lo mismo en el archivo create.html.twig, anulando el bloque de la siguiente manera:

{% block javascripts %} 
    {{ parent() }} 
    {% javascripts '@BundleName/Resources/public/js/application.album.uploader.js' 
        '@BundleName/Resources/public/js/jquery.uploadify.js' 
        '@BundleName/Resources/public/js/swfuploadify.js' filter='?yui_js' %} 
     <script src='{{ asset_url }}' type='text/javascript'></script> 
    {% endjavascripts %} 
{% endblock %} 

En este punto, en lugar de anular el bloque de Javascript en el padre (layout.html.twig) e incluyendo todo la guiones definidos en las plantillas por encima de ella, se hace lo siguiente:

  • vuelca el <script> etiquetas en el medio de la salida (que causa un error, ya que en mi main.html.twig archivo sólo estoy incluyendo la biblioteca jQuery al final de la marcación HTML
  • Entonces también vuelca los guiones a cabo junto con el resto de los otros (como yo esperaría que)

no soy seguro de lo que está causando que los scripts se viertan en el medio de la plantilla create.html.twig, y también estoy confundido sobre por qué están siendo arrojados a la pantalla dos veces (una en el medio de la creación y otra en la parte inferior junto con con todo el resto de mis scripts de main.html.twig y layout.html.twig.

¿Alguien tiene alguna idea? Avíseme si algo no está claro o si puedo proporcionar más información.

EDIT:

Contenido del archivo están por debajo ...

main.html.twig: https://gist.github.com/7f29353eaca0947528ce

base.html.twig: https://gist.github.com/734947e9118b7765715e

create.html.twig: https://gist.github.com/c60c8d5c61e00ff86912

EDIT 2:

He estado revisando el problema esta mañana y parece que está haciendo lo mismo con las hojas de estilo.Me tratado de definir un nuevo bloque llamado pagescripts en mi layout.html.twig y luego utilizar el bloque en mi create.html.twig pero no tenía el mismo resultado, apenas se parece a volcar los scripts y hojas de estilo donde utilizo el

{% block pagescripts %} 
    (scripts here) 
{% endblock} 
+0

Cuando la etiqueta del script se descarga en el medio de la página, ¿incluye el resultado '{{parent()}}' también? –

+0

no solo las tres secuencias de comandos de mi archivo 'create.html.twig' – JamesHalsall

+0

@KrisWallsmith ¿Alguna idea de que podría probar Kris? Si es necesario, puedo publicar una versión reducida del contenido de los archivos que están teniendo el problema – JamesHalsall

Respuesta

2

Encontré el problema. En create.html.twig estaba definiendo mi contenido {% block javascripts %} dentro de mi {% block content %}, así que supongo que Twig estaba procesando el resultado del bloque javascripts dentro del bloque content.

Mover el contenido {% block javascripts %} fuera del bloque {% block content %} solucionó el problema.

0

Aquí se presenta una ejemplo de main.html.twig:

<body> 
    {% block stylesheets %} 
    {% endblock %} 

    {% block jsscript %} 
    {% endblock %} 

    {% block content %} 
    {% endblock %} 
</body> 

en su create.html.twig

{% extends '::base.html.twig' %} 

{% block jsscript %} 
    my javascript files... 
{% endblock %} 

{% block content %} 
<h1>Create</h1> 

<form action="{{ path('entity_create') }}" method="post" {{ form_enctype(form) }}> 
    {{ form_widget(form) }} 
    <p> 
     <button type="submit">Create</button> 
    </p> 
</form> 

{% endblock %} 

Si todavía tiene problema, puede agregar una función de documento listo:

$(document).ready(function() { 
    // put all your jQuery goodness in here. 
}); 
+0

lamentablemente la biblioteca jQuery se carga pero solo más adelante, por lo No deseo cargar la biblioteca dos veces ... si las etiquetas de mi script se representan en el lugar correcto, la biblioteca jquery se cargará antes de que se haga uso de ella – JamesHalsall

+0

'jsscript' ==" javascriptscript "? :) – NDM

Cuestiones relacionadas