Smarty
De Blogx Populi - Wiki Hispano
Este artículo necesita desarrollarse más. Ampliándolo ayudarás a mejorar Blogx Populi.
Tal vez puedas ayudarte con los wikis catalán e inglés si tienen una página equivalente.
Smarty es un motor de plantillas para PHP, cuyo objetivo es separar el contenido de la presentación en una página web, se encuentra bajo la licencia GPL por lo que puede ser usado libremente.
Es común que en grandes proyectos el rol de diseñador gráfico y el de programador sean cubiertos por personas distintas, sin embargo la programación en PHP tiene la tendencia a combinar estas dos labores en una persona y dentro del mismo código lo que trae consigo grandes dificultades a la hora de cambiar alguna parte del diseño de la página, pues se tiene que escarbar entre los scripts para modificar la presentación del contenido, Smarty tiene como objetivo solucionar este problema.
Contenido |
[editar] Smarty en el proyecto Blogmail
- 17-04-2006: Propuesta de instalación desde el paquete Debian Etch
apt-get install smarty
instala
smarty_2.6.14-1_all.deb
- 08-08-2006: Instalado desde el paquete Debian Sarge
apt-get install smarty
instala
smarty_2.6.9-1_all.deb
[editar] Instalación
For a system wide installation, follow the instructions in the manual: http://smarty.php.net/manual/en/installing.smarty.basic.php http://smarty.php.net/manual/en/installing.smarty.extended.php
[editar] Instalación en Debian
For 'lutka' test installation, the steps in a nutshell (assuming blogmail app installed at webroot/blogmail): El paquete Debian se instala en /usr/share/php/smarty/libs
Actualiza /etc/php*/apache2/php.ini para leer:
; path to Smarty Template library include_path=".:/usr/share/php/smarty/libs/"
Reinicia el servidor web y la instalación estará lista.
[editar] Probando la instalación
In /webroot create the folders:
- /smarty/blogmail/templates
- /smarty/blogmail/templates_c
- /smarty/blogmail/configs
- /smarty/blogmail/cache
Set permissions for apache user (nobody or www-data as per your httpd.conf file):
chown www-data:www-data /smarty/templates_c/ chmod 770 /smarty/templates_c/ chown www-data:www-data /smarty/cache/ chmod 770 /smarty/cache/
Create the file /public_html/smarty/blogmail/templates/index.tpl with the contents:
{* Smarty *} Hello, {$name}!
Update your php.ini include path to read:
include_path=".:/usr/share/php/smarty/libs:/path/to/webroot/php/includes"
Create a folder in webroot: php/includes/blogmail/ and a file there named setup.php:
<?php
require('Smarty.class.php');
class Smarty_Blogmail extends Smarty
{
function Smarty_Blogmail() // Class Constructor. These automatically get set with each new instance.
{
$this->Smarty();
$this->template_dir='/home/mdl/public_html/smarty/blogmail/templates/';
$this->compile_dir='/home/mdl/public_html/smarty/blogmail/templates_c/';
$this->config_dir='/home/mdl/public_html/smarty/blogmail/configs/';
$this->cache_dir='/home/mdl/public_html/smarty/blogmail/cache/';
$this->caching = true;
$this->assign('app_name','Blogmail Develpoment on Lutka');
}
}
?>
Create a file webroot/blogmail/index.php with the contents:
<?php require('blogmail/setup.php');
$smarty = new Smarty_Blogmail;
$smarty->assign('name','Ned');
$smarty->display('index.tpl');
?>
Test in your browser for output "Hello, Ned!"
[editar] Desarrollo
[editar] Crear una etiqueta
Archivos implicados:
- Las funciones están escritas en
template-functions.php, que es un require de:
bm-includes/template-functions-general.php bm-includes/template-functions-links.php bm-includes/template-functions-author.php bm-includes/template-functions-post.php bm-includes/template-functions-category.php bm-includes/comment-functions.php bm-includes/feed-functions.php
- Son llamadas por
bm-includes/class-smarty.php
[editar] Ejemplo de Smarty
[editar] index.php
include('Smarty.class.php');
// Crea Objeto
$smarty = new Smarty;
// Asigna algo de contenido, este vendria comunmente de
// una base de datos u otra fuente,pero usaremos valores
// estáticos para este ejemplo.
$smarty->assign('nombre', 'José Manuel Pardo Pérez');
$smarty->assign('direccion', 'Alpes #992');
// Lo muestra
$smarty->display('index.tpl');
[editar] index.tpl
<html>
<head>
<title>Información del Usuario</title>
</head>
<body>
<p>Información del Usuario:</p>
<p>Nombre: {$nombre}<br />
Dirección: {$direccion}</p>
</body>
</html>
[editar] Salida HTML generada
<html>
<head>
<title>Información del Usuario</title>
</head>
<body>
<p>Información del Usuario</p>
<p>Nombre: José Manuel Pardo Pérez<br />
Dirección: Alpes #992</p>
</body>
</html>
[editar] Más información
[editar] Ver también
[editar] Opiniones sobre sistemas de plantillas para PHP
Existen más sistemas de plantillas para PHP pero éste parece ser el más avanzado y con más frecuencia de desarrollo. También hay detractores de estas técnicas que alegan que las mismas hacen en cierta medida un grado más complejo el desarrollo web, por la necesidad de aprender un (pseudo) lenguaje más.
Los detractores de esta idea se basan en el hecho de que - precisamente el PHP nació como un lenguaje rápido para hacer desarrollos web a pequeña escala. A medida van surgiendo sistemas de separación en capas que intentan disciplinar un poco las metodologías de programación envueltas en el desarrollo con el PHP, pero que no hacen otra cosa que acercarse más y más a otras herramientas ya existentes en otros entornos de desarrollo, más complejos y pensados desde sus orígenes para proyectos más grandes, como pueden ser J2EE (Java).
Sin embargo, esto no es más que una de tantas opiniones ya que como prueba nos sirve la propia Wikipedia - un proyecto hecho con MediaWiki - basado en PHP, con lo cual el desarrollo de proyectos grandes con PHP está fuera de cualquier duda. Además, el PHP actual está en un estado muchísimo más avanzado que aquel lenguaje inicial.
Es más, es posible combinar ciertos sistemas de plantillas con las técnologías AJAX - como por ejemplo el propio Smarty integrado con las librerías Xajax, consiguiendo de esta manera un grado muy sofisticado de separación en capas.

