+ Reply to Thread
Results 1 to 4 of 4
Like Tree2Likes
  • 2 Post By Amadis

Thread: [TUTORIAL] Introducción a Smarty

  1. #1
    eZakto is offline x10 Lieutenant eZakto is an unknown quantity at this point
    Join Date
    May 2006
    Location
    Salta, Argentina.
    Posts
    394

    [TUTORIAL] Introducción a Smarty

    Introducción a Smarty

    Are you serious!?
    Of course, dude!
    ¿Y qué diablos se supone que es 'Smarty'?
    Smarty es lo que se conoce como un Template Engine. En pocas palabras, se puede describir como una librería que te permite separar el diseño del código en tu web, para hacerla así más flexible y organizada.
    ¿Y como se utiliza Smarty?
    Eso veremos ahora.

    Comenzando
    En primer lugar, este tutorial pretende introducir a los nuevos usuarios a Smarty. Es extremadamente básico... EXTREMADAMENTE básico.
    Aunque me gustaría mucho explicar todas las ventajas, características y posibilidades, no lo voy a hacer porque para ello está su completo manual oficial en español, que recomiendo leer. Mi objetivo será adentrar de forma rápida a los usuarios a través de la práctica. Osea, vamos a hacer un mini-sitio básico.

    En busca de los requisitos
    PHP, por supuesto, es básico.
    También hará falta descargar la librería con la que trabajaremos. Podrán encontrar su última versión en http://www.smarty.net/download.php bajo el título de Latest Stable Release.
    Un requisito también es el tener una idea básica de php. En los ejemplos de mysql no explicaré nada del tema de base de datos, ni explicaré sobre los bucles y los arrays.

    Descargado y descomprimido
    Ahora podemos proceder a subir los archivos a nuestro hosting, o ubicarlos en nuestro servidor local, o donde sea que pueda funcionar. En este tutorial, tendremos un directorio que contendrá los archivos: index.php, content.php. Y las carpetas libs/, configs/, cache/, templates/, templates_c/.

    La carpeta libs es la extraída del archivo descargado de smarty.net, y contiene todos los archivos de la librería, necesarios para que Smarty funcione.

    Archivito de configuración
    Este archivo, que yo llamaré smarty.init.php, contendrá unas pocas líneas para crear una instancia de Smarty.

    smarty.init.php
    PHP Code:
    <?php
    ##
    # Tutorial Smarty @ por eZakto
    ##

    // Incluimos el siguiente archivo, que básicamente carga toda la librería.
    require('libs/Smarty.class.php');

    // Bien, ahora creamos un objeto Smarty, que llamaremos template.
    $template = new Smarty;

    // Y lo siguiente será configurar los directorios previamente creados.
    // La ruta a estos directorios puede ser o bien relativa, o bien absoluta.
    $template->template_dir 'templates/';
    $template->compile_dir 'templates_c/';
    $template->config_dir 'configs/';
    $template->cache_dir 'cache/';
    ?>
    Fácil. Con esto, teóricamente, deberíamos tener nuestro smarty funcionando! Ahora vamos a usarlo.

    Armando el sitio
    Bien. Vamos a armar el sitio. Primero vamos a obtener todo el contenido. No esperen maravillas, esto será tremendamente simple.

    index.php
    PHP Code:
    <?php
    ##
    # Tutorial Smarty @ por eZakto
    ##

    // Incluimos nuestro archivo base.
    include('smarty.init.php');

    // Ahora vamos a obtener la IP del visitante por medio de la superglobal $_SERVER, y la vamos a pasar al template.
    $ip $_SERVER['REMOTE_ADDR'];

    /* Con el método 'assign' de Smarty, pasamos contenido del código al template.
    Primer argumento: nombre de la variable en el template. Segundo argumento: contenido. */
    $template->assign('user_ip'$ip);

    /* Ok. Ahora debemos indicar qué template queremos mostrar. Para ello, usamos el método 'display'.
    Su único argumento será el nombre del archivo de template, que se encuentra en el directorio template/. */
    $template->display('index.tpl');

    ?>
    Listo. Ahora debemos crear el archivo index.tpl, que será nuestro diseño, y debemos mostrar la variable asignada desde el código. Para mostrarla, indicamos su nombre como una variable php, pero entre llaves ('{' y '}').

    templates/index.tpl
    HTML Code:
    <html>
    <head>
      <title>Mi web con Smarty</title>
    </head>
    <body>
    <p>
      ¡Hola, visitante! Su IP es {$user_ip}.
    </p>
    </body>
    </html>
    La página más compleja del mundo.

    Si visualizamos el archivo index.tpl como html, veremos el texto "¡Hola, visitante! Su IP es {$user_ip}". Pero si ejecutamos el archivo index.php, veremos el texto "¡Hola, visitante! Su IP es 123.233.12.103", por poner un ejemplo. Nuestra web con smarty ya está funcionando.

    Haciendo algo más interesante
    Bien. Ahora vamos a un ejemplo un poco más complejo. Suponiendo que queremos cargar contenido dinámico de una base de datos MySQL, digamos, noticias. ¿Qué hacemos? Nada muy diferente al ejemplo anterior. Sólo que debemos obtener dichos datos. En este ejemplo obtendremos un array y lo pasaremos.

    contents.php
    PHP Code:
    <?php
    ##
    # Tutorial Smarty @ por eZakto
    ##

    // Incluimos nuestro archivo base.
    include('smarty.init.php');

    // Conectamos y seleccionamos la base de datos.
    $link mysql_connect('localhost''usuario''contrasena');
    mysql_select_db('mi_db'$link);

    /* Supongamos que tenemos la tabla "noticias", y esta tiene 3 campos: id, titulo, texto.
    Ejecutamos una sentencia sql para seleccionar la última noticia (basándonos en la id). */
    $query mysql_query("SELECT * FROM noticias ORDER BY id DESC LIMIT 0,1");

    // Y de este resource, obtenemos un array asociativo.
    $noticia mysql_fetch_assoc($query);

    // Ahora repetimos los pasos anteriores.
    // Sólo que esta vez, pasaremos un array en vez de una variable.

    $template->assign('noticia'$noticia);
    $template->display('contents.tpl');
    ?>
    Y ahora nos vamos al template. Si tenemos un array, para acceder a sus elementos, no usamos '[' y ']' como en la sintaxis de php, sino que accedemos a ellos a través del punto. Por ejemplo: {$array.elemento}. Veamos.

    templates/contents.tpl
    HTML Code:
    <html>
    <head>
      <title>Mi web con Smarty</title>
    </head>
    <body>
    <h1>Últimas noticias</h1>
    <h2>{$noticia.titulo}</h2>
    <p>{$noticia.texto}</p>
    </body>
    </html>
    Y ejecutamos el archivo contents.php para ver nuestra obra de arte funcionando :' ) .

    ¡Yo quiero que muestre más noticias!
    Todos lo queremos. Por eso vamos a hacerlo. En el código php anterior, vamos a hacer unos cambios. Vamos a crear un array que contenga en cada uno de sus elementos, un array asociativo de una noticia. Modificamos las siguientes líneas:
    PHP Code:
    $query mysql_query("SELECT * FROM noticias ORDER BY id DESC LIMIT 0,1"); 
    Pasará a ser:
    PHP Code:
    $query mysql_query("SELECT * FROM noticias ORDER BY id DESC LIMIT 0,5"); 
    Para seleccionar las últimas 5 noticias.

    Luego, eliminamos esto:
    PHP Code:
    // Y de este resource, obtenemos un array asociativo.
    $noticia mysql_fetch_assoc($query); 
    Y en su lugar, creamos un array vacío y con un bucle while le vamos insertando los arrays obtenidos por noticia:
    PHP Code:
    $noticias = array();
    while(
    $fila mysql_fetch_assoc($query)) {
      
    array_push($noticias$fila);

    Y finalmente cambiamos esta línea:
    PHP Code:
    $template->assign('noticia'$noticia); 
    Por:
    PHP Code:
    $template->assign('noticias'$noticias); 
    Bien. Ahora reharemos el template. Como estamos pasando el array multidimensional $noticias, debemos recorrerlo con un bucle para ir mostrando cada noticia. Para eso usamos el equivalente Smarty de la función foreach de php.

    templates/contents.tpl
    HTML Code:
    <html>
    <head>
      <title>Mi web con Smarty</title>
    </head>
    <body>
    {foreach item=noticia from=$noticias}
    <h1>Últimas noticias</h1>
    <h2>{$noticia.titulo}</h2>
    <p>{$noticia.texto}</p>
    <br />
    {/foreach}
    </body>
    </html>
    WOW! Qué fácil! Lo que hicimos fue usar la función incorporada foreach. Recorremos el array $noticias ('from=$noticias') refiriéndonos a cada uno de sus elementos como "noticia" ('item=noticia').

    Eso es todo amigos!
    Lo que se ha visto aquí es SUPER BÁSICO. Para comprender mejor la sintaxis de smarty, los métodos de la clase y demás, a leer: http://www.smarty.net/manual/es/ .

    Algunos tips
    Si se quiere mostrar cosas como "{$variable}" literalmente, o no se quieren tener errores en estilos incorporados (css), debemos usar la función incorporada {literal}. Todo lo que esté entre los tags {literal} y {/literal} no será parseado por smarty.
    Se pueden definir variables "omnipresentes" en archivos de configuración, y ser llamadas en los templates de forma {#variable#}. En el manual se explica claramente.
    Hay varias funciones integradas, como {if} (condicional), o {include} (para incorporar otros archivos de template en el actual). Es muy útil saber usarlas.

    ------------------------

    Como siempre, no probé nada. Si hay algún error me avisan.

    Saludos!

  2. #2
    Amadis is offline x10Hosting Member Amadis is an unknown quantity at this point
    Join Date
    Feb 2008
    Posts
    31

    Re: [TUTORIAL] Introducción a Smarty

    Muy buen aporte, me parece que esta clase la usan en PHPBB.
    Es muy importante además es oficial de PHP.net
    dinomirt96 and karimirt47 like this.

  3. #3
    ZharkD's Avatar
    ZharkD is offline Retired ZharkD is an unknown quantity at this point
    Join Date
    Jan 2008
    Location
    MX
    Posts
    5,914

    Re: [TUTORIAL] Introducción a Smarty

    pff de gran ayuda para novatos en php como yo XD
    muy util se agradece

    PD: agregado al indice de tutoriales


    salu2

  4. #4
    rolandoando is offline x10Hosting Member rolandoando is an unknown quantity at this point
    Join Date
    Jun 2010
    Posts
    1

    Post Re: [TUTORIAL] Introducción a Smarty

    Hola, me ha servido de mucho y ya está funcionando, pero ahora tengo el siguiente problema.

    Tengo este código que no logro que funcione, siempre me da el mismo error, el de cierre de etiqueta php.

    PHP Code:

    $title
    ='';
        switch (
    $elnombrequesea){
        case 
    'empresa':
            
    $select_producto='class="selecc"';
            
    $smarty->assign('estatico',true);
            
    $title='Tartas, Oviedo';
            
    $smarty->assign('file','empresa.tpl');
            break; 
    Necesito que funcione con varios tpl's como contacto, productos, etc. y el default que es home.tpl.

    Aclaro que no sé casi nada de esto, entiendo algo de php, pero muy poco.

    Gracias a todos.
    Un saludo

+ Reply to Thread

Similar Threads

  1. Replies: 21
    Last Post: 10-07-2011, 05:20 PM
  2. Replies: 8
    Last Post: 07-21-2008, 11:43 AM
  3. Smarty Installation
    By jaybe in forum Free Hosting
    Replies: 3
    Last Post: 07-10-2008, 05:18 PM
  4. [Tutorial] Full Signature Tutorial
    By wjeffery in forum Graphics & Webdesign
    Replies: 4
    Last Post: 11-21-2007, 05:35 PM
  5. Smarty Template System
    By lambada in forum Scripts & 3rd Party Apps
    Replies: 0
    Last Post: 12-22-2006, 04:45 PM

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
x10hosting free hosting for the masses
dedicated servers