Smarty: a nivel avanzado
Smarty es una herramienta que permite crear plantillas, personalizar, adaptar y distribuir funcionabilidades complejas dentro de un marco de desarrollo limpio. Smarty cuenta con una sintáxis propia que lo hace muy atractivo de utilizar y sencillo en especial para diseñadores web.
Siguiendo con nuestra serie de artículos: Smarty: razones para utilizar plantillas en mis proyectos, Smarty: requerimientos, instalación y aprende a programar, ahora nos corresponde hablar sobre Smarty pero a nivel avanzado. Smarty cuenta con estructuras de control propias, cuando compilamos nuestra plantilla, verificará que no haya sido procesada antes, haciendo que la carga sea más rápida.
En la carpeta definida para los archivos compilados de las plantillas encontraremos el código PHP. Lo que demuestra que aunque la plantilla original tenga una sintaxis distinta, el archivo generado y ejecutado es un archivo PHP.
Calificadores Smarty
En todo lenguaje existen los calificadores, que permiten hacer comparaciones entre variables. Smarty tiene los propios un tanto distintos a los que estamos acostumbrados:
Tabla: para los operadores lo recomendable es utilizar las alternativas, pero también es permitido utilizar los calificadores originales. Para los operadores AND / OR puede utilizarse el operador lógico (and / or) o && (and) / | | (or).
Estructuras de control en Smarty
Sentencia IF: {if $name eq "Fred"} Welcome Sir. {elseif $name eq "Wilma" or $name eq "Vilma"} Welcome Ma'am. {else} Welcome, whatever you are. {/if}
Sentencia SECTION:
Las section del template son usadas para realizar un ciclo (loop)
de un arreglo de datos. Todas las etiquetas {section}
deben tener su par {/section}
. Los parámetros requeridos son name y loop
. El nombre de la section puede ser el que usted quiera, formado por letras, números y subrayados.
Las sections pueden ser anidadas pero diferenciando unas de otras. Las variables del loop (normalmente una matriz de valores) determina el número de veces del loop
de la section.
Cuando estuviera mostrando una variable dentro de una section, el nombre de la section debe estar al lado de la variable dentro de corchetes []. sectionelse
es ejecutado cuando no hubiera valores para la variable del loop(ciclo)
.
<?php $data = array(1000,1001,1002); $smarty->assign('custid',$data); ?> {* este ejemplo imprime todos los valores del arreglo *} {section name = customer loop = $custid} id: {$custid[customer]} <br /> {/section} <hr /> {* imprime todos los valores del arreglo en orden descendente *} {section name=foo loop=$custid step=-1} {$custid[foo]} <br /> {sectionelse} no hay valores en la variable {/section}
También, puede hacerse un ciclo sin un arreglo para tratar. Este ejemplo iniciará el contador en 10 e irá de 2 en 2 hasta el número 20:
{section name = foo start = 10 loop = 20 step = 2} {$smarty.section.foo.index} {/section}
Sentencia FOREACH:
Los ciclos foreach son una alternativa para loop {section}
. Foreach es usado para pegar cada elemento de una matriz asociativa simple. La sintaxis para foreach
es mucho más simple que section
, pero tiene la desventaja de que solo puede ser usada en una única matriz, la etiqueta {foreach}
debe tener su par {/foreach}
.
Los parámetros requeridos son from e item, el nombre del ciclo foreach
puede ser cualquier cosa que usted quiera, hecho de letras, números y subrayados. Los ciclos foreach
pueden ser anidados, y el nombre de los ciclos anidados, debe ser diferente uno de otro. La variable from
(normalmente una matriz de valores) determina el número de veces del ciclo foreach
, el cual será ejecutando cuando no hubiran más valores en la variable from
.
<?php $arr = array( 1001,1002,1003); $smarty->assign('custid', $arr); ?> {* este ejemplo muestra todos los valores de la matriz $custid *} {foreach from = $custid item = curr_id} id: {$curr_id}<br /> {/foreach}
Recordemos que para arreglos asociativos, el signo de separación es el punto ( . ). Además, existe un conjunto de propiedades disponibles dentro del ciclo, como el número de interacción, la llave asociativa, etc.
Otras funciones dentro de la plantilla Smarty:
Smarty tiene un conjunto de funciones integradas bastante grandes, enumerar cada una de ellas con sus características y mostrar un ejemplo, haría que este artículo fuese demasiado extenso. A continuación, muestro un listado de algunas funciones interesantes y una pequeña descripción:
- include_php: Incluye un archivo PHP dentro de la plantilla. Util para obtener información de otros recursos.
- capture: es usado para recolectar toda la salida del template en una variable en lugar de mostrarla.
- ldelim, rdelim: son usados para escapar delimitadores en el template, en nuestro caso “{” or “}”.
- literal: permite que un bloque de texto sea tomado literalmente, no siendo interpretado por Smarty.
- php: incrusta código PHP dentro de la plantilla. No recomendado.
- assign: Es usado para definir valores a las variables de template durante la ejecución del template.
- cycle: es usado para hacer un ciclo a través de un conjunto de valores. Esto hace mas fácil alternar entre dos o mas colores en una tabla, o ciclos a travéz de una matriz de valores.
- html_*: funciones especiales para tratamiendo de cuadros de selección, imágenes, listas de selección, cuadros de fecha, etc.
- math: soporte para definición de funciones matemáticas.
- mailto: soporte automátizado para creación de vínculos de correo electrónico con posibilidad de codificación.
Extendiendo Smarty con Plugins:
Smarty puede ser personalizado, agregando nuevos plugins con lo cual automatizamos funciones para ser utilizadas dentro del template.
Podemos agregar nuestros propios scripts para extender: funciones, modificadores, funciones de bloque, funciones de compilación, prefiltros, postfiltros, filtros de salida, recursos e inserts. Generalmente escribiremos funciones y modificadores.
Nombres convencionales
Los archivos y funciones de Plugin deben seguir una convención de apariencia muy especifica a fin de que pueda ser localizada por el Smarty. Los archivos de plugin deben ser nombrados de la siguiente forma: type.name.php. Donde type
es uno de los siguientes tipo de plugin:
- function
- modifier
- block
- compiler
- prefilter
- postfilter
- outputfilter
- resource
- insert
Algunos ejemplos: function.html_select_date.php
, resource.db.php
, modifier.spacify.php
. Las funciones de plugin dentro de los archivos de plugin deben ser nombradas de la siguiente forma: smarty_type _name()
.
<?php /* * Smarty plugin * ------------------------------------------------------------- * File: function.eightball.php * Type: function * Name: eightball * Purpose: outputs a random magic answer * ------------------------------------------------------------- */ function smarty_function_eightball($params, &$smarty) { $answers = array('Yes', 'No', 'No way', 'Outlook not so good', 'Ask again soon', 'Maybe in your reality'); $result = array_rand($answers); return $answers[$result]; } ?> Question: Will we ever have time travel? Answer: {eightball}.
Ahora bien, debemos reconocer que no existe solamente Smarty como motor de plantillas, sino que existen muchas más alternativas de proyectos con características similares y otras funcionabilidades.
En el próximo artículo y final de la serie sobre Smarty, enumeraremos cuales son esas alternativas junto con sus principales características. En fin, Smarty demuestra ser una herramienta valiosa, open-source y con una gran capacidad de expansión.
hola amigos participantes de evento blog, he elegido este método de presentación, un poco extraño debido a que no he podido asistir al proceso de publicación de nuevos proyectos empresariales por no cumplir dos condiciones; una que no estoy funcionando aún, y la segunda y mas importante es ….que llegue tarde a la inscripción.
De todas maneras quiero presentaros mi idea, el proyecto en que me embarco se llama http://www.disemdi.com y consiste en un periódico digital con formato de superblog.
Tu nos envias un articulo y te lo publicamos con un vinculo a tu pagina, hasta ahí todo normal, pero además ponemos un contador de visitas, y a fin de mes compartimos con los escritores, según las visitas que tenga cada uno, el cincuenta por ciento de nuestros ingresos, que se basan en la publicidad.
Ya hemos reunido un pequeño grupo de personas en un blog provisional; http://www.wwwdisemdicom.blogspot.com y tenemos una maqueta de lo que será nuestra web http://www.disemdi.blogsome.com si te atrae el proyecto mándanos tu bio, saldremos en navidad.
Un saludo
Jose Guillermo Chacón Montes.
[email protected]
Habra que ponerse las pilas con Smarty. Saludos.
Amigos soy nuevo en smarty y tengo una duda.
{if ($field->field===’title’)}
align}”>{$field->field}
{else}
{/if}
y el IF no me da en TRUE aunque si imprimo $field-> field me da bien
Que puede ser?
Gracias.
[…] http://www.maestrosdelweb.com/editorial/smarty-a-nivel-avanzado/ […]
Algo asi silvio deberia ser…
{if ($field->field===’title’)}
{$field->field}
{else}
{/if}
Y si, hay que ponerse con smarty eh, gran herramienta para el desarrollador… este section de mierda!