SlideShare una empresa de Scribd logo
Twig en Symfony 2.1
     Para programadores y diseñadores
¿Qué es Twig?
 Twig is a modern template engine for PHP (definición de
  la web de twig)

 Rápido (compila los templates en código php
  optimizado)

 Seguro (tiene un modulo de sandbox para evaluar código
  no verificado)

 Flexible (permite al desarrollador definir sus própios
  custom tags)
¿Por qué otro motor de templates?
 PHP es el mismo un motor de templates (muy largo de
  escribir)



 Me explico:
 <?php echo htmlspecialchars($var, ENT_QUOTES, 'UTF-8') ?>

 {{ var|e }}
Sintaxis orientada a Templates
 Hay muchos accesos directos (Shortcuts) para realizar
  las acciones mas comunes.

 Un ejemplo (cuando iteramos sobre un array vacio):
      {% for user in users %}
        * {{ user.name }}
      {% else %}
        No user have been found.
      {% endfor %}
Todas las funciones
 Con twig tenemos todas las opciones posibles a la hora
  de crear templates, tenemos herencia multiple, bloques
  de código, escape automático y muchas otras
  funcionalidades.

  {% extends "layout.html" %}
  {% block content %}
     Content of the page...
  {% endblock %}
Mas cosas que tiene twig
 Fácil de aprender
 Extensible (Permite crear tus propios tags, filtros, etc..)
 Unit Tested (Twig está testeado completamente y
  preparado para grandes proyectos)
 Documentado
 Seguro
 Mensajes de error claros
 Rápido
¿Quien está detrás de todo?
 @fabpot
