2011-08-05 11 views
25

Estamos construyendo un nuevo sitio usando Symfony2, y Assetic parece muy prometedor para la administración de recursos, en particular para combinar y procesar todos los archivos js/css de forma automática.Combinación de recursos activos entre plantillas heredadas

Tendremos algunos recursos que se utilizan en todo el sitio, y algunos que son específicos de páginas particulares. También utilizaremos un enfoque heredado de tres niveles para las plantillas.

¿Hay alguna manera de combinar los dos conceptos, es decir, agregar automáticamente recursos adicionales en plantillas heredadas para que todos salgan como un único recurso?

Respuesta

17

Por desgracia, no se puede :(

no se pueden sustituir las etiquetas Assetic para añadir más activos Sin embargo, puede hacer lo siguiente:.

{% block stylesheets %} 
    {% stylesheets 'your_assets_here' %} 
     <link rel="stylesheet" href="{{ asset_url }}" /> 
    {% endstylesheets %} 
{% endblock %} 

Entonces, cuando extiende la plantilla :

{% block stylesheets %} 
    {% stylesheets 'your_old_assets_here' 'your_new_assets_here' %} 
     <link rel="stylesheet" href="{{ asset_url }}" /> 
    {% endstylesheets %} 
{% endblock %} 

En el bloque anulado, puede utilizar parent() para incluir el bloque padre, pero que tendría 2 enlaces a continuación: no se puede combinar la vieja etiqueta con Assetic el nuevo.

Sin embargo, podría crear una macro de rama que generaría la etiqueta {% stylesheets%} assetic con sus activos anteriores, y como entrada contendría nuevas ubicaciones de activos.

Más información here.

+0

Drat, I sospechaba tanto. Gracias por el puntero a ramita macros. –

+0

¿No funciona primero Assetic? –

+0

Creo que este es un comportamiento correcto: la combinación de activos que tienen que estar en una sola página/ruta no es inteligente, creo. Este es exactamente el comportamiento que deseo. Entonces, gracias por la solución sobre cómo insertar archivos solo para una sola ruta. :) – Aerendir

23

En realidad se puede hacer lo siguiente:

En base.html.twig (o lo que su diseño es)

{% block stylesheets %} 
    {% stylesheets 'your_assets_here' %} 
     <link rel="stylesheet" href="{{ asset_url }}" /> 
    {% endstylesheets %} 
{% endblock %} 

Y en cualquier plantilla que se extiende ese diseño:

{% block stylesheets %} 
    {{ parent() }} 
    {% stylesheets 'additional_assets_here' %} 
     <link rel="stylesheet" href="{{ asset_url }}" /> 
    {% endstylesheets %} 
{% endblock %} 

Entonces no necesitaría volver a escribir todos los activos antiguos según lo sugerido por Nemanja Niljkovic

+0

Sí, pero (cite la respuesta de Nemana Niljkovic): "pero tendría 2 enlaces, ya que no puede combinar la antigua etiqueta de propiedad con la nueva" –

+28

No tiene mucho sentido combinar los nuevos archivos el conjunto de hojas de estilo/guiones del padre, porque eso sería un fracaso para el almacenamiento en caché, ya que puede tener muchas páginas con su propio conjunto de archivos adicionales ... combinarlos significaría un nuevo conjunto de archivos combinados para * cada página * ! Di adiós a la memoria caché del navegador. Por lo tanto, en realidad es mejor tener un conjunto separado de archivos combinados para páginas con archivos adicionales propios de nivel, por lo que al menos el conjunto más genérico de hojas de estilo/scripts siempre se almacenará en caché. – Populus

Cuestiones relacionadas