Categories
Artí­culos PHP

Sitios MultiIdioma – Smarty

Primero que nada, esta parte está lejos de ser un tutorial de Smarty, ya que sólo utilizaremos algunas cosas, adaptándolo a nuestro ejemplo (un pequeño sistema de noticias), los que quieran conocer más a fondo esta herramienta, en mi opinión, no hay nada mejor que el manual de la página oficial.

Smarty, como ya había mencionado en la introducción, es un motor de plantillas para PHP, esta herramienta facilita la manera de separar la lógica aplicación, de la presentación de la misma.

Para empezar primero hay que descargar el código fuente de Smarty, la única carpeta que nos interesa del mismo, es la carpeta libs. La estructura que tendrá nuestro ejemplo (denominaremos aplicación al ejemplo que estamos haciendo) es la siguiente:

  • /var/www/
    • html/bc-news: Lugar visible para el mundo exterior, donde ubicaremos los archivos de la aplicación (excepto las plantillas).
      • includes: Funciones y demás utilerías que darán soporte a la aplicación.
      • images: Imágenes de la aplicación.
      • js: Ubicación de los posibles scripts de cliente.
      • css: Hojas de estilo para la aplicación.
    • smarty: Es el directorio libs del código de Smarty.
      • plantillas: Ubicaremos las plantillas de la aplicación.
      • plantillas_c: Lugar donde se almacenarán las plantillas compiladas por Smarty. El usuario bajo el que se ejecuta el servidor web, necesita permisos de escritura sobre este directorio.

Una vez con nuestra estructura definida, pasamos a establecer el archivo de configuración y algunas inicializaciones (esta es mi forma de trabajar, no necesariamente tienen que hacerlo así), definimos el archivo config.php en el directorio bc-news:

php:

<?php
        # Archivo config.php
        # ------------------
       
        # Directorio donde está ubicado Smarty
        define('SMARTY_PATH', '/var/www/smarty/');

        # Define la ruta fí­sica del sitio
        define("APP_PHISICAL_PATH",$_SERVER['DOCUMENT_ROOT'] . "/");
        # Define la ruta base del sitio
        define("BASE_PATH", APP_PHISICAL_PATH . "bc-news/");
        # Lugar donde se ubican las funciones, clases, etc.
        define("INCLUDE_PATH", BASE_PATH . "includes/");
        # Define el URL base
        define("BASE_URL","http://" . $HTTP_SERVER_VARS['HTTP_HOST'] . "/bc-news/");
       
        /* Para los estilos e imágenes */
        define("IMAGES_URL",BASE_URL . "images/");
        define("STYLES_URL",BASE_URL . "css/");
        define("SCRIPTS_URL",BASE_URL . "js/");
       
        # El directorio donde se ubican las traducciones
        define("LOCALE", INCLUDE_PATH . "locale/");
       
        # El idioma por defecto bajo el cual se deben llenar obligatoriamente todos los datos
        define("DEFAULT_LANG", "es");
       
        # Parámetros de la base de datos
        $db_params['db_host']="localhost";
        $db_params['db_name']="bc-news";
        $db_params['db_user']="bc-news";
        $db_params['db_pass']="bc";
?>

Creamos el archivo smarty-instance.php dentro del directorio includes, el cual tiene el objetivo de crear una instancia de Smarty y hacer algunas configuraciones del mismo:

php:

<?php
        # Instancia un objeto de la clase Smarty y define sus atributos
       
        # Carga la clase
        include_once (SMARTY_PATH . 'Smarty.class.php');
       
        # Instancia un nuevo objeto de la clase
        $smarty = new Smarty;
       
        # Define las rutas de trabajo
        $smarty->template_dir   = SMARTY_PATH . "plantillas";
        $smarty->compile_dir    = SMARTY_PATH . "plantillas_c"; # Necesita permisos de escritura
        # Definir un directorio para hacer cache
        #$smarty->cache_dir         = SMARTY_PATH . "cache"; # Necesita permisos de escritura
