Foros del Web » Programando para Internet » PHP »

[AYUDA]clase de templates no pasa arrays.

Estas en el tema de [AYUDA]clase de templates no pasa arrays. en el foro de PHP en Foros del Web. Hola a todos, tengo un problema al pasar un array por la clase de templates. Esta es la clase: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código PHP: Ver original ...
  #1 (permalink)  
Antiguo 05/02/2012, 17:35
 
Fecha de Ingreso: septiembre-2011
Mensajes: 52
Antigüedad: 13 años, 2 meses
Puntos: 0
Exclamación [AYUDA]clase de templates no pasa arrays.

Hola a todos, tengo un problema al pasar un array por la clase de templates.

Esta es la clase:

Código PHP:
Ver original
  1. <?php
  2. class Plantilla{
  3.         function __construct($template_file){
  4.                 $this->tpl_file = 'plantillas/' . $template_file . '.tpl';
  5.         }
  6.        
  7.         function asigna_variables($vars){
  8.                 $this->vars= (empty($this->vars)) ? $vars : $this->vars . $vars;
  9.         }
  10.        
  11.         function muestra(){
  12.                 if (!($this->fd = @fopen($this->tpl_file, 'r'))) {
  13.                         sostenedor_error('error al abrir la plantilla ' . $this->tpl_file);
  14.                 } else{
  15.                         $this->template_file = fread($this->fd, filesize($this->tpl_file));
  16.                         fclose($this->fd);
  17.                         $this->mihtml = $this->template_file;
  18.                         $this->mihtml = str_replace ("'", "\'", $this->mihtml);
  19.                         $this->mihtml = preg_replace('#\{([a-z0-9\-_]*?)\}#is', "' . $\\1 . '", $this->mihtml);
  20.                         reset ($this->vars);
  21.                         while (list($key, $val) = each($this->vars)) {
  22.                                 $$key = $val;
  23.                         }
  24.                         eval("\$this->mihtml = '$this->mihtml';");
  25.                         reset ($this->vars);
  26.                         while (list($key, $val) = each($this->vars)) {
  27.                                 unset($$key);
  28.                         }
  29.                         $this->mihtml=str_replace ("\'", "'", $this->mihtml);
  30.                         echo $this->mihtml;
  31.                 }
  32.         }
  33. }
  34. ?>

Entonces, cuando asigno las variables a pasar al documento html, sería algo así :

Código PHP:
Ver original
  1. require('_clases/clase_plantilla.php');
  2. $profileTemplate=new Plantilla('profile');
  3. $profileTemplate->asigna_variables(array(
  4.                 "titulo" => "algo"
  5.             ));
  6. $ContenidoString = $profileTemplate->muestra();
  7. echo $ContenidoString;

Entonces, en el documento tpl:

Código HTML:
Ver original
  1. <!DOCTYPE html>
  2. <title>{titulo}</title>
  3. </head>
  4. </body>
  5. </html>

Lo de arriba imrpimiría "algo", ya que es el valor que le di a la variable

Pero, ¿que tal si quiero pasar arrays?, tal vez consultas de sql, como por ejemplo:

Código PHP:
Ver original
  1. mysql_connect('localhost', 'root', '');
  2. $_q=mysql_query("SELECT * FROM tabla WHERE id_usuario = 1");
  3. while($_query = mysql_fetch_array($_q)){
  4.   $_queryUser = $_query['user'];
  5. }
  6. require('_clases/clase_plantilla.php');
  7. $profileTemplate=new Plantilla('profile');
  8. $profileTemplate->asigna_variables(array(
  9.                 "nombres" => $_queryUser
  10.             ));
  11. $ContenidoString = $profileTemplate->muestra();
  12. echo $ContenidoString;

Pero en el documento TPL solo me sale un solo resultado, entonces necesito no solo pasar variables, sino ARRAYS, pero no sé como hacerlo.
¿Alguien me da una mano?
Gracias desde ya.
  #2 (permalink)  
Antiguo 05/02/2012, 18:42
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: [AYUDA]clase de templates no pasa arrays.

En primera no creo que tu clase de plantillas soporte arrays, se ve muy mal hecha.

Y en segundo término ni siquiera estás pasando un array pues esto está mal:
Código PHP:
// MAL
while($_query mysql_fetch_array($_q)){
  
// aqui se sobre escribe la variable una y otra vez
  
$_queryUser $_query['user']; 
}

// BIEN
$_queryUser = array();
while(
$_query mysql_fetch_array($_q)){
  
$_queryUser []= $_query['user']; 

__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
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 22:05.