Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Plantillas
Conferencia 17
Bibliografía
{# app/Resources/views/Blog/index.html.twig #}
{% extends '::base.html.twig' %}
{% block body %}
{% for entry in blog_entries %}
<h2>{{ entry.title }}</h2>
<p>{{ entry.body }}</p>
{% endfor %}
{% endblock %}
Resultado sería:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>My cool blog posts</title>
</head>
<body>
<div id="sidebar">
<ul>
<li><a href="/">Home</a></li>
<li><a href="/blog">Blog</a></li>
</ul>
</div>
<div id="contenido">
<h2>My first post</h2>
<p>The body of the first post.</p>
<h2>Another post</h2>
<p>The body of the second post.</p>
</div>
</body>
</html>
Aspectos a tener en cuenta:
Si se utiliza {% extends %} en una plantilla, esta debe ser la primer
etiqueta en esa plantilla;
Mientras más etiquetas {% block %} se tengan en la plantilla base
más flexible será el diseño.
Las plantillas hijas no tienen que definir todos los bloques de los
padres, por lo tanto se deben crear tantos bloques en las
plantillas base como se desee.
Si se desea añadir algo al contenido de un bloque padre en vez
de reemplazarlo por completo desde una plantilla hija, se puede
usar la función {{ parent() }}:
{% block sidebar %}
<h3>Table of Contents</h3>
{# ... #}
{{ parent() }}
{% endblock %}
Aspectos a tener en cuenta:
Si se encuentra contenido duplicando en una serie de
plantillas, se debe mover el contenido a un {% block %} en
una plantilla padre. En algunos casos, una mejor solución
podría ser mover el contenido a una nueva plantilla e incluirla
con include
{# {# app/Resources/views/article/list.html.twig #}
app/Resources/views/article/art {% extends 'layout.html.twig' %}
icle_details.html.twig #} {% block body %}
<h2>{{ article.title }}</h2> <h1>Recent Articles<h1>
<h3 class="byline">by {% for article in articles %}
{{ article.authorName }} {{ include('article/article_details.html.twig', {
</h3> 'article': article }) }}
<p> {% endfor %}
{{ article.body }} {% endblock %}
</p>
Integrando controladores
Para incluir el controlador se utililizará la sintaxis de cadena
estándar para controladores (paquete:controlador:acción):
{# app/Resources/views/base.html.twig #}
{# ... #}
<div id="sidebar">
{{ render(controller ('AppBundle:Article:recentArticles',
{ 'max': 3 } ) )
}}
</div>
Incluyendo hojas de estilo y JavaScript
{# ... #}
{% block stylesheets %}
<link href="{{ asset('css/main.css') }}"
rel="stylesheet" />
{% endblock %}
</head>
<body>
{# ... #}
{% block javascripts %}
<script src="{{ asset('js/main.js') }}"></script>
{% endblock %}
</body>
</html>
Ejemplo (clase hija)
Si se necesita incluir una hoja de estilo extra o archivos
Javascript desde una plantilla hija se deben representar
estos bloques con los nuevos ficheros.
{# app/Resources/views/contact/contact.html.twig #}
{% extends 'base.html.twig' %}
{% block stylesheets %}
{{ parent() }}
<link href="{{ asset('css/contact.css') }}" rel="stylesheet" />
{% endblock %}
{# ... #}
PROGRAMACIÓN WEB
Tema III: Framework Symfony3
Plantillas
Conferencia 17