Este foro ya no está activo, así que no puedes publicar nuevas preguntas ni responder a las preguntas existentes.

Reutilizar código con twig

28 de marzo de 2014

Hola a tod@s,

Estoy desarrollando una web y hay código que repito en varias secciones entonces me gustaría saber si hay manera de definir solo una vez el código y después reutilizarlo.

Así podría reutilizar el código y los cambios serian mas rápidos, el código seria algo como:

<div class="box-container">
    <div class="box-image">
        ...
    </div>
    <div class="box-content">
        ...
    </div>
    <div class="box-footer">
        ...
    </div>
</div>

Podría crear una función para Twig y dentro generar el código, pero para los diseñadores no creo que sea lo mejor.

Talvez algo como "How to customize Form Rendering"

Saludos.


Respuestas

#1

@iBet7o la forma más sencilla de reutilizar trozos de código consiste en utilizar la función include() de Twig. Tan sólo tienes que indicar la ruta de la plantilla y Twig la incluirá tantas veces como la necesites:

{# incluir un simple trozo de plantilla #}
{{ include('trozo.html.twig') }}
 
{# incluir un simple trozo de plantilla pasándole una o más variables #}
{{ include('trozo.html.twig', {variable: 'valor'}) }}
 
{# incluir un simple trozo de plantilla. Si no existe, dejarlo en blanco #}
{{ include('trozo.html.twig', ignore_missing = true) }}
 
{# incluir el primer trozo que exista de una lista de trozos #}
{{ include(['trozo1.html.twig', 'trozo2.html.twig', '...']) }}

Puedes consultar la documentación de la función include() para ver todos los detalles.

Si el trozo de plantilla contiene información muy dinámica, como por ejemplo el listado de los artículos más recientes de un blog que se obtienen mediante una consulta a la base de datos, entonces debes usar la opción de embeber controladores en las plantillas.

Ten en cuenta que la función render() que te permite incluir el resultado de un controlador en una plantilla, sólo está disponible para las aplicaciones Symfony2.

@javiereguiluz

28 marzo 2014, 9:58