Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

Sistema de templates que soporte PHP??

Estas en el tema de Sistema de templates que soporte PHP?? en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Ahora si formulo bien la pregunta, Aca esta el sistema de templates tiene una funcion de include y todo, pero a la hora que hace ...
  #1 (permalink)  
Antiguo 29/10/2006, 15:40
Avatar de renzoster  
Fecha de Ingreso: mayo-2006
Ubicación: Lima
Mensajes: 63
Antigüedad: 17 años, 11 meses
Puntos: 0
Sistema de templates que soporte PHP??

Ahora si formulo bien la pregunta, Aca esta el sistema de templates tiene una funcion de include y todo, pero a la hora que hace el include los elementos php, javascript son ignorados como hago que no sea asi??

Código PHP:
<?
class rSkin {
    
# * Cargamos las plantillas deseadas y las almacenamos
    
function cargar($plantillas) {
        foreach(
$plantillas as $plantilla_nom => $plantilla_arc) {
            
$this->plantillas[$plantilla_nom] = $plantilla_arc;
        }
    }
    
# * Almacenamos las variables que no están dentro de bloques
    
function variable($variable,$valor) {
        
$this->variables[$variable] = $valor ;
    }

    function 
variables($variables) {
        foreach(
$variables as $variable => $valor) {
            
$this->variables[$variable] = $valor ;
        }
    }
    
    
# * Funcion para asignar includes
    
function asignar_include($inc_var$archivo){
        if (
file_exists($archivo)){
            
$this->includes[$inc_var] = $archivo;
        }
    }
    
    
# * Almacenamos las variables en bloques
    
function variables_bloque($bloques,$variables = array()) {
        
# Si $bloques es el bloque principal se le agregan las variables junto con una nueva iteración
        
if(!strpos($bloques,'.')) {
            
$this->variables_bloque[$bloques][] = $variables ;
        }
        else {
            
# Si existen bloques anidados, se agregan las variables de la siguiente forma:
            # $this->variables_bloque['bloque1'][num_iteraciones1]['bloque2'][num_iteraciones2]...['ultimo_bloque'][] = $variables
            
$bloques explode('.',$bloques) ;
            
$total count($bloques) - ;
            
$pre_variable '$this->variables_bloque' ;
            for(
$i $i $total $i++) {
                
$pre_variable .= '[\''.$bloques[$i].'\']' ;
                
# Se obtienen las iteraciones de cada bloque
                
eval('$num_iteraciones = count('.$pre_variable.') - 1 ;') ;
                
$pre_variable .= '['.$num_iteraciones.']' ;
            }
            eval(
$pre_variable.'[$bloques[$total]][] = $variables ;') ;
        }
    }
    
# * Construimos la variable $this->variables_bloque (para uso exclusivo en mostrar())
    # La variable queda como sigue: $this->variables_bloque['bloque1'][$i_bloque1]['bloque2'][$i_bloque2]...['variable']
    
function pre_variable($bloques,$variable '') {
        
# Eliminamos el último punto agregado
        
$bloques rtrim($bloques,'.') ;
        
$bloques explode('.',$bloques) ;
        
$total count($bloques) - ;
        
$pre_variable '$this->variables_bloque' ;
        for(
$i $i $total $i++) {
            
$pre_variable .= '[\''.$bloques[$i].'\'][$i_'.$bloques[$i].']' ;
        }
        
$pre_variable .= '[\''.$bloques[$total].'\']' ;
        if(
$variable) {
            
$pre_variable .= '[$i_'.$bloques[$total].'][\''.$variable.'\']' ;
        }
        return 
$pre_variable ;
    }
    
# * Procesamos la plantilla haciendo las sustituciones necesarias y devolviendo el resultado

    
function mostrar($plantilla_nom,$insertar 0) {
        
$resultado '' ;
        
#Cargamos todos los archivos
        
$contenido implode("", @file($this->plantillas[$plantilla_nom]));
        if (empty(
$contenido)){die ('<br><b>Template error:</b> The file is empty');}
        
#Reconocemos los includes
        
if(!empty($this->includes)){
            
reset($this->includes);
            while(list(
$inc_var$archivo) = each($this->includes)){
                
$contenido str_replace("<!-- INCLUDE " $inc_var " -->", @file_get_contents($archivo), $contenido);
            }
        }
        
#Termina includes
        
preg_match_all('#<!-- INCLUDE : ([a-zA-Z0-9\_\-\+\./]+?) -->#'$contenido$matches);
        foreach (
$matches[1] as $match => $file)
        {
            
$contenido str_replace("<!-- INCLUDE : " $file " -->", @file_get_contents($file), $contenido);
        }
        
# Reemplazar \ con \\ y ' con \' (para que no provoquen error al aplicar eval())
        
$contenido str_replace('\\','\\\\',$contenido) ;
        
$contenido str_replace('\'','\\\'',$contenido) ;
        
# Sustituimos las variables que no están dentro de bloques
        
$contenido preg_replace('/{#([\w_]+)}/','\'.(@file_get_contents($this->variables[\'$1\']) ? $this->variables[\'$1\'] : \'\').\'',$contenido) ;
        
$contenido preg_replace('/{([\w_]+)}/','\'.(isset($this->variables[\'$1\']) ? $this->variables[\'$1\'] : \'\').\'',$contenido) ;
        
# Sustituimos las variables que se encuentran dentro de bloques
        
preg_match_all('/{(([\w_]+\.)+)([\w_]+)}/U',$contenido,$a) ;
        
$total count($a[3]) ;
        for(
$i $i $total $i++) {
            
$pre_variable $this->pre_variable($a[1][$i],$a[3][$i]) ;
            
$pre_variable '\'.(isset('.$pre_variable.') ? '.$pre_variable.' : \'\').\'' ;
            
$contenido str_replace($a[0][$i],$pre_variable,$contenido) ;
        }
        
$lineas explode("\n",$contenido) ;
        
$total count($lineas) ;
        for(
$i $i $total $i++) {
            
# Esta variable servirá para identificar si existen bloques anidados
            # Ejemplo: 'bloque1.bloque2.bloque3. ... .bloque_final.'
            
static $bloques '' ;
            
$lineas[$i] = rtrim($lineas[$i]) ;
            if(
strpos($lineas[$i],'[blq ') !== false && preg_match('/\[blq ([\w_]+)\]/',$lineas[$i],$a)) {
                
# Se agrega el bloque actual a la variable $bloques
                
$bloques $bloques.$a[1].'.' ;
                
$pre_variable $this->pre_variable($bloques) ;
                
$lineas[$i] = '$total_'.$a[1].' = isset('.$pre_variable.') ? count('.$pre_variable.') : 0 ;'."\n" ;
                
$lineas[$i] .= 'for($i_'.$a[1].' = 0 ; $i_'.$a[1].' < $total_'.$a[1].' ; $i_'.$a[1].'++) {' ;
            }
            elseif(
strpos($lineas[$i],'[/blq ') !== false && preg_match('/\[\/blq ([\w_]+)\]/',$lineas[$i],$a)) {
                
$lineas[$i] = '}' ;
                
# Se quita el bloque actual a la variable $bloques
                
$bloques ereg_replace($a[1].'\.$','',$bloques) ;
            }
            else {
                
$lineas[$i] = '$resultado .= \''.$lineas[$i].'\'."\n" ;' ;
            }
        }
        eval(
implode("\n",$lineas)) ;
        
$resultado preg_replace('/\n\n+/','',$resultado) ;
        
# Si $insertar es 1 el resultado se devuelve para poder insertarlo en otra plantilla
        
if($insertar != 1) {
            echo 
$resultado ;
        }
        else {
            return 
$resultado ;
        }
    }
}
?>

