Foros del Web » Programando para Internet » PHP »

Sistema Template

Estas en el tema de Sistema Template en el foro de PHP en Foros del Web. Saludos... estoy tratando de hacer un sistema de Templates y estoy atorado con algo; pongo la función y explico lo que intento hacer y no ...
  #1 (permalink)  
Antiguo 07/12/2011, 00:54
Avatar de LanbreGroteo  
Fecha de Ingreso: agosto-2009
Ubicación: $Mx->['Veracruz']
Mensajes: 69
Antigüedad: 14 años, 9 meses
Puntos: 1
Pregunta Sistema Template

Saludos...

estoy tratando de hacer un sistema de Templates y estoy atorado con algo; pongo la función y explico lo que intento hacer y no me sale:
Código PHP:
public function _parse_include()
    {
        
$this->content file_get_contents('templates/default/index.tpl');
                        
        if(
strchr($this->content'#include')) {
                        
            
$object_pieces explode('#include {'$this->content);            
            
            foreach(
$object_pieces as $pieces):
                
$file explode('};'$pieces);
                
$parsed_file array_shift($file);
            endforeach;
            
            if(
file_exists(self::$_path.$parsed_file)):
                include(
self::$_path.$parsed_file);
            else:
                
Exclusion::make("Canst not include the file: {$parsed_file}"303);
            endif;
        }        
    } 
Código HTML:
Ver original
  1. <!DOCTYPE>
  2. <meta http-equiv="Content-Type" charset="utf-8" />
  3. <title>{TITULO}</title>
  4. </head>
  5. #include {prueba.tpl};
  6. </body>
  7. </html>

Hasta allí, trabaja todo perfecto pero si pongo otra línea de #include, sólo me incluye el último archivo y el primero lo ignora.

¿Cómo podría hacer que por cada línea #include que tenga el archivo, me los incluya todos y no sólo el último archivo?

De antemano, ¡gracias!
__________________
Et credo in Serpentem, mysterium mysteriorum. In nomen eius Baphomet
  #2 (permalink)  
Antiguo 07/12/2011, 02:47
Avatar de Eleazan  
Fecha de Ingreso: abril-2008
Ubicación: Ibiza
Mensajes: 1.879
Antigüedad: 16 años
Puntos: 326
Respuesta: Sistema Template

En vez de usar dos explodes, podrías usar un preg_match_all, no?

Código PHP:
public function _parse_include() 
    { 
        
$this->content file_get_contents('templates/default/index.tpl'); 
                         
        if(
strchr($this->content'#include')) { 
                         
           
preg_match_all('/#include {(.*?)};/',   $this->content$object_pieces);        
             
           foreach( 
$object_pieces[1] as $piece) {
                    if(
file_exists(self::$_path.$piece)): 
                       include(
self::$_path.$piece); 
                    else: 
                         
Exclusion::make("Canst not include the file: {$piece}"303); 
                    endif; 
           }
              
             
           
        }         
    } 

Intento explicarme:

preg_match_all creará, en $object_pieces, algo así:
Código:
array (
  0 => 
  array (
    0 => '#include {prueba.tpl};',
    1 => '#include {xD.tpl};',
  ),
  1 => 
  array (
    0 => 'prueba.tpl',
    1 => 'xD.tpl',
  ),
)
Por ejemplo (habiendo puesto otro include). Asi pues, el foreach lo haces del $object_pieces[1], q es donde están los resultados... y luego vas haciendo los includes (pq guardarlo en una variable, y no añadirlos directamente?).

Creo q es algo así lo q buscas :)
__________________
>> Eleazan's Source
>> @Eleazan
  #3 (permalink)  
Antiguo 07/12/2011, 03:05
Avatar de LanbreGroteo  
Fecha de Ingreso: agosto-2009
Ubicación: $Mx->['Veracruz']
Mensajes: 69
Antigüedad: 14 años, 9 meses
Puntos: 1
Respuesta: Sistema Template

Cita:
Iniciado por Eleazan Ver Mensaje
En vez de usar dos explodes, podrías usar un preg_match_all, no?

Código PHP:
public function _parse_include() 
    { 
        
$this->content file_get_contents('templates/default/index.tpl'); 
                         
        if(
strchr($this->content'#include')) { 
                         
           
preg_match_all('/#include {(.*?)};/',   $this->content$object_pieces);        
             
           foreach( 
$object_pieces[1] as $piece) {
                    if(
file_exists(self::$_path.$piece)): 
                       include(
self::$_path.$piece); 
                    else: 
                         
Exclusion::make("Canst not include the file: {$piece}"303); 
                    endif; 
           }
              
             
           
        }         
    } 

Creo q es algo así lo q buscas :)
Al rato lo pruebo y os comento.
¡Muchas gracias!
__________________
Et credo in Serpentem, mysterium mysteriorum. In nomen eius Baphomet

Etiquetas: html, sistema, template
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 15:40.