Foros del Web » Programando para Internet » PHP »

Podeis echarle el ojo a este codigo

Estas en el tema de Podeis echarle el ojo a este codigo en el foro de PHP en Foros del Web. Bueno, tengo esta clase q utilizo para las paginas q estoy empezando ahora pero creo q se podria optimizar mas, y la verdad es q ...
  #1 (permalink)  
Antiguo 15/06/2005, 00:42
 
Fecha de Ingreso: diciembre-2003
Mensajes: 218
Antigüedad: 20 años, 4 meses
Puntos: 0
Podeis echarle el ojo a este codigo

Bueno, tengo esta clase q utilizo para las paginas q estoy empezando ahora pero creo q se podria optimizar mas, y la verdad es q el codigo, de cualquier lenguaje ayuda q otros ojos vean el codigo y opinen.

Código PHP:
<?
/********************************************************************************/
/*        NOMBRE:        SpynTPL (Clase)                                                */
/*        AUTOR:        Andrés Nieto Porras                                            */
/*        FECHA:        8/6/05                                                        */
/*        DESCRIPCION:                                                            */
/*            Clase que te permite crear un objeto template para reemplazar        */
/*        valores de variables insertadas en ficheros HTML.                        */
/*        MODIFICACIONES:                                                            */
/*            - 8/6/05        Creacion del Fichero                                */        
/*            - 9/6/05        Sistema de Debug                                    */        
/*            - 11/6/05        Permitimos agregar un array directamente.            */        
/*        FUNCIONAMIENTO:                                                            */
/*            fichero.html                                                        */
/*                <head>                                                            */
/*                <title>[$titulo]</title>                                        */
/*                </head>                                                            */
/*            fichero.php                                                            */
/*                include('class-tpl.php');                                        */
/*                $html = new SpynTPL();                                            */
/*                $html->asigna('titulo','TITULO DE LA PAGINA');                    */
/*                $html->Muestra();                                                */
/********************************************************************************/

class SpynTPL
{

    var 
$ini "[";                // -- Tag de comienzo.
    
var $fin "]";                // -- Tag de fin.
    
    
var $tpl_dir ".";            // -- Directorio de los templates.
    
var $variables = array();    // -- Variables q componen el template.
    
var $ficheros = array();    // -- Array de ficheros.
    
var $pos = -1;                // -- Posición dentro de los ficheros.
    
    
var $cache false;            // -- Sistema de Cache(true/false).
    
var $cache_dir ".";        // -- Directorio del cache.
    
var $cache_time 10;        // -- Tiempo en seg. para q se actualice la pagina.
    
    
var $debug false;            // -- Activamos sistema de Debug(true/false).
    
