|
|
(8 revisiones intermedias por el mismo usuario no mostrado) |
Línea 1: |
Línea 1: |
− | <div id=parrafo>
| + | {{TEP}} |
− | __NOTOC__
| + | |
− | {{PHP/MVC}} | + | |
− | ==Qué es un gestor de plantillas==
| + | |
− | *El gestor de plantillas o mejor llamado motor de plantillas es una versión más simplificada de separar la lógica de presentación de la lógica de negocio.
| + | |
− | *El motor de plantillas es una aplicación que genera una página web a partir de dos fuentes:
| + | |
− | #Un fichero con la información de presentación o plantilla que sería como la vista
| + | |
− | #otro fichero con la lógica interne de la aplicación que sería el modelo
| + | |
− | *En este caso no existiría controlador lo que simplificaría el escenario.
| + | |
− | *Busca separar el trabajo del diseño o generador de plantillas, con el trabajo del programador de la aplicación, aunque lógicamente tienen puntos de unión.
| + | |
− | *Entre los gestores de plantillas más pontentes y usados podemos encontrar smarty y twig
| + | |
− | * Smarty http://www.smarty.net/download
| + | |
− | * Twig http://twig.sensiolabs.org/
| + | |
− | *Por la pontencia y sencillez de uso vamos a estudiar smarty.
| + | |
− | ==Smarty como gestor de plantillas==
| + | |
− | *Es un código abierto basado en la licencia LGPL
| + | |
− | *En la documentación en castellano podemos encontrar una explicación completa de esta aplicación
| + | |
− | *Nosotros no vamos a profundizar en su estudio, simplemente vamos a aprender a manejarla
| + | |
− | *El propósito de ver smarty es doble
| + | |
− | #aprender a usar la herramientas
| + | |
− | #aprender a programar separando la lógica de la presentación
| + | |
− | *Profundizaremos más este segundo aspecto al estudiar '''''Laravel'''''
| + | |
− | *entre otras carácterísticas podemos comentar
| + | |
− | #Permite la inclusión en las plantillas de una lógica de presentación compleja.
| + | |
− | #Acelera la generación de la página web resultante. Uno de los problemas de los motores de plantillas es que su utilización influye negativamente en el rendimiento. Smarty convierte internamente las plantillas a guiones PHP equivalentes, y posibilita el almacenamiento del resultado obtenido en memoria temporal.
| + | |
− | #Al ser usado por una amplia comunidad de desarrolladores, existen multitud de ejemplos y foros para la resolución de los problemas que te vayas encontrando al utilizarlo.
| + | |
| | | |
− | ==Instalando Smarty==
| + | __NOEDITSECTION__ |
− | *Nos descargamos los ficheros de la web
| + | {{:Usuario:ManuelRomero/dwes/B2T9/Smarty/nav}} |
− | http://www.smarty.net/download
| + | {|cellpadding="5" cellspacing="6" style="width:100%;background:#DFFFFF; border-style:solid; border-width:2px; border-color:#0066FF;" |
− | *Lo copiamos en nuestra máquina
| + | | width="100%" valign="top" style="padding: 0; margin:0px;" | |
− | *De estos ficheros, para funcionar lo que necesitamos es lo que está en el directorio libs
| + | {|cellpadding="5" cellspacing="6" style="width:100%;background:#DFFFFF; border-style:solid; border-width:1px; border-color:#0066FF;" |
− | *Lo copiamos en /usr/local/share/smarty (previamente creamos la carpeta).
| + | | width="100%" valign="top" style="padding: 0; margin:0px;" | |
− | *Modificamos el fichero php.ini añadiendo esta ruta
| + | <span style="background:#FFFF99"> |
− | <source lang=bash>
| + | </span> |
− | include_path=".:/usr/local/share/php:/usr/share/pear:/usr/local/share/smarty/libs"
| + | [[Imagen:dwes_Titulo_B1T9.png|center|500px]] |
− | </source> | + | |} |
− | {{Definicion|'''''include_path''''' es una lista de directorios donde Apache (mejor dicho el módulo de apache que se encarga de ejecutar php), al ejecutar código php va a ir a buscar ficheros que necesite para ejecutar ese código}}
| + | |} |
− | {{Nota|Observa que el caracter dos puntos ''''':''''' es el caracter para separar los directorios en la lista de directorios}}
| + | |
− | {{Nota|Observa que el primer directorio en esa lista es el directorio actual identificado con el carácter punto '''''.'''''}}
| + | |
| | | |
− | *Con esto ya tenemos la aplicación motor de plantillas lista para usarese
| + | {{MRM_Objetivos|Title=Qué veremos aquí| |
− | *Ahora vamos a ver como utilizarla
| + | ;Vamos a profesionalizar nuestros desarrollos, separando la lógica (programación-php) de la vista (html) |
− | *Para cada aplicación crearemos una estructura de directorios, fuera de los ficheros que entregamos a los clientes
| + | *Venimos insistiendo desde el principio en ello. |
− | *Se recomienda ponerlos fuera ya que estos ficheros nunca son accedidos directamente por el servidor web, sino por los ficheros ubicados en '''''libs''''' de '''smarty''' | + | *Ahora lo vamos a hacer utilizando tecnologías concretas. |
− | *Por ejemplo creamos en raiz '''''/web/smarty/dir_por_aplicacion''''' | + | }} |
− | *En cada directorio hay que crear una estructura con cuatro carpetas
| + | {{MRM_Objetivos|Title=Puntos importantes| |
− | #templates
| + | ;Estudiamos una librería de php llamada Smarty. |
− | #templates_c
| + | *No es un lenguaje de programación ni una tecnología nueva. |
− | #configs
| + | *Es una herramienta que presenta sus propias instrucciones y forma de insertarlas embebidas dentro de la página html |
− | #cache
| + | *Esta herramienta permite poner en común valores entre la lógica (programacion-php)y la presentación (html). |
− | *Una vez creados estos ficheros, el usuario de apache y el del editor de texto que tengamos deben de tener permisos de escritura sobre estos ficheros
| + | *Hay muchos gestores de plantillas, no es ni el mejor, ni el pero, es uno de ellos. |
− | *Deberíamos de dejar permisos 770 para estas carpetas.
| + | }} |
− | *Esto para los usuarios propietarios del servicio Apache (ver https.conf o el fichero de configuración correspondiente de apache y el fichero de configuración de netbeans. | + | {{MRM_Web|Title=Referencias| |
− | *Una solución salomónica y parcial es dejar un 777 en desarrollo y luego cambiarlo (nada recomendada, pero muy cómoda).
| + | ;La web no está muy actualizada, pero sí sus contendios |
− | | + | *Actualmente la versión 3.1.34 actualizada |
− | ==Usando smarty==
| + | https://github.com/smarty-php/smarty/releases/tag/v3.1.34 |
− | ==Smarty en la lógica del negocio==
| + | *La web |
− | *En el fichero donde vamos a especificar la lógica del programa tenemos que indicar que vamos a usar una vista a través de plantillas
| + | https://www.smarty.net/ |
− | *Para ello realizamos los includes correspondientes.
| + | }} |
− | *Suponemos que tenemos una aplicacion llamada '''''app1''''' | + | }} |
− | *Y que los ficheros de la plantilla de esa aplicación están en '''''/web/smarty'''''
| + | |
− | <source lang=php>
| + | |
− | <?php
| + | |
− | //.....
| + | |
− | require_once('Smarty.class.php');
| + | |
− | $smarty = new Smarty;
| + | |
− | $smarty->template_dir = '/web/smarty/app1/templates/';
| + | |
− | $smarty->compile_dir = '/web/smarty/app1/templates_c/';
| + | |
− | $smarty->config_dir = '/web/smarty/app1/configs/';
| + | |
− | $smarty->cache_dir = '/web/smarty/app1/cache/';
| + | |
− | //...
| + | |
− | ?>
| + | |
− | </source>
| + | |
− | *Si en un momento dado queremos enviar un determinado valor y dejarlo disponible para la plantilla | + | |
− | *Para ello usaremos el método '''''assign(...)'''''
| + | |
− | <source lang=php>
| + | |
− | ....
| + | |
− | $smarty->assign('usuario', $_SESSION['usuario']);
| + | |
− | ...
| + | |
− | ?>
| + | |
− | </source>
| + | |
− | *Para visualizar la plantilla completa donde se cargarán los valores que hemos asignado previamente
| + | |
− | *Para ello usaremos el método display(...)
| + | |
− | <source lang=php>
| + | |
− | //...
| + | |
− | $smarty->display('cesta.tpl');
| + | |
− | //...
| + | |
− | </source>
| + | |
− | | + | |
− | | + | |
− | ==smarty en las plantillas==
| + | |
− | *Ahora vamos a generar la plantilla
| + | |
− | *La plantilla es la página que el cliente va a visualizar
| + | |
− | *En ella podemos escribir lo mismo que en una página html normal
| + | |
− | *Pero además podremos incluir los valores que la lógica del negocio haya generado
| + | |
− | *Para este cometido, deberemos usar delimitadores propios de Smarty que son llaves '''''{}'''''
| + | |
− | *Vamos a ver una serie de elementos que podemos incluir
| + | |
− | #'''''Comentarios'''''. Van encerrados entre asteriscos.
| + | |
− | <source lang=php>
| + | |
− | {* Este es un comentario de plantilla en Smarty *} | + | |
− | </source>
| + | |
− | #'''''Variables'''''.
| + | |
− | :Se incluye simplemente su nombre, precedido por el símbolo '''''$'''''.
| + | |
− | :También se pueden especificar modificadores, separándolos de la variable por una barra vertical.
| + | |
− | <source lang=php>
| + | |
− | {$producto->codigo}
| + | |
− | </source>
| + | |
− | #'''''Estructura de procesamiento condicional: if, elseif, else. '''''
| + | |
− | :Permite usar condiciones, de forma similar a PHP, para decidir si se procesa o no cierto contenido. | + | |
− | <source lang=php>
| + | |
− | //En el ejemplo de la cesta | + | |
− | {if empty($productoscesta)}
| + | |
− | <p>Cesta vacía</p>
| + | |
− | {else}
| + | |
− | …
| + | |
− | {/if}
| + | |
− | </source>
| + | |
− | #'''''Bucles: foreach'''''.
| + | |
− | :Son muy útiles para mostrar varios elementos, por ejemplo en una tabla.
| + | |
− | :Deberás indicar al menos con from el array en el que están los elementos, y con item la variable a la que se le irán asignado los elementos en cada iteración. (En esto cambia un poco la sintaxis de php | + | |
− | <source lang=php>
| + | |
− | {foreach from=$productoscesta item=producto}
| + | |
− | <p>{$producto->codigo}</p>
| + | |
− | {/foreach}
| + | |
− | </source>
| + | |
− | #'''''Inclusión de otras plantillas'''''.
| + | |
− | :Smarty permite descomponer una plantilla compleja en trozos más pequeños
| + | |
− | :Así las almacenaremos en otras plantillas, que se incluirán en la actual utilizando la sentencia '''''include'''''.
| + | |
− | <source lang=php>
| + | |
− | <div id="cesta">
| + | |
− | {include file="productoscesta.tpl"}
| + | |
− | </div>
| + | |
− | <div id="productos">
| + | |
− | {include file="listaproductos.tpl"}
| + | |
− | </div>
| + | |
− | </source>
| + | |
− | </div>
| + | |