¿qué nos da twig?
Básico de twig


 {# Comentario #}

 {{ mostrar_algo }}

 {% hacer algo %}
Variables


 {{ name }} === <?php echo $name; ?>
Tags


{% if online == false %}

   <p>Our website is in maintenance mode.

   Please, come back later.</p>

{% endif %}
Filters



 {{ 'my first car'|capitalize }}
Funciones


 {{ random() }}
     (funciona como la nativa de PHP `mt_rand`)

 {{ random(5) }}
Tests
{# Se evalúa a true si la variable is null, false, o cadena
vacía #}


  {% if foo is empty %}
     ...
  {% endif %}
NOTA:
 Twig no tiene el operador ===

 Para esto usamos una función “sameas”

  {% if foo.attribute is sameas(false) %}
     the foo attribute really is the ``false`` PHP value
  {% endif %}
Embed
 Include

 Extends

 Embed
  {% embed "lateral.twig” %}
       {% block principal %}
       ...
       {% endblock %}
  {% endembed %}
Documentación interesante


 http://twig.sensiolabs.org/
   http://twig.sensiolabs.org/documentation



 http://www.symfony.es/2012/06/17/desymfony2012-
  twig-los-mejores-trucos-y-tecnicas-avanzadas/
Vale, Fin de diapositivas
  Creamos un proyecto de symfony 2.1 para hacer cositas

php composer.phar create-project symfony/framework-
standard-edition twig-formacion

Copiamos composer.phar en twig-formacion y ejecutamos:

php composer.phar install

Chmod –R 777 app/cache

Chmod –R 777 app/logs

http://local.twig-formacion.com/app_dev.php/demo/hello/
Un poquito de Symfony
 Accedemos a
   DemoBundle -> Controller -> DemoController.php

 helloAction

 Template
   Resources/views/demo/hello.html.twig


 Interesante para pasar parámetros Symfony hace un
  return de un array con las variables a pasar a la vista.
Ejercicios
1. Pasar una variable nueva desde el controller a twig y printar
   por pantalla.

2. Imprimir un array ordenado
  1.   {{ array | sort }}

3. Escapar una variable
  1.   {{ string | e(„html‟) }}

4. Escapar una cadena de texto larga
  {% filter escape('html') %}
  <script type="text/javascript">
  Var texto="<p>Loremipsumdolorsitamet</p>";
  alert(texto);
  </script>
  {%end filter %}
Random
 Presenta por pantalla un numero aleatorio

 Presenta por pantalla un numero aleatorio menor que 10

 Presenta por pantalla un carácter aleatorio de un string

 Presenta por pantalla un elemento aleatorio de un array
Fechas

 Print dia de hoy
   {{„now‟ | date(“d”)}}

 Print fecha completa dd/mm/yyyy HH:mi:ss
   {{„now‟ | date(“d/m/Y H:i:s”)}}

 Print de la fecha y la hora de ahora en Argentina
   {{'now'|date("d/m/Y H:i:s","America/Argentina/Buenos_Aires")}}

 Print la fecha de aquí a 30 días
   {{date('+30days')|date}}
Date


 Ejemplo interesante

 Si tenemos una variable fechaNacimiento como hacemos
  la comprobación si el usuario es menor de edad ?

  {% if date(fechaNacimiento) < date(„-18years‟) %}
    Eres menor de edad
  {% endif %}
Otra de date
 Queremos imprimir la fecha del proximo viernes.



El curso de formularios en SF2 será el

{{date('next Friday')|date(„d/m/Y 14:00‟)}}
Arrays
 Tenemos el siguiente array
  {% set oferta = {
      'precio':30,
      'fechaExpiracion':date('+30days')
   }%}

  Como mostramos lo siguiente:
  La oferta cuesta 30 euros (35.4 con IVA) y es válida hasta el
  19/08/2012
Varias opciones
 ~ (concatenar con el MAC alt + ñ)

 {{'La oferta cuesta‟ ~ oferta.precio ~ 'euros(‟ ~
  oferta.precio*1.18 ~‟ con IVA)y es válida hasta el‟
  ~oferta.fechaExpiracion|date()}}

 Format()

 {{'La oferta cuesta %.2f euros(%.2f con IVA)y es válida
  hasta el
  %s'|format(oferta.precio, oferta.precio*1.18,oferta.fech
  aExpiracion|date())}}
Mas opciones
 Replace()

 {{'La oferta cuesta :precio euros( :total con IVA)y es
  válida hasta el
  :fecha'|replace({':precio':oferta.precio,':total':oferta.pr
  ecio*1.18,':fecha':oferta.fechaExpiracion|date()})}}

 La chula

 {{"La oferta cuesta #{oferta.precio}
  euros(#{oferta.precio*1.18} con IVA) y es válida
  hasta el #{oferta.fechaExpiracion|date()}"}}
Listas
 Dada una lista como esta

 {% set lista=['a','b','c','d'] %}



 Queremos imprimir solo b, c, d

 Solucion:
  {% for value in lista[1:] %}
           {{value}}
        {% endfor %}
Includes
{% extends request.ajax ? "base_ajax.html" : "base.html" %}

{% block content %}

  Este es el contenido a mostrar.

{% endblock %}
Ejercicios
 Crear un template que herede de otro y que cree un
  bloque con una capa con fondo de color rojo.
   Podemos usar el layout por defecto

 El que herede que sea de color azul
Include
 Crear un template hello2.html.twig que se incluya al
  principio del bloque content.
 NOTA: no se puede añadir contenidos en templates que
  hereden de otros, fuera de los bloques.
{% include 'AcmeDemoBundle::demo/hello2.html.twig' %}


Podemos usar include con el simbolo de concatenar (~)
incluso usando filtros.
{% include var|default('index') ~ '_foo.html' %}
Muchas Gracias
 Preguntas

 @fabpot

Más contenido relacionado

La actualidad más candente

Trabajo de ejercicios de lenguaje c
Trabajo de ejercicios de lenguaje cTrabajo de ejercicios de lenguaje c
Trabajo de ejercicios de lenguaje c
oswnes92
 
Estructuras de control en bash
Estructuras de control en bashEstructuras de control en bash
Estructuras de control en bash
Ramiro Estigarribia Canese
 
Divisores de un número (código Dev C++)
Divisores de un número (código Dev C++)Divisores de un número (código Dev C++)
Divisores de un número (código Dev C++)
Jonathan Fabrizzio Argüello Valle
 
Codigoss c
Codigoss c Codigoss c
Codigoss c
Arazelii Puentez
 
Programación en c++
Programación en c++Programación en c++
Programación en c++
vic-97
 
Unidad2 programas while , do while y for
Unidad2 programas while , do while  y forUnidad2 programas while , do while  y for
Unidad2 programas while , do while y for
Miguel Angel Peña
 
Ejercicios de estructura secuencial
Ejercicios de estructura secuencialEjercicios de estructura secuencial
Ejercicios de estructura secuencialyulieth licona
 
Lenguaje C
Lenguaje CLenguaje C
Lenguaje C
fior
 
Lenguaje C
Lenguaje CLenguaje C
Lenguaje C
Norma Gamboa
 
Punteros a Funciones en C
Punteros a Funciones en CPunteros a Funciones en C
Punteros a Funciones en C
AnesGy SD
 
Ejercicios Whule y Do While
Ejercicios Whule y Do WhileEjercicios Whule y Do While
Ejercicios Whule y Do WhileJoshe Varillas
 
Ejercicios con bucles repetitivos
Ejercicios con bucles repetitivosEjercicios con bucles repetitivos
Ejercicios con bucles repetitivosJoshe Varillas
 
Estructura básica de c parte 1
Estructura básica de c parte 1Estructura básica de c parte 1
Estructura básica de c parte 1
Edison A. Sandoval O.
 
Utilidad de las funciones en c
Utilidad de las funciones en cUtilidad de las funciones en c
Utilidad de las funciones en c
José Adrián Zambrano Miranda
 

La actualidad más candente (20)

Trabajo de ejercicios de lenguaje c
Trabajo de ejercicios de lenguaje cTrabajo de ejercicios de lenguaje c
Trabajo de ejercicios de lenguaje c
 
Ejemplos de codigos c++
Ejemplos de codigos c++Ejemplos de codigos c++
Ejemplos de codigos c++
 
Estructuras de control en bash
Estructuras de control en bashEstructuras de control en bash
Estructuras de control en bash
 
07 funciones
07 funciones07 funciones
07 funciones
 
Divisores de un número (código Dev C++)
Divisores de un número (código Dev C++)Divisores de un número (código Dev C++)
Divisores de un número (código Dev C++)
 
Codigoss c
Codigoss c Codigoss c
Codigoss c
 
Programación en c++
Programación en c++Programación en c++
Programación en c++
 
Palindromos
PalindromosPalindromos
Palindromos
 
Unidad2 programas while , do while y for
Unidad2 programas while , do while  y forUnidad2 programas while , do while  y for
Unidad2 programas while , do while y for
 
Ejercicios de estructura secuencial
Ejercicios de estructura secuencialEjercicios de estructura secuencial
Ejercicios de estructura secuencial
 
Lenguaje C
Lenguaje CLenguaje C
Lenguaje C
 
Lenguaje C
Lenguaje CLenguaje C
Lenguaje C
 
Palindromos
PalindromosPalindromos
Palindromos
 
Punteros a Funciones en C
Punteros a Funciones en CPunteros a Funciones en C
Punteros a Funciones en C
 
Ejercicios Whule y Do While
Ejercicios Whule y Do WhileEjercicios Whule y Do While
Ejercicios Whule y Do While
 
AsignacióN DináMica
AsignacióN DináMicaAsignacióN DináMica
AsignacióN DináMica
 
Ejercicios con bucles repetitivos
Ejercicios con bucles repetitivosEjercicios con bucles repetitivos
Ejercicios con bucles repetitivos
 
Estructura básica de c parte 1
Estructura básica de c parte 1Estructura básica de c parte 1
Estructura básica de c parte 1
 
Algoritmos en c++
Algoritmos en c++Algoritmos en c++
Algoritmos en c++
 
Utilidad de las funciones en c
Utilidad de las funciones en cUtilidad de las funciones en c
Utilidad de las funciones en c
 

Similar a Twig

Twig avanzado (sf2Vigo)
Twig avanzado (sf2Vigo)Twig avanzado (sf2Vigo)
Twig avanzado (sf2Vigo)
Javier Eguiluz
 
Desymfony 2011 - Twig
Desymfony 2011 - TwigDesymfony 2011 - Twig
Desymfony 2011 - Twig
Javier Eguiluz
 
Twig, el nuevo motor de plantillas de Drupal 8
Twig, el nuevo motor de plantillas de Drupal 8Twig, el nuevo motor de plantillas de Drupal 8
Twig, el nuevo motor de plantillas de Drupal 8Javier Eguiluz
 
Javascript Módulo 5 - javascript sentencia, expresión, variable, función - Un...
Javascript Módulo 5 - javascript sentencia, expresión, variable, función - Un...Javascript Módulo 5 - javascript sentencia, expresión, variable, función - Un...
Javascript Módulo 5 - javascript sentencia, expresión, variable, función - Un...
David Zapateria Besteiro
 
ProgramacióN Orientada A Objetos
ProgramacióN Orientada A ObjetosProgramacióN Orientada A Objetos
ProgramacióN Orientada A Objetos
Raymond Marquina
 
Revista digital
Revista digitalRevista digital
Revista digital
maricela1987
 
Proyectos Web 3 Introduccion Php
Proyectos Web   3 Introduccion PhpProyectos Web   3 Introduccion Php
Proyectos Web 3 Introduccion Php
Jose Ponce
 
Clase lenguaje c xxxxxx
Clase lenguaje c xxxxxxClase lenguaje c xxxxxx
Clase lenguaje c xxxxxx
Mar15marian
 
Clase lenguaje c
Clase lenguaje c Clase lenguaje c
Clase lenguaje c
Mar15marian
 
Clase lenguaje c xxxxxx
Clase lenguaje c xxxxxxClase lenguaje c xxxxxx
Clase lenguaje c xxxxxx
Mar15marian
 
Funciones en C
Funciones en CFunciones en C
Funciones en C
Ronny Parra
 
FUNCIONES LENGUAJE C
FUNCIONES LENGUAJE CFUNCIONES LENGUAJE C
FUNCIONES LENGUAJE C
Gustavo Salazar Loor
 
Especialista Web J9 Php
Especialista Web J9  PhpEspecialista Web J9  Php
Especialista Web J9 Php
Moisés Cid Deza
 
Elemento 4
Elemento 4Elemento 4
Elemento 4
Ruth Naranjo
 
Diapo04
Diapo04Diapo04
ESTRUCTURAS ARRAYS Y DATOS C++
ESTRUCTURAS ARRAYS Y DATOS C++ESTRUCTURAS ARRAYS Y DATOS C++
ESTRUCTURAS ARRAYS Y DATOS C++Riki Tapia
 

Similar a Twig (20)

Twig avanzado (sf2Vigo)
Twig avanzado (sf2Vigo)Twig avanzado (sf2Vigo)
Twig avanzado (sf2Vigo)
 
Desymfony 2011 - Twig
Desymfony 2011 - TwigDesymfony 2011 - Twig
Desymfony 2011 - Twig
 
Twig, el nuevo motor de plantillas de Drupal 8
Twig, el nuevo motor de plantillas de Drupal 8Twig, el nuevo motor de plantillas de Drupal 8
Twig, el nuevo motor de plantillas de Drupal 8
 
Javascript Módulo 5 - javascript sentencia, expresión, variable, función - Un...
Javascript Módulo 5 - javascript sentencia, expresión, variable, función - Un...Javascript Módulo 5 - javascript sentencia, expresión, variable, función - Un...
Javascript Módulo 5 - javascript sentencia, expresión, variable, función - Un...
 
ProgramacióN Orientada A Objetos
ProgramacióN Orientada A ObjetosProgramacióN Orientada A Objetos
ProgramacióN Orientada A Objetos
 
Revista digital
Revista digitalRevista digital
Revista digital
 
Proyectos Web 3 Introduccion Php
Proyectos Web   3 Introduccion PhpProyectos Web   3 Introduccion Php
Proyectos Web 3 Introduccion Php
 
Escuela
EscuelaEscuela
Escuela
 
Escuela
EscuelaEscuela
Escuela
 
Clase lenguaje c xxxxxx
Clase lenguaje c xxxxxxClase lenguaje c xxxxxx
Clase lenguaje c xxxxxx
 
Clase lenguaje c
Clase lenguaje c Clase lenguaje c
Clase lenguaje c
 
Clase lenguaje c xxxxxx
Clase lenguaje c xxxxxxClase lenguaje c xxxxxx
Clase lenguaje c xxxxxx
 
Funciones en C
Funciones en CFunciones en C
Funciones en C
 
FUNCIONES LENGUAJE C
FUNCIONES LENGUAJE CFUNCIONES LENGUAJE C
FUNCIONES LENGUAJE C
 
6.funciones y recursividad en c++
6.funciones y recursividad en c++6.funciones y recursividad en c++
6.funciones y recursividad en c++
 
Clase09 java script
Clase09 java scriptClase09 java script
Clase09 java script
 
Especialista Web J9 Php
Especialista Web J9  PhpEspecialista Web J9  Php
Especialista Web J9 Php
 
Elemento 4
Elemento 4Elemento 4
Elemento 4
 
Diapo04
Diapo04Diapo04
Diapo04
 
ESTRUCTURAS ARRAYS Y DATOS C++
ESTRUCTURAS ARRAYS Y DATOS C++ESTRUCTURAS ARRAYS Y DATOS C++
ESTRUCTURAS ARRAYS Y DATOS C++
 

Último

SISTESIS RETO4 Grupo4 co-creadores .ppsx
SISTESIS RETO4 Grupo4 co-creadores .ppsxSISTESIS RETO4 Grupo4 co-creadores .ppsx
SISTESIS RETO4 Grupo4 co-creadores .ppsx
tamarita881
 
Actividad Conceptos básicos de programación.pdf
Actividad Conceptos básicos de programación.pdfActividad Conceptos básicos de programación.pdf
Actividad Conceptos básicos de programación.pdf
NajwaNimri1
 
Conceptos Básicos de Programación. Tecnología
Conceptos Básicos de Programación. TecnologíaConceptos Básicos de Programación. Tecnología
Conceptos Básicos de Programación. Tecnología
coloradxmaria
 
actividad 2 tecnologia (3).pdf junto con mis compañeros
actividad 2 tecnologia (3).pdf junto con mis compañerosactividad 2 tecnologia (3).pdf junto con mis compañeros
actividad 2 tecnologia (3).pdf junto con mis compañeros
aljitagallego
 
Catalogo general Ariston Amado Salvador distribuidor oficial Valencia
Catalogo general Ariston Amado Salvador distribuidor oficial ValenciaCatalogo general Ariston Amado Salvador distribuidor oficial Valencia
Catalogo general Ariston Amado Salvador distribuidor oficial Valencia
AMADO SALVADOR
 
Catalogo Cajas Fuertes BTV Amado Salvador Distribuidor Oficial
Catalogo Cajas Fuertes BTV Amado Salvador Distribuidor OficialCatalogo Cajas Fuertes BTV Amado Salvador Distribuidor Oficial
Catalogo Cajas Fuertes BTV Amado Salvador Distribuidor Oficial
AMADO SALVADOR
 
Conceptos básicos de programación 10-5.pdf
Conceptos básicos de programación 10-5.pdfConceptos básicos de programación 10-5.pdf
Conceptos básicos de programación 10-5.pdf
ValeriaAyala48
 
TRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
TRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdfTRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
TRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
thomasdcroz38
 
Computacion cuántica y sus ventajas y desventajas
Computacion cuántica y sus ventajas y desventajasComputacion cuántica y sus ventajas y desventajas
Computacion cuántica y sus ventajas y desventajas
sofiahuarancabellido
 
herramientas de sitio web 3.0 2024
herramientas de sitio web 3.0  2024herramientas de sitio web 3.0  2024
herramientas de sitio web 3.0 2024
julio05042006
 
DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdfDESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
sarasofiamontezuma
 
Informació Projecte Iniciativa TIC SOPRA STERIA.pdf
Informació Projecte Iniciativa TIC SOPRA STERIA.pdfInformació Projecte Iniciativa TIC SOPRA STERIA.pdf
Informació Projecte Iniciativa TIC SOPRA STERIA.pdf
Festibity
 
IA en entornos rurales aplicada a la viticultura
IA en entornos rurales aplicada a la viticulturaIA en entornos rurales aplicada a la viticultura
IA en entornos rurales aplicada a la viticultura
Miguel Rebollo
 
Projecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdf
Projecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdfProjecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdf
Projecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdf
Festibity
 
Estructuras básicas_ conceptos de programación (1).docx
Estructuras básicas_ conceptos de programación  (1).docxEstructuras básicas_ conceptos de programación  (1).docx
Estructuras básicas_ conceptos de programación (1).docx
SamuelRamirez83524
 
HERRAMIENTAS WEB--------------------.pptx
HERRAMIENTAS WEB--------------------.pptxHERRAMIENTAS WEB--------------------.pptx
HERRAMIENTAS WEB--------------------.pptx
maralache30
 
absorcion de gases y practicas de laboratorios
absorcion de gases y practicas de laboratoriosabsorcion de gases y practicas de laboratorios
absorcion de gases y practicas de laboratorios
JuanAlvarez413513
 
Conceptos Básicos de Programación L.D 10-5
Conceptos Básicos de Programación L.D 10-5Conceptos Básicos de Programación L.D 10-5
Conceptos Básicos de Programación L.D 10-5
JulyMuoz18
 
trabajo de tecnologia, segundo periodo 9-6f
trabajo de tecnologia, segundo periodo 9-6ftrabajo de tecnologia, segundo periodo 9-6f
trabajo de tecnologia, segundo periodo 9-6f
zoecaicedosalazar
 
Todo sobre Minirobotica. Revista Saber Electronica
Todo sobre  Minirobotica. Revista Saber ElectronicaTodo sobre  Minirobotica. Revista Saber Electronica
Todo sobre Minirobotica. Revista Saber Electronica
Carlos Carlosnoemi
 

Último (20)

SISTESIS RETO4 Grupo4 co-creadores .ppsx
SISTESIS RETO4 Grupo4 co-creadores .ppsxSISTESIS RETO4 Grupo4 co-creadores .ppsx
SISTESIS RETO4 Grupo4 co-creadores .ppsx
 
Actividad Conceptos básicos de programación.pdf
Actividad Conceptos básicos de programación.pdfActividad Conceptos básicos de programación.pdf
Actividad Conceptos básicos de programación.pdf
 
Conceptos Básicos de Programación. Tecnología
Conceptos Básicos de Programación. TecnologíaConceptos Básicos de Programación. Tecnología
Conceptos Básicos de Programación. Tecnología
 
actividad 2 tecnologia (3).pdf junto con mis compañeros
actividad 2 tecnologia (3).pdf junto con mis compañerosactividad 2 tecnologia (3).pdf junto con mis compañeros
actividad 2 tecnologia (3).pdf junto con mis compañeros
 
Catalogo general Ariston Amado Salvador distribuidor oficial Valencia
Catalogo general Ariston Amado Salvador distribuidor oficial ValenciaCatalogo general Ariston Amado Salvador distribuidor oficial Valencia
Catalogo general Ariston Amado Salvador distribuidor oficial Valencia
 
Catalogo Cajas Fuertes BTV Amado Salvador Distribuidor Oficial
Catalogo Cajas Fuertes BTV Amado Salvador Distribuidor OficialCatalogo Cajas Fuertes BTV Amado Salvador Distribuidor Oficial
Catalogo Cajas Fuertes BTV Amado Salvador Distribuidor Oficial
 
Conceptos básicos de programación 10-5.pdf
Conceptos básicos de programación 10-5.pdfConceptos básicos de programación 10-5.pdf
Conceptos básicos de programación 10-5.pdf
 
TRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
TRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdfTRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
TRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
 
Computacion cuántica y sus ventajas y desventajas
Computacion cuántica y sus ventajas y desventajasComputacion cuántica y sus ventajas y desventajas
Computacion cuántica y sus ventajas y desventajas
 
herramientas de sitio web 3.0 2024
herramientas de sitio web 3.0  2024herramientas de sitio web 3.0  2024
herramientas de sitio web 3.0 2024
 
DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdfDESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
 
Informació Projecte Iniciativa TIC SOPRA STERIA.pdf
Informació Projecte Iniciativa TIC SOPRA STERIA.pdfInformació Projecte Iniciativa TIC SOPRA STERIA.pdf
Informació Projecte Iniciativa TIC SOPRA STERIA.pdf
 
IA en entornos rurales aplicada a la viticultura
IA en entornos rurales aplicada a la viticulturaIA en entornos rurales aplicada a la viticultura
IA en entornos rurales aplicada a la viticultura
 
Projecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdf
Projecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdfProjecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdf
Projecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdf
 
Estructuras básicas_ conceptos de programación (1).docx
Estructuras básicas_ conceptos de programación  (1).docxEstructuras básicas_ conceptos de programación  (1).docx
Estructuras básicas_ conceptos de programación (1).docx
 
HERRAMIENTAS WEB--------------------.pptx
HERRAMIENTAS WEB--------------------.pptxHERRAMIENTAS WEB--------------------.pptx
HERRAMIENTAS WEB--------------------.pptx
 
absorcion de gases y practicas de laboratorios
absorcion de gases y practicas de laboratoriosabsorcion de gases y practicas de laboratorios
absorcion de gases y practicas de laboratorios
 
Conceptos Básicos de Programación L.D 10-5
Conceptos Básicos de Programación L.D 10-5Conceptos Básicos de Programación L.D 10-5
Conceptos Básicos de Programación L.D 10-5
 
trabajo de tecnologia, segundo periodo 9-6f
trabajo de tecnologia, segundo periodo 9-6ftrabajo de tecnologia, segundo periodo 9-6f
trabajo de tecnologia, segundo periodo 9-6f
 
Todo sobre Minirobotica. Revista Saber Electronica
Todo sobre  Minirobotica. Revista Saber ElectronicaTodo sobre  Minirobotica. Revista Saber Electronica
Todo sobre Minirobotica. Revista Saber Electronica
 

Twig

  • 1. Twig en Symfony 2.1 Para programadores y diseñadores
  • 2. ¿Qué es Twig?  Twig is a modern template engine for PHP (definición de la web de twig)  Rápido (compila los templates en código php optimizado)  Seguro (tiene un modulo de sandbox para evaluar código no verificado)  Flexible (permite al desarrollador definir sus própios custom tags)
  • 3. ¿Por qué otro motor de templates?  PHP es el mismo un motor de templates (muy largo de escribir)  Me explico:  <?php echo htmlspecialchars($var, ENT_QUOTES, 'UTF-8') ?>  {{ var|e }}
  • 4. Sintaxis orientada a Templates  Hay muchos accesos directos (Shortcuts) para realizar las acciones mas comunes.  Un ejemplo (cuando iteramos sobre un array vacio): {% for user in users %} * {{ user.name }} {% else %} No user have been found. {% endfor %}
  • 5. Todas las funciones  Con twig tenemos todas las opciones posibles a la hora de crear templates, tenemos herencia multiple, bloques de código, escape automático y muchas otras funcionalidades. {% extends "layout.html" %} {% block content %} Content of the page... {% endblock %}
  • 6. Mas cosas que tiene twig  Fácil de aprender  Extensible (Permite crear tus propios tags, filtros, etc..)  Unit Tested (Twig está testeado completamente y preparado para grandes proyectos)  Documentado  Seguro  Mensajes de error claros  Rápido
  • 7. ¿Quien está detrás de todo?  @fabpot
  • 9. Básico de twig  {# Comentario #}  {{ mostrar_algo }}  {% hacer algo %}
  • 10. Variables  {{ name }} === <?php echo $name; ?>
  • 11. Tags {% if online == false %} <p>Our website is in maintenance mode. Please, come back later.</p> {% endif %}
  • 12. Filters  {{ 'my first car'|capitalize }}
  • 13. Funciones  {{ random() }}  (funciona como la nativa de PHP `mt_rand`)  {{ random(5) }}
  • 14. Tests {# Se evalúa a true si la variable is null, false, o cadena vacía #} {% if foo is empty %} ... {% endif %}
  • 15. NOTA:  Twig no tiene el operador ===  Para esto usamos una función “sameas” {% if foo.attribute is sameas(false) %} the foo attribute really is the ``false`` PHP value {% endif %}
  • 16. Embed  Include  Extends  Embed {% embed "lateral.twig” %} {% block principal %} ... {% endblock %} {% endembed %}
  • 17. Documentación interesante  http://twig.sensiolabs.org/  http://twig.sensiolabs.org/documentation  http://www.symfony.es/2012/06/17/desymfony2012- twig-los-mejores-trucos-y-tecnicas-avanzadas/
  • 18. Vale, Fin de diapositivas Creamos un proyecto de symfony 2.1 para hacer cositas php composer.phar create-project symfony/framework- standard-edition twig-formacion Copiamos composer.phar en twig-formacion y ejecutamos: php composer.phar install Chmod –R 777 app/cache Chmod –R 777 app/logs http://local.twig-formacion.com/app_dev.php/demo/hello/
  • 19. Un poquito de Symfony  Accedemos a  DemoBundle -> Controller -> DemoController.php  helloAction  Template  Resources/views/demo/hello.html.twig  Interesante para pasar parámetros Symfony hace un return de un array con las variables a pasar a la vista.
  • 20. Ejercicios 1. Pasar una variable nueva desde el controller a twig y printar por pantalla. 2. Imprimir un array ordenado 1. {{ array | sort }} 3. Escapar una variable 1. {{ string | e(„html‟) }} 4. Escapar una cadena de texto larga {% filter escape('html') %} <script type="text/javascript"> Var texto="<p>Loremipsumdolorsitamet</p>"; alert(texto); </script> {%end filter %}
  • 21. Random  Presenta por pantalla un numero aleatorio  Presenta por pantalla un numero aleatorio menor que 10  Presenta por pantalla un carácter aleatorio de un string  Presenta por pantalla un elemento aleatorio de un array
  • 22. Fechas  Print dia de hoy  {{„now‟ | date(“d”)}}  Print fecha completa dd/mm/yyyy HH:mi:ss  {{„now‟ | date(“d/m/Y H:i:s”)}}  Print de la fecha y la hora de ahora en Argentina  {{'now'|date("d/m/Y H:i:s","America/Argentina/Buenos_Aires")}}  Print la fecha de aquí a 30 días  {{date('+30days')|date}}
  • 23. Date  Ejemplo interesante  Si tenemos una variable fechaNacimiento como hacemos la comprobación si el usuario es menor de edad ? {% if date(fechaNacimiento) < date(„-18years‟) %} Eres menor de edad {% endif %}
  • 24. Otra de date  Queremos imprimir la fecha del proximo viernes. El curso de formularios en SF2 será el {{date('next Friday')|date(„d/m/Y 14:00‟)}}
  • 25. Arrays  Tenemos el siguiente array {% set oferta = { 'precio':30, 'fechaExpiracion':date('+30days') }%} Como mostramos lo siguiente: La oferta cuesta 30 euros (35.4 con IVA) y es válida hasta el 19/08/2012
  • 26. Varias opciones  ~ (concatenar con el MAC alt + ñ)  {{'La oferta cuesta‟ ~ oferta.precio ~ 'euros(‟ ~ oferta.precio*1.18 ~‟ con IVA)y es válida hasta el‟ ~oferta.fechaExpiracion|date()}}  Format()  {{'La oferta cuesta %.2f euros(%.2f con IVA)y es válida hasta el %s'|format(oferta.precio, oferta.precio*1.18,oferta.fech aExpiracion|date())}}
  • 27. Mas opciones  Replace()  {{'La oferta cuesta :precio euros( :total con IVA)y es válida hasta el :fecha'|replace({':precio':oferta.precio,':total':oferta.pr ecio*1.18,':fecha':oferta.fechaExpiracion|date()})}}  La chula  {{"La oferta cuesta #{oferta.precio} euros(#{oferta.precio*1.18} con IVA) y es válida hasta el #{oferta.fechaExpiracion|date()}"}}
  • 28. Listas  Dada una lista como esta  {% set lista=['a','b','c','d'] %}  Queremos imprimir solo b, c, d  Solucion: {% for value in lista[1:] %} {{value}} {% endfor %}
  • 29. Includes {% extends request.ajax ? "base_ajax.html" : "base.html" %} {% block content %} Este es el contenido a mostrar. {% endblock %}
  • 30. Ejercicios  Crear un template que herede de otro y que cree un bloque con una capa con fondo de color rojo.  Podemos usar el layout por defecto  El que herede que sea de color azul
  • 31. Include  Crear un template hello2.html.twig que se incluya al principio del bloque content.  NOTA: no se puede añadir contenidos en templates que hereden de otros, fuera de los bloques. {% include 'AcmeDemoBundle::demo/hello2.html.twig' %} Podemos usar include con el simbolo de concatenar (~) incluso usando filtros. {% include var|default('index') ~ '_foo.html' %}