Foros del Web » Programando para Internet » PHP »

Templates

Estas en el tema de Templates en el foro de PHP en Foros del Web. Comence a trabajar en un sitio basado en plantillas, para el caso me incline por EasyTemplate, es un template muy simple solo cuenta con 3 ...
  #1 (permalink)  
Antiguo 24/04/2003, 11:03
Avatar de ||Dj||  
Fecha de Ingreso: enero-2002
Mensajes: 2.349
Antigüedad: 22 años, 3 meses
Puntos: 1
Templates

Comence a trabajar en un sitio basado en plantillas, para el caso me incline por EasyTemplate, es un template muy simple solo cuenta con 3 funciones, el constructor de la clase, la que asigna un valor a la etiqueta de la plantilla y la que la imprime.

Ahora el problema que me surgio es que necesito añadirle una funcion que despliegue los resultados de un query, estuve mirando algunas otras (Fasttemplate y la de Nok) como para ver si podia hacerlo pero por ahora escapa a mis posibilidades .

Necesitaria si es posible que me den algunas ideas sobre esto .
Muchas gracias de antemano .

Les pasteo el codigo del template:

Código PHP:
class EasyTemplate
{
    
// Public variable ---------------------------------------------------------
    
var $error "";                // Last error message will be stored here
    
    // Private variables -------------------------------------------------------
    
var $tags = array();            // The tag values pairs, as defined by assign()
    
var $template_file "";        // The template file
    
    /*
     *      void EasyTemplate(string template_file)
     *      Constructor - assign template_file to the class
     */
    
function EasyTemplate($template_file)
    {
        
// Basic check whether the template file exists or not, 
        // unfortunately, we can't return(false) in a constructor
        
if(!file_exists($template_file))
        {
            
$this->error "The template file $template_file does not exist.";
        }
        
        
// Assign template file
        
$this->template_file $template_file;
    }
    
    
/*
     *      bool assign(string tag, string value)
     *      Assign a value for template tag
     *      Sets $this->error and returns false on error, returns true on success
     */
    
function assign($tag$value)
    {
        
// If the supplied tag name is empty, bail out
        
if(empty($tag))
        {
            
$this->error "Tag name is empty";
            return(
false);
        }
        
        
// Assign value to tag
        
$this->tags[$tag] = $value;
        
        return(
true);
    }
        
    
/*
     *      mixed easy_parse()
     *      Return the parsed template as string
     *      Sets $this->error and returns false on error, or returns the parsed template on success
     */
    
function easy_parse()
    {
        
// Read in template file, suppress error messages
        
$contents = @implode("", (@file($this->template_file)));
        
        
// Loop through all assigned tag-value pairs
        
while(list($key$value) = each($this->tags))
        {
            
// Construct the template tag name 
            
$tag '{'.$key.'}';
            
            
// Is there such a tag in the template?
            
if(!strstr($contents$tag))
            {
                
$this->error "Tag $tag not found in template ".$this->template_file.".";
                return(
false);
            }
            
            
// Replace the template tag with the respective value
            
$contents str_replace($tag$value$contents);
        }
    
        
// Return the parsed template    
        
return($contents);    
    }
    
    
/*
     *      bool easy_print()
     *      Parse and print the current template
     *      Sets $this->error and returns false on error, returns true on success
     */
    
function easy_print()
    {
        
// Parse the template
        
$ret $this->easy_parse();
        
        
// Error found?
        
if($ret == false)
        {
            return(
false);
        }
 
        
// Output the parsed template       
        
print($ret);
        
        return(
true);
    }
}


    function 
parse($ReturnVar$FileTags)
    {
        
$append false;
        
$this->LAST $ReturnVar;
        
$this->HANDLE[$ReturnVar] = 1;

        if (
gettype($FileTags) == "array")
        {
            unset(
$this->$ReturnVar);    // Clear any previous data

            
while ( list ( $key $val ) = each $FileTags ) )
            {
                if ( (!isset(
$this->$val)) || (empty($this->$val)) )
                {
                    
$this->LOADED["$val"] = 1;
                    if(isset(
$this->DYNAMIC["$val"]))
                    {
                        
$this->parse_dynamic($val,$ReturnVar);
                    }
                    else
                    {
                        
$fileName $this->FILELIST["$val"];
                        
$this->$val $this->get_template($fileName);
                    }
                }

                
//    Array context implies overwrite

                
$this->$ReturnVar $this->parse_template($this->$val,$this->PARSEVARS);

                
//    For recursive calls.

                
$this->assign( array( $ReturnVar => $this->$ReturnVar ) );

            }
        }    
// end if FileTags is array()
        
else
        {
            
// FileTags is not an array

            
$val $FileTags;

            if( (
substr($val,0,1)) == '.' )
            {
                
// Append this template to a previous ReturnVar

                
$append true;
                
$val substr($val,1);
            }

            if ( (!isset(
$this->$val)) || (empty($this->$val)) )
            {
                    
$this->LOADED["$val"] = 1;
                    if(isset(
$this->DYNAMIC["$val"]))
                    {
                        
$this->parse_dynamic($val,$ReturnVar);
                    }
                    else
                    {
                        
$fileName $this->FILELIST["$val"];
                        
$this->$val $this->get_template($fileName);
                    }
            }

            if(
$append)
            {
                
$this->$ReturnVar .= $this->parse_template($this->$val,$this->PARSEVARS);
            }
            else
            {
                
$this->$ReturnVar $this->parse_template($this->$val,$this->PARSEVARS);
            }

            
//    For recursive calls.

            
$this->assign(array( $ReturnVar => $this->$ReturnVar) );

        }
        return;
    }    
