Files
smarty/docs/es/getting-started.xml
2004-10-07 19:42:08 +00:00

547 lines
18 KiB
XML

<?xml version="1.0" encoding="iso-8859-1"?>
<!-- $Revision$ -->
<part id="getting.started">
<title>Iniciando</title>
<chapter id="what.is.smarty">
<title>Que es Smarty?</title>
<para>
Smarty es un motor de plantillas para PHP. Mas especificamente, esta
herramienta facilita la manera de separar la aplicación lógica y el
contenido en la presentación.
La mejor descripción esta en una situación donde la aplicación
del programador y la plantilla del diseñador juegan diferentes roles,
o en la mayoria de los casos no la misma persona. Por ejemplo:
Digamos que usted crea una pagina web, es decir, despliega el articulo
de un diario. El encabezado del articulo, el rotulo, el autor y el
cuerpo son elementos del contenido, estos no contiene información de
como quieren ser presentados. Estos son pasados por la aplicación
Smarty, donde el diseñador edita la plantilla, y usa una combinación de
etiquetas HTML y etiquetas de plantilla para formatear la presentación
de estos elementos (HTML, tablas, color de fondo, tamaño de letras,
hojas de estilo, etc...).
Un día el programador necesita cambiar la manera de recuperar el
contenido del articulo(un cambio en la aplicación lógica.). Este
cambio no afectara al diseñador de la plantilla, el contenido llegara a
la plantilla exactamente igual. De la misma manera, si el diseñador de
la plantilla quiere rediseñarla en su totalidad, estos cambios no
afectaran la aplicación lógica.
Por lo tanto, el programador puede hacer cambios en la aplicación lógica
sin que sea necesario restructurar la plantilla. Y el diseñador de la
plantilla puede hacer cambios sin que haya rompimiento con la aplicación
lógica.
</para>
<para>
Ahora un pequeño resumen sobre que no hace Smarty. Smarty no intenta
separar completamente la lógica de la plantilla. No hay problema entre la
lógica y su plantilla bajo la condición que esta lógica sea
estrictamente para presentación.
Un consejo: mantener la aplicación lógica fuera de la plantilla, y la
presentación fuera de la aplicación lógica.
Esto tiene como finalidad tener un objeto mas manipulable y escalable para
un futuro proximo.
</para>
<para>
Un único aspecto acerca de Smarty es la compilación de la plantilla.
De esta manera Smarty lee la plantilla y crea los scripts de PHP. Una vez
creados, son executados sobre él.
Por consiguiente no existe ningún costo por analizar gramaticalmente
cada archivo de template por cada requisición, y cada template puede llevar
toda la ventaja del compilador de cache de PHP tal como Zend Accelerator
(<ulink url="&url.zend;">&url.zend;</ulink>) o PHP Accelerator
(<ulink url="&url.php-accelerator;">&url.php-accelerator;</ulink>).
</para>
<para>
Algunas de las características de Smarty:
</para>
<itemizedlist>
<listitem>
<para>
Es extremamente rápido.
</para>
</listitem>
<listitem>
<para>
Es eficiente ya que puede interpretar el trabajo mas sucio.
</para>
</listitem>
<listitem>
<para>
No analiza gramaticalmente desde arriba el template, solo compila una vez.
</para>
</listitem>
<listitem>
<para>
El esta atento para solo recompilar los archivos de plantilla que fueron
cambiados.
</para>
</listitem>
<listitem>
<para>
Usted puede crear <link linkend="language.custom.functions">
funciones habituales </link>
y <link linkend="language.modifiers">modificadores de variables </link>
customizados, de modo que el lenguaje de la platilla es altamente extensible.
</para>
</listitem>
<listitem>
<para>
Sintaxis de etiquetas delimitadoras para configuración de la plantilla,
así lo puede usar {}, {{}}, &lt;!--{}--&gt;, etc.
</para>
</listitem>
<listitem>
<para>
Los construtoress if/elseif/else/endif son pasados por el interpretador
de PHP, así la sintaxis de la expresión {if ...} puede ser compleja o
simple de la forma que usted quiera.
</para>
</listitem>
<listitem>
<para>
Permite un anidamiento ilimitado de sections, ifs, etc.
</para>
</listitem>
<listitem>
<para>
Es posible incrustar directamente codigo PHP en los archivos de plantilla,
aunque esto puede no ser necesario(no recomendado) dado que la herramienta
se puede ajustar.
</para>
</listitem>
<listitem>
<para>
Soporte de caching incrustado
</para>
</listitem>
<listitem>
<para>
Fuentes de Plantilla absoluto
</para>
</listitem>
<listitem>
<para>
Funciones habituales de manipulación de cache
</para>
</listitem>
<listitem>
<para>
Arquitectura de Plugin
</para>
</listitem>
</itemizedlist>
</chapter>
<chapter id="installation">
<title>Instalación</title>
<sect1 id="installation.requirements">
<title>Requerimentos</title>
<para>
Smarty Requiere un servidor web corriendo PHP 4.0.6 o posterior.
</para>
</sect1>
<sect1 id="installing.smarty.basic">
<title>Instalación Básica</title>
<para>
Instale los archivos de la libreria de Smarty que estan en el directorio
de distribución /libs/.
Estos son los archivos PHP que usted NO EDITARA. Estos archivos son toda
las aplicaciones comunes y ellos son actualizados cuando usted actualiza
a una nueva versión de Smarty.
</para>
<example>
<title>Archivos de la libreria Smarty</title>
<screen>
<![CDATA[
Smarty.class.php
Smarty_Compiler.class.php
Config_File.class.php
debug.tpl
/core/*.php (all of them)
/plugins/*.php (all of them)
]]>
</screen>
</example>
<para>
Smarty utiliza una constante de PHP llamada <link
linkend="constant.smarty.dir">SMARTY_DIR</link> que es la ruta para
el directorio de la biblioteca de Smarty. Basicamente, si su
aplicación puede encontrar el archivo <emphasis>Smarty.class.php
</emphasis>, usted no necesita definir SMARTY_DIR, Smarty lo
encontrará. Por consiguiente si, <emphasis>Smarty.class.php
</emphasis> no esta incluido en el path, y no es abastecido por
una ruta absoluta para encontrar su aplicación, entonces usted
debe definir SMARTY_DIR manualmente. SMARTY_DIR <emphasis>debe
</emphasis> incluir una barra de seguimento.
</para>
<para>
Aquí esta un ejemplo de como se crea una instancia de Smarty en sus
scripts PHP:
</para>
<example>
<title>Creando una instancia Smarty de Smarty</title>
<programlisting role="php">
<![CDATA[
<?php
require('Smarty.class.php');
$smarty = new Smarty;
?>
]]>
</programlisting>
</example>
<para>
Intente correr el script de arriba. Si usted obtiene un error diciendo que
el archivo <emphasis>Smarty.class.php</emphasis>
no fue encontrado, puedes usar una de las siguientes opciones:
</para>
<example>
<title>Reemplazar por la ruta absulta de la libreria del archivo</title>
<programlisting role="php">
<![CDATA[
<?php
require('/usr/local/lib/php/Smarty/Smarty.class.php');
$smarty = new Smarty;
?>
]]>
</programlisting>
</example>
<example>
<title>Adicionar el directorio de la libreria para incluirlo en el
include_path de PHP</title>
<programlisting role="php">
<![CDATA[
<?php
// Edite su archivo php.ini, y adicione el directorio de la
// biblioteca de Smarty
// include_path y reinicie su servidor web.
// Entonces lo siguiente debe funcionar:
require('Smarty.class.php');
$smarty = new Smarty;
?>
]]>
</programlisting>
</example>
<example>
<title>Defina la constante SMARTY_DIR manualmente</title>
<programlisting role="php">
<![CDATA[
<?php
define('SMARTY_DIR', '/usr/local/lib/php/Smarty/');
require(SMARTY_DIR . 'Smarty.class.php');
$smarty = new Smarty;
?>
]]>
</programlisting>
</example>
<para>
Ahora que la libreria de archivos esta en su sitio, es tiempo
de configurar los directorios de Smarty para su aplicación.
Smarty require cuatro directorios (por defaul) llamados
<emphasis>templates</emphasis>, <emphasis>templates_c</emphasis>,
<emphasis>configs</emphasis> y <emphasis>cache</emphasis>. Cada
uno de estos son para definir las propiedades de las clases de Smarty.
<emphasis>$template_dir</emphasis>, <emphasis>$compile_dir</emphasis>,
<emphasis>$config_dir</emphasis>, y <emphasis>$cache_dir</emphasis>
respectivamente. Es altamente recomendado que usted configure un grupo
separado de estos directorios para cada aplicación que utilice de Smarty.
</para>
<para>
Asegurece que usted sabe la ubicación del document root de su servidor
web. En nuestro ejemplo, el document root esta en
"/web/www.mydomain.com/docs/". Los directorios de Smarty solo son
accesados por la libreria de Smarty y nunca son accesados directamente
por el navegador. Por consiguiente para evitar cualquier preocupación
con la seguridad, es recomendado colocar estos directorios
<emphasis> fuera </emphasis> del document root.
</para>
<para>
Para nuestro ejemplo de instalación, configuraremos el ambiente de Smarty
para una aplicación de libro de visitas. Escojemos una aplicación solo
con el proposito de crear un directorio de nombre convencional.
Usted puede usar el mismo ambiente para cualquier aplicación, solamente
sustituya "guestbook" con el nombre de su aplicación.
Nosotros colocaremos nuestros directorios de Smarty dentro de
"/web/www.mydomain.com/smarty/guestbook/".
</para>
<para>
Usted necesita tener por lo menos un archivo dentro de su document root,
y que sea accesado por el navegador. Nosotros llamamos el script de
"index.php", y lo colocamos en un subdirectorio dentro del document root
llamado "/guestbook/".
</para>
<note>
<title>Nota Técnica: </title>
<para>
Es conveniente configurar el servidor de forma que "index.php" pueda
ser identificado como el índice del directório padre, de esta manera
si usted accesa "http://www.mydomain.com/guestbook/", el script
index.php será ejecutado sin "index.php" ni la URL.
En Apache usted puede definir el sitio adicionando "index.php" en el
final de su configuración del directorio index
(separando cada uno con espacios.)
</para>
</note>
<para>
Veamos nuestra estructura de archivos hasta hora:
</para>
<example>
<title>Ejemplo de estrutura de archivo</title>
<screen>
<![CDATA[
/usr/local/lib/php/Smarty/Smarty.class.php
/usr/local/lib/php/Smarty/Smarty_Compiler.class.php
/usr/local/lib/php/Smarty/Config_File.class.php
/usr/local/lib/php/Smarty/debug.tpl
/usr/local/lib/php/Smarty/core/*.php
/usr/local/lib/php/Smarty/plugins/*.php
/web/www.mydomain.com/smarty/guestbook/templates/
/web/www.mydomain.com/smarty/guestbook/templates_c/
/web/www.mydomain.com/smarty/guestbook/configs/
/web/www.mydomain.com/smarty/guestbook/cache/
/web/www.mydomain.com/docs/guestbook/index.php
]]>
</screen>
</example>
<para>
Smarty necesitara permisos de escritura para
<emphasis>$compile_dir</emphasis> y <emphasis>$cache_dir</emphasis>,
esto garantiza que el usuario del servidor pueda escribir en ellos.
Este es generalmente el usuarios "nobody" y el grupo "nobody".
Para X usuarios de sistema, el default es "www" y el grupo "www".
Si usted esta usando Apache, puede ver en su archivo httpd.conf
(normalmente en "/usr/local/apache/conf/") cual es el usuario y
grupo que estan siendo usados.
</para>
<example>
<title>Configurando permisos de archivos</title>
<programlisting role="shell">
<![CDATA[
chown nobody:nobody /web/www.mydomain.com/smarty/guestbook/templates_c/
chmod 770 /web/www.mydomain.com/smarty/guestbook/templates_c/
chown nobody:nobody /web/www.mydomain.com/smarty/guestbook/cache/
chmod 770 /web/www.mydomain.com/smarty/guestbook/cache/
]]>
</programlisting>
</example>
<note>
<title>Nota Técnica: </title>
<para>
chmod 770 puede ser una seguridad bastante fuerte, solo le permite al
usuario "nobody" y al grupo "nobody" acesso de lectura/escritura a los
directorios. Si usted quiere abrir permiso de lectura a cualquiera
(en la mayoria de las veces para su propia conveniencia de querer ver
estos archivos), usted puede usar el 775 en lugar del 770.
</para>
</note>
<para>
Nosotros necesitamos crear el archivo index.tpl, para que Smarty lo
pueda cargar. Este estara localizado en su $template_dir.
</para>
<example>
<title>Editando /web/www.mydomain.com/smarty/guestbook/templates/index.tpl</title>
<screen>
<![CDATA[
{* Smarty *}
Hello, {$name}!
]]>
</screen>
</example>
<note>
<title>Nota Técnica:</title>
<para>
{* Smarty *} Esto es un comentario en el template.
Este no es obligatorio, pero si una buena practica iniciar todos sus
archivos de plantilla con estos comentarios.
Esto hace facilmente reconocibles a los archivos a pesar la extención
del archivo. Por ejemplo, editores de texto pueden reconocer el archivo
y habilitar un realce de sintaxis especial.
</para>
</note>
<para>
Ahora vamos a editar el index.php. crearemos una instancia de Smarty,
daremos valor a las variables del template y mostraremos el archivo
index.tpl.
En el ambiente de nuestro ejemplo, "/usr/local/lib/php/Smarty" esta
dentro de include_path. Asegurese que exista el mismo, o utilice la
ruta absoluta.
</para>
<example>
<title>Editando /web/www.mydomain.com/docs/guestbook/index.php</title>
<programlisting role="php">
<![CDATA[
<?php
// load Smarty library
require('Smarty.class.php');
$smarty = new Smarty;
$smarty->template_dir = '/web/www.mydomain.com/smarty/guestbook/templates/';
$smarty->compile_dir = '/web/www.mydomain.com/smarty/guestbook/templates_c/';
$smarty->config_dir = '/web/www.mydomain.com/smarty/guestbook/configs/';
$smarty->cache_dir = '/web/www.mydomain.com/smarty/guestbook/cache/';
$smarty->assign('name','Ned');
$smarty->display('index.tpl');
?>
]]>
</programlisting>
</example>
<note>
<title>Nota Técnica: </title>
<para>
En nuestro ejemplo, estamos configurando rutas absolutas para todos
los directorios de Smarty.
Si '/web/www.mydomain.com/smarty/guestbook/' está dentro de su
include_path de PHP, entonces estas declaraciones no son necesarias.
Sin embargo, esto es mas eficiente y (por experiencia) tiene menos
tendencia a errores en relación a determinar las rutas absolutas.
Esto garantiza que Smarty esta recibiendo los archivos del directorio
que usted desea.
</para>
</note>
<para>
Ahora carge el archivo index.php desde su navegador web. Usted debera
ver "Hello, Ned!"
</para>
<para>
Usted a completado la configuracion basica para el Smarty!
</para>
</sect1>
<sect1 id="installing.smarty.extended">
<title>Expandiendo la configuración</title>
<para>
Esta es una continuación de la <link linkend="installing.smarty.basic">
instalación básica</link>, por favor lea esta primero!
</para>
<para>
Una forma un poco mas flexible de configurar el Smarty, expandir las
clases e iniciar su ambiente de Smarty. Es, en vez de configurar rutas
de directorios repetidamente, asigne esas mismas a variables, etc.,
nosotros podemos facilitar eso. Vamos a crear un nuevo directorio en
"/php/includes/guestbook/" y llamemos al nuevo archivo "setup.php".
En nuestro ejemplo, "/php/includes" está en nuestro include_path.
Verifique que usted también lo definio, o utilice rutas absolutas de
los archivos.
</para>
<example>
<title>Editando /php/includes/guestbook/setup.php</title>
<programlisting role="php">
<![CDATA[
<?php
// load Smarty library
require('Smarty.class.php');
// The setup.php file is a good place to load
// required application library files, and you
// can do that right here. An example:
// require('guestbook/guestbook.lib.php');
class Smarty_GuestBook extends Smarty {
function Smarty_GuestBook()
{
// Class Constructor. These automatically get set with each new instance.
$this->Smarty();
$this->template_dir = '/web/www.mydomain.com/smarty/guestbook/templates/';
$this->compile_dir = '/web/www.mydomain.com/smarty/guestbook/templates_c/';
$this->config_dir = '/web/www.mydomain.com/smarty/guestbook/configs/';
$this->cache_dir = '/web/www.mydomain.com/smarty/guestbook/cache/';
$this->caching = true;
$this->assign('app_name','Guest Book');
}
}
?>
]]>
</programlisting>
</example>
<para>
Ahora vamos a modificar el archivo index.php para usar el setup.php:
</para>
<example>
<title>Editando /web/www.mydomain.com/docs/guestbook/index.php</title>
<programlisting role="php">
<![CDATA[
<?php
require('guestbook/setup.php');
$smarty = new Smarty_GuestBook;
$smarty->assign('name','Ned');
$smarty->display('index.tpl');
?>
]]>
</programlisting>
</example>
<para>
Ahora usted vera que es completamente simple crear una instancia de
Smarty, solo use Smarty_GuestBook, que automáticamente inicializa todo
para nuestra aplicación.
</para>
</sect1>
</chapter>
</part>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->