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

Clase para templates

Estas en el tema de Clase para templates en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Buenos días, Estuve revisando el foro a ver si encontraba solución al problema que tengo y no encontre aunque se muy bien que tipo de ...
  #1 (permalink)  
Antiguo 23/02/2010, 09:16
Avatar de mackiechan  
Fecha de Ingreso: junio-2009
Ubicación: Maracay, Venezuela
Mensajes: 51
Antigüedad: 14 años, 10 meses
Puntos: 12
Clase para templates

Buenos días,

Estuve revisando el foro a ver si encontraba solución al problema que tengo y no encontre aunque se muy bien que tipo de error me esta dando o el porqué, asi que tuve que crear el tema :/

El asunto es que conseguí una clase llamada clase_plantilla.php:

Código PHP:
<?php
class Plantilla{
        function 
plantilla($template_file,$tema){
                
$this->html_plantilla RAIZ_.'/temas/'.$tema.'/'$template_file '.html';
        }
        
        function 
asigna_variables($vars){
                
$this->vars= (empty($this->vars)) ? $vars $this->vars $vars;
        }
        
        function 
muestra(){
                if (!(
$this->fd = @fopen($this->html_plantilla'r'))) {
                        
sostenedor_error('error al abrir la plantilla ' $this->html_plantilla);
                } else{
                        
$this->template_file fread($this->fdfilesize($this->html_plantilla));
                        
fclose($this->fd);
                        
$this->mihtml $this->template_file;
                        
$this->mihtml str_replace ("'""\'"$this->mihtml);
                        
$this->mihtml preg_replace('#\{([a-z0-9\-_]*?)\}#is'"' . $\\1 . '"$this->mihtml);
                        
reset ($this->vars);
                        while (list(
$key$val) = each($this->vars)) {
                                $
$key $val;
                        }
                        eval(
"\$this->mihtml = '$this->mihtml';");
                        
reset ($this->vars);
                        while (list(
$key$val) = each($this->vars)) {
                                unset($
$key);
                        }
                        
$this->mihtml=str_replace ("\'""'"$this->mihtml);
                        echo 
$this->mihtml;
                }
        }
}
?>

La cual uso en:

Código PHP:
<?php

//al Pasar como parametro holaMundo, asumimos que en la carpeta plantillas existe un archivo de nombre holaMundo.tpl
    
$Contenido=new Plantilla('index',$tema);
    
$Contenido->asigna_variables(array(
            
'titulo' => $titulo,
        
'raiz'   => RAIZ_,
        
'login' => include(RAIZ_.'/modulos/login.php')
    ));

//$ContenidoString contiene nuestra plantilla, ya con las variables asignadas, fácil no?
    
$ContenidoString $Contenido->muestra();
    echo 
$ContenidoString;
?>
Y mi archivo index.html sería:

Código:
<html>
<head>
<title>{titulo}</title>
<script language="JavaScript" type="text/javascript" src="{raiz}/libreria/js/jquery-1.4.1.min.js"></script>
<link href="{raiz}/temas/predeterminado/css/base.css" rel="stylesheet" type="text/css" />
</head>
<body>


<div id="login">

{login}


</div>


</body>
</html>

El llamado al {titulo} de la pagina y a la direccion {raiz} funcionan perfecto, el problema ocurre cuando quiero hacer un include al llamar mi modulo login.php, la inclusión se efectua y muestra mi modulo, y funciona perfecto todo mi php, pero la ubicación de este ignora totalmente la que le asigne, es decir yo le digo que aparezca en la capa <div id=login>{login}</div> y en la pagina final al ejecutar mi index.php me sale todo el modulo de login encima de la etiqueta <html>.

Sera que alguien tiene idea de que ocurre? Y_Y
  #2 (permalink)  
Antiguo 23/02/2010, 09:24
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 14 años, 6 meses
Puntos: 334
Respuesta: Clase para templates

acabo de postear la version mejorada de esa classe abajo
http://www.forosdelweb.com/f68/aport...on-php-780890/
__________________
More about me...
~ @rhyudek1
~ Github
  #3 (permalink)  
Antiguo 23/02/2010, 10:38
Avatar de mackiechan  
Fecha de Ingreso: junio-2009
Ubicación: Maracay, Venezuela
Mensajes: 51
Antigüedad: 14 años, 10 meses
Puntos: 12
Respuesta: Clase para templates

Hola, ya coloque la nueva clase que publicaste, esta mucho mas completa, pero lamentablemente me sigue dando el mismo problema al hacer el include.

A continuación este es el html final generado:

Código HTML:
 

<form name="form1" method="post" action="index.php">
  <table width="287" border="1">
    <tr>
      <td width="91">Usuario</td>
      <td width="180">
        <input name="usuario" type="text" id="usuario" size="30" maxlength="1000">
      </td>
    </tr>

    <tr>

      <td>password</td>
      <td><input name="password" type="password" id="password" size="30" maxlength="1000"></td>
    </tr>
    <tr>
      <td colspan="2">
      <div align="center">
        <input type="submit" name="button" id="button" value="Login"></div>

      </td>

    </tr>
  </table>