//    End parse() 
  #2 (permalink)  
Antiguo 24/04/2003, 11:32
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Y esas "easyTemplate" .. no tienen ninguna documentación con algun "ejemplito"?

Sin documentación .. es un poco complicado ver como trabajar la classe. Por ejemplo hay q ir mirando a ver como indentifica {VARIABLES} en la template o si usa bloques .. como se definen ..

Yo uso las templates del amigo Nok (NokTemplates) .. bien faciles de manejar y en castellano. Con documentación y ejemplos (en zonaphp.com puedes verlo)

Un saludo,

pd: .. voy a ver si tengo un ratito y saco algo ..
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #3 (permalink)  
Antiguo 24/04/2003, 11:47
Avatar de ||Dj||  
Fecha de Ingreso: enero-2002
Mensajes: 2.349
Antigüedad: 22 años, 3 meses
Puntos: 1
Gracias por contestar Cluster

Verdaderamente casi no he encontrado nada, ni siquiera una url donde ver ejemplos sobre como implementarlas, el codigo es de un libro de Ratschiller donde la sacan "al vuelo", como una alternativa mucho mas simple a Fasttemplate.

Saludos.
  #4 (permalink)  
Antiguo 24/04/2003, 12:17
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Pues .. usa cualquier motor de templates que tenga documentación ...

Estube probando un ratito por encima y hay cosas que a simple vista no se "sacan" .. así q veo q es una perdida de tiempo dedicarle mas tiempo a esa classe..

Mirate la classe de Nok .. es muy sencilla y está documentada. Tienes hasta soporte para "caché" de páginas .. Cosa que si te complica puedes no usarlo (es opcional) ..

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #5 (permalink)  
Antiguo 24/04/2003, 20:41
Avatar de ||Dj||  
Fecha de Ingreso: enero-2002
Mensajes: 2.349
Antigüedad: 22 años, 3 meses
Puntos: 1
Gracias de todos modos.
Voy a seguir intentando.
  #6 (permalink)  
Antiguo 24/04/2003, 22:26
Nok
 
Fecha de Ingreso: abril-2001
Mensajes: 302
Antigüedad: 23 años
Puntos: 0
Hola...

Bueno haber si te puedo ayudar un poco...

Por lo que vi y entendi, el codigo que posteaste es de la clase EasyTemplate y despues una funcion de FastTemplate u otra.

El problema esta en que EasyTemplate no soporta lo que queres hacer, o por lo menos en un principio.

Tienes varias opciones:

1- Agregarle metodos para que lo haga.
2- Tratar de simular este comportamiento.
3- Cambiarte a otra clase que si lo soporte.

Opcion 1

Lo que deberias hacer es que la clase permita que a las variables se les pueda agregar (concatenar) mas contenido. O sea, si VAR1 primero le asigno "Hola" luego le pueda asignar " Como estas", pero tendrias que reescribir parte de la clase. Como experiencia es interesante.

Opcion 2

Para simular este funcionamiento tendrias que trabajar con 2 o mas objetos EasyTemplates... o sea, uno para la pagina principal y otro (por ejemplo una tabla). Deberia ser algo asi:

Código PHP:
//Asumiendo que tienes todos los templates ya armados.
$miPagina =  new EasyTemplate('home.html');
$miFila =  new EasyTemplate('fila.html');
$miTabla =  new EasyTemplate('tabla.html');

//asigno variables
$miPagina->assign('titulo''Una prueba');

// iniciamos iteracion
foreach( algo ) {
    
$miFila->assign('nombre''pepito');
    
$miFila->assign('apellido''gomez');
    
$miFila->assign('legajo''12345');

    
$unaFila $miFila->easy_parse();

    
// aqui tendrias que darle la posibilidad de que se pueda
    // agregar contenido a las variables, Var = Var . "algo"
    
$miTabla->assign('FILA'$unaFila);
}
//luego finalizamos la tabla
$miPagina->assign('contenido'$miTabla->easy_parse());

// Y luego imprimimos
miPagina->easy_print(); 
Este ejemplo, no esta probado pero algo mas o menos asi deberia ser.

Opcion 3

aunque estoy siendo algo parcial en este comentario, te recomendaria que busques otra clase que te ahorre todo ese codigo o adaptacion. Por ejemplo NokTemplate

Algunas Observaciones sobre EasyTemplate:

- Por lo que veo del codigo, esta pensada para php3 y mas si es de un libro de Tobias.
- Otra cosa en contra, es el metodo que utiliza para "parsear" el strstr es muuuuyy lento.

Bueno espero haberte ayudado un poco. Cualquier duda no dudes en seguir preguntando.

saludos
Nok
  #7 (permalink)  
Antiguo 25/04/2003, 03:01
Avatar de ||Dj||  
Fecha de Ingreso: enero-2002
Mensajes: 2.349
Antigüedad: 22 años, 3 meses
Puntos: 1
Hola Nok, verdaderamente aprecio mucho tu ayuda y has sido muy claro.

Me gustaria modificar esta clase para lograr lo que busco justamente por lo que tu dices, el hecho de la experiencia que puede aportarme.
De todas formas como decia antes creo que escapa a mis posibilidades, pero como no es de urgencia pienso que lo puedo ir viendo de a poco.

PD: Ya habia probado tu template con anterioridad y me funciono 10 puntos.

Un saludo y gracias de nuevo
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:29.