Última edición por renzoster; 08/11/2006 a las 09:03
  #2 (permalink)  
Antiguo 29/10/2006, 19:55
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
No entendí nada ...

No sé a que te refieres a que "PHP soporte este sistema de templates"?

La classe la tienes ahí .. lo que se observa que te faltaría es un ejemplo de "uso". No sé de donde lo habrás sacado .. pero de donde lo sacastes debería acompañar su respectivo manual y/o ejemplos de uso.

En cualquir caso, con los comentarios del código que describen que hacen los métodos que ahí están .. alguien podría indicarte algún ejemplo de uso .. (Pero, esto de hacer "ingenería inversa" no es bueno").

Un Saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #3 (permalink)  
Antiguo 08/11/2006, 09:04
Avatar de renzoster  
Fecha de Ingreso: mayo-2006
Ubicación: Lima
Mensajes: 63
Antigüedad: 17 años, 11 meses
Puntos: 0
Alguien que me pueda ayudar, por favor? Gracias
  #4 (permalink)  
Antiguo 08/11/2006, 10:26
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 18 años, 11 meses
Puntos: 32
Una pregunta: ¿si yo tiro el motor de mi auto al foro, entero, alguien me puede decir por qué falla? No sé la marca ni el modelo, pero a veces hace "rrrroooon" cuando debería hacer "rum rum ruuuum" ... alguien que me pueda ayudar? Gracias.

PD: disculpen, es que no sé nada de mecánica...
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
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 11:14.