</form>


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  <html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>CMS version 1.0</title>
<script language="JavaScript" type="text/javascript" src="C:/wamp/www/cms/libreria/js/jquery-1.4.1.min.js"></script>

<link href="C:/wamp/www/cms/temas/predeterminado/css/base.css" rel="stylesheet" type="text/css" />
</head>
<body>


<div id="login">

1

</div>


</body>
</html> 
El "1" que aparece es el sitio donde esta la etiqueta {login} la cual es sustituida por este "1" y el contenido que en este caso es el formulario lo envia arriba del html x_x.
  #4 (permalink)  
Antiguo 23/02/2010, 10:46
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 14 años, 6 meses
Puntos: 334
Respuesta: Clase para templates

eso es porque tienes salidas de texto en tu php..
todos los echo que agas se imprimiran sobre el template..
solo basta con asignarlos a una variable

echo "test";
a
$variable = "test";
entonces tomas esa variable y la entregas en assign_data en ves de hacer un include :)

saludos!
__________________
More about me...
~ @rhyudek1
~ Github
  #5 (permalink)  
Antiguo 23/02/2010, 12:19
Avatar de mackiechan  
Fecha de Ingreso: junio-2009
Ubicación: Maracay, Venezuela
Mensajes: 51
Antigüedad: 14 años, 10 meses
Puntos: 12
Respuesta: Clase para templates

C*** me siento estupido xD

Bueno intente lo que me dices pero al hacer el include en una variable pasa lo mismo, no muestra el uno, pero si muestra el contenido sobre el html y lo peor de todo es que incluso cuando no llamo a la variable en el array, la imprime! ToT

Código PHP:
<?php
$template 
= new Template(RAIZ_.'/temas/'.$tema.'/index.html'); // ubicacion del template
$variable=include(RAIZ_./modulos/login.php);


$template->assign_data(array(

    
// asigno las variables por medio de un array
    
"raiz"=>RAIZ_
    
"titulo"=>$titulo
    
"login" => "..."

)); 


echo 
$template->return_data(); // imprimo el template ya procesado


?>
  #6 (permalink)  
Antiguo 23/02/2010, 12:53
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 14 años, 6 meses
Puntos: 334
Respuesta: Clase para templates

mmm
podrias poner el codigo de login.php ?
__________________
More about me...
~ @rhyudek1
~ Github
  #7 (permalink)  
Antiguo 23/02/2010, 15:23
Avatar de mackiechan  
Fecha de Ingreso: junio-2009
Ubicación: Maracay, Venezuela
Mensajes: 51
Antigüedad: 14 años, 10 meses
Puntos: 12
Respuesta: Clase para templates

No lo tengo a la mano porque me fui de la oficina, pero probe eso y le quite todo el contenido php al archivo y deje nada mas el html y sigue pasando lo mismo, y probe otros archivos y el problema es con el comando include especificamente :s
  #8 (permalink)  
Antiguo 23/02/2010, 15:32
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 14 años, 6 meses
Puntos: 334
Respuesta: Clase para templates

es por que tienes salidas de texto en ese archivo
asigna todas las salidas html a una variable
como te habia dicho antes
__________________
More about me...
~ @rhyudek1
~ Github
  #9 (permalink)  
Antiguo 23/02/2010, 16:46
Avatar de mackiechan  
Fecha de Ingreso: junio-2009
Ubicación: Maracay, Venezuela
Mensajes: 51
Antigüedad: 14 años, 10 meses
Puntos: 12
Respuesta: Clase para templates

ah ok el html es una salida de texto tambien xDDDDDDDDDDDDDDDDDDDDDDDDDD eso fue muy duuuh bueno mañana mismo lo pruebo y te aviso, muchas gracias compa.
  #10 (permalink)  
Antiguo 24/02/2010, 06:09
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 14 años, 6 meses
Puntos: 334
Respuesta: Clase para templates

actualize la classe por si quieres verla ahora tiene un nuevo método para que puedas hacer mas fácil eso que necesitas =)
saludos!
__________________
More about me...
~ @rhyudek1
~ Github
  #11 (permalink)  
Antiguo 24/02/2010, 08:19
Avatar de mackiechan  
Fecha de Ingreso: junio-2009
Ubicación: Maracay, Venezuela
Mensajes: 51
Antigüedad: 14 años, 10 meses
Puntos: 12
Respuesta: Clase para templates

Ooook ya la revise ._. creo que la implementare, por lo que entiendo ya no es necesario meter el html en una variuable cierto?

Igualmente muchas gracias por toda tu ayuda y disculpa la molestía jeje de verdad que habia olvidado por completo que poner el html solo era generar salida de texto xD pero funciono a la perfeccion apenas lo encerre en una variable ! muchisimas gracias de nuevo.
  #12 (permalink)  
Antiguo 24/02/2010, 09:03
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 14 años, 6 meses
Puntos: 334
Respuesta: Clase para templates

no hay problema.. seguiré actualizando la classe con nuevos métodos.. para q la vallas viendo de ves en cuando.

saludos!
__________________
More about me...
~ @rhyudek1
~ Github

Etiquetas: clase, 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:16.