    // --  Constructor -- //
    
function SpynTPL ($dir$debug false)
    {
        
$this->tpl_dir $dir;
        
$this->debug $debug;
    }
    
// --  Cambiamos los tags -- //
    
function NuevosTags($ini$fin)
    {
        
$this->ini $ini;
        
$this->fin $fin;
    }
    
// -- Funcion q introduce un array en variables -- //    
    
function AsignaArray($valor)
    {
        
$this->variables[$this->pos] = array_merge($valor);
    }    
    
    
// -- Función q devuelve el fichero de una posicion dada -- //
    
function DevFichero($posicion)
    {
        return 
$this->ficheros[$posicion];
    }
    
    
// -- Asginamos una variable a un nombre -- //
    
function Asigna ($nombre '',$valor)
    {
        if (
is_array($valor))
            
$this->AsignaArray($valor);
        else
        {
            if (
$this->debug)
                echo 
"<br>Asignamos a $this->ficheros[$this->pos]: $nombre => $valor";
            
$this->variables[$this->pos][$nombre]= $valor;
        }
    }
    
/* -- Sistema de Cache -- */
    // -- Activamos la cache -- //
    
function ActivaCache()
    {
        if (
$this->debug)
            echo 
"<br><b>Activamos CACHE</b><br>";
        
$this->cache true;
    }
    
    
// -- Cambiamos el tiempo de la cache (seg) -- //
    
function TiempoCache($tiempo)
    {
        
$this->cache_time $tiempo;
    }
    
    
// -- Cambiamos el directorio de la cache -- //
    
function DirectorioCache ($dir)
    {
        
$this->cache_dir $dir;
    }
    
/* -- Fin Sistema de Cache -- */
    
    
    // -- Insertamos un nuevo fichero en el array -- //
    
function Fichero ($file)
    {
        if (
$this->cache)                                                        // Si tenemos la cache activada
                
$this->ficheros[$this->pos++] =    $this->ExisteEnCache($file);    // Si no existe el fichero en cache
        
else
            if (
file_exists($this->tpl_dir.$file))                                //Si existe el fichero.
                
$this->ficheros[$this->pos++] = $file;
            else
                die(
"No existe el fichero $this->tpl_dir.$file");
        
    }
    
    
// -- Comprobamos que exista el fichero en la cache -- //
    
function ExisteEnCache($file)
    {
    
//Creamos el fichero
        
$creado time() - $this->cache_time;
        if (
$this->debug)
        echo 
"<b>Ahora</b> = ".time()."<br><b>Tiempo de cache</b>: ".$this->cache_time." seg.<br><b>Tiempo valido antes de borrar:</b> ".$creado.
        
"<br><b>Creacion del fichero:</b> ";
        if (
file_exists($this->cache_dir.$file))                                        // -- Si el fichero existe
            
{
                if (
$this->debug)
                    echo 
filemtime($this->cache_dir.$file)."<br>"
                if (
filemtime($this->cache_dir.$file) < $creado)                        // -- Comprobamos q no exceda el tiempo maximo
                
{
                    if (
$this->debug)
                        echo 
"Entramos ".filemtime($this->cache_dir.$file)." < $creado";
                    
$salida $this->NuevoEnCache($file);                                // -- Lo creamos
                
}
                
$salida $file;
            }
        else
            
$salida $this->NuevoEnCache($file);                                        // -- Si no existe, lo creamos
        
if ($this->debug)
            echo 
"FICHERO EN CACHE: ".$salida;
        return 
$salida;
    }
    
    
// -- Creamos fichero nuevo en cache -- //
    
function NuevoEnCache ($file)
    {
        
$nuevoNombre $file;
        
$fp fopen($this->cache_dir.$nuevoNombre,"w");
        
fwrite($fp,$this->TrataFichero($this->tpl_dir.$file));
        
fclose($fp); 
        if (
$this->debug)
            echo 
"<br><b>Creamos el fichero</b><br><hr>";
        return 
$nuevoNombre;
    }
        
    
// -- Recorremos los ficheros del array -- //
    
function Muestra()
    {
            
$x 0;
            if (
$this->debug)
                echo 
"<br><b>Total ficheros:</b> "$this->pos;
            foreach(
$this->ficheros as $actual)
                {
                if (
$this->debug)
                    echo 
"<br>Fichero actual: $actual";
                
$this->mostrarTemplate($actual,$x);
                
$x++;
                } 
    }    
    
    
// -- Funcion que muestra un template -- //
    
function mostrarTemplate($file,$pos)
    {
        if (
$this->debug)
            echo 
"<br>Posicion: $pos";

        if (!
$this->cache)
            
$fichSalida $this->TrataFichero($this->tpl_dir.$file);
        else
            
$fichSalida implode(""file($this->cache_dir.$file));

    if (isset(
$this->variables[$pos]))
            if (
is_array($this->variables[$pos]))
                
extract($this->variables[$pos]);
        eval(
"?>".$fichSalida."<?");

    }

    
// -- Tratamos el fichero -- //
    
function TrataFichero($fichero)//----------------------------------------------------------------TRATAFICHERO
    
{
        
$impFichero implode ("",file($fichero));
        
$impFichero str_replace($this->ini,"<?=",$impFichero);
        
$impFichero str_replace($this->fin,"?>",$impFichero);
        if (
$this->debug)
            
highlight_string($impFichero);
        return 
$impFichero;
    }
    

}
Se supone q es una clase para usar templates en tus sitios web.

Un saludo.
__________________
SymbianForever
SymbianForever.com, todo sobre y para tu symbian
aNieto2K | Themes para WordPress
De todo un poco
  #2 (permalink)  
Antiguo 19/06/2005, 19:16
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
mm Conoces "NokTemplate"? .. Es otro motor de templates (en castellano) muy básico (también con soporte de control de "caché") ..

En el caso del código que propones parece que usas array's para hacer la sustitución de las "variables" del template con sus valores .. En el caso de "Nok Template" (y del mayoría de sistemas así) lo hacen usando expresiones regulares (compatibles Perl mejor todavía) por un motivo principal de rendimiento (según dicen .. podrías hacer una comparativa entre el sistema tuyo propuesto y "Nok Template" como ejemplo de ambas técnicas).

Por si quieres hechar un vistazo a NokTemplate:
http://www.jpw.com.ar/index.php?lugar=noktpl

Otra cosa a mejorar en tu sistema propuesto sería el tratamiento de "bloques" o "zonas repetitivas"... es decir .. el "como" tratar un problema tan común al trabajar con plantillas de tener por ejemplo que hacer una zona que se repita vía bucle (ejemplo: presentar un listado de resultados de datos que salen de una consulta SQL .. que sabes que va a ser "dinámico" total en función de sus resultados).

Un saludo,
  #3 (permalink)  
Antiguo 20/06/2005, 01:26
 
Fecha de Ingreso: diciembre-2003
Mensajes: 218
Antigüedad: 20 años, 4 meses
Puntos: 0
Muchas gracias por echarle un vistazo, la verdad es q he estado trabajando con el y creo q ha mejorado algo, a ver si puedo colgarlo cuando llegue a casa.

El tema de los bloques me lleva de cu** ya q no encuentro una forma limpia de hacerlo. Consigo q me repita X veces lo mismo, no los datos q he ido Asignando ....

Un saludo.
__________________
SymbianForever
SymbianForever.com, todo sobre y para tu symbian
aNieto2K | Themes para WordPress
De todo un poco
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:46.