?>

Finalmente, creamos el archivo init.php que se encargará de incluir el archivo config.php y todos los archivos del directorio includes, por el momento sólo contiene estas líneas:

php:

<?
        include_once('config.php');
        include_once(INCLUDE_PATH . 'smarty-instance.php');
?>

En la siguiente entrega, tocaremos un poco de Gettext e implementaremos un plugin para Smarty que se encargue de invocar a las funciones de php-gettext .

17 replies on “Sitios MultiIdioma – Smarty”

apenas comienzo a utilizar smarty y la intentar ejecutar alguna pagina me manda el siguiente error:
Warning: Smarty error: unable to read resource: "index.tpl" in /usr/local/apache/htdocs/areas/mgit/ginclude/Smarty-2.6.0-RC1/libs/Smarty.class.php on line 1156
que quiere decir con eso de que no puede leer los archivos tpl
alguien me puede explicar porque
gracias

Hola, ese error te manda porque no encuentra la plantilla index.tpl en el lugar que le indicas, un ejm:

php:

include_once ('Smarty.class.php');
       
$smarty = new Smarty;
       
$smarty->template_dir   = "/alguna/ruta/plantillas";
$smarty->compile_dir    = "/alguna/ruta/plantillas_c";

//index.tpl estaría ubicado en /alguna/ruta/plantillas/index.tpl
$smarty->display("index.tpl");

tengo una gran duda estoy empezando a utilizar smarty y no se como se configura el config.inc.php y si tengo que ponerle una ruta como con el template?

esoy utilizando smarty y al ejecutar una pagina me aparece
Warning: main(../config.inc.php): failed to open stream: No such file or directory in /usr/local/apache/htdocs/areas/mgit/itcoop/Anabel_practicas/otrosEjemplos/index_ajax.php on line 2
que significa este errror

Anabel (Iliana?): El archivo config.inc.php te pertenece no? porque ese archivo no existe en la paquete original de smarty.

El error te manda porque no encuentra el archivo config.inc.php en la ruta que le indicas.

hola necesito saber que significa este error que me envia cada vez que quiero ejecutar un index.tpl
el index tpl tiene:
Display('/usr/local/apache/htdocs/areas/mgit/itcoop/checklist/smarty/templates_c/index_ajax.tpl');
?>

Warning: filemtime(): Stat failed for /usr/local/apache/htdocs/areas/mgit/itcoop/checklist/smarty/templates_c/index_ajax.tpl (errno=2 - No such file or directory) in /usr/local/apache/htdocs/areas/mgit/ginclude/Smarty-2.6.0-RC1/libs/Smarty.class.php on line 1641

pues esque ese archivo ya lo configure
solo que cada vez que le pongo la ruta me manda ese error
la rutaque le pongo es
include('../otrosEjemplos/include/config.inc.php')
porque esta en una carpeta que se llama otros ejemplos pero aun asi no la reconoce y no se ni que ruta poner entonces

estoy usando cpaint y cuando quiero ejecutar una pagina php en la que introdusco la clave del registro y que me haga una consulta a una tabla me muestra el siguiente error
"cpaint is undefined" y no muestra la tabla
a cpaint la declare asi
$cp= new cpaint();

Ana, lamentablemente no puedo ayudarte en temas que no están relacionados al artículo. Te sugiero que visites algún foro (Ej. forosdelweb.com)

Saludos

hola quisiera saber como declaro varibles smarty en mi pagina php
y despues llamarlas en el tpl
tengo un query de consulta a multitablas y quiero aparcer ese reporte pero necesito hacer unos ajustes que en el query no los puedo realizar asi que me piden que construya un html y ahi hacer ajustes manualmente pero no se como hacer para que del php pase a html

Hola, no puedo encontrar el siguiente artículo de esta serie.
Está la serie completa?
Gracias de ante mano, saludos!!

Comments are closed.