Foros del Web » Programando para Internet » PHP »

Duda con la parte de la vista

Estas en el tema de Duda con la parte de la vista en el foro de PHP en Foros del Web. ¡Hola a todos! He estado desarrollando un pequeño script en POO, pero me encuentro con una serie de problemas a la hora de mostrar los ...
  #1 (permalink)  
Antiguo 17/08/2010, 07:58
 
Fecha de Ingreso: julio-2010
Mensajes: 16
Antigüedad: 13 años, 9 meses
Puntos: 0
Duda con la parte de la vista

¡Hola a todos!

He estado desarrollando un pequeño script en POO, pero me encuentro con una serie de problemas a la hora de mostrar los resultados en la parte de la vista. Antes de nada, os dejo un ejemplo de cómo tengo programado y organizado todo:

/class/class_user.php
Código PHP:
class users {
//vars

      
function __construct() {
           
//constructor
      
}

      function 
infoUsers($id null) {
           
//query
           
while($row $this->db->getResult($query)) {
                 
$this->arrayuser[$row['ID']] = array('ID' => $row['ID'],
                                                      
'name' => $row['name']);
           }
      return 
$this->arrayuser;
      }

Como veis, la función infoUsers retorna un array multidimensional con todos los datos del usuario con esa ID.

Vamos con el index.php, que une la clase con el template:

index.php
Código PHP:
require_once(dirname(__FILE__).'/class/class_user.php');
require_once(
dirname(__FILE__).'/template/user.tpl'); 
Y vamos a ver el template, donde tengo el 'problema':

user.tpl
Código PHP:
<?php
     $users 
= new users();
     
$users->infoUsers($id);
     foreach(
$users->arrayuser as $users):
?>
<div class="name"><?php echo $users[name]; ?></div>
<div class="ID"><?php echo $users[ID]; ?></div>
<?php endforeach; ?>
Bien, funciona todo bien, pero creo que no debería haber tanto código PHP en los templates. Especialmente las variables que crean el objeto o que llaman a la funcion:

user.tpl
Código PHP:
<?php foreach($users->arrayuser as $users): ?>
<div class="name"><?php echo $users[name]; ?></div>
<div class="ID"><?php echo $users[ID]; ?></div>
<?php endforeach; ?>
Mucho mejor así :) El problema es que creo que no estoy aplicando bien el sistema MVC ¿verdad? ¿dónde tendría que crear los objetos y llamar a las funciones para que no estuviese en los templates?

Y otra duda más, con este ejemplo:

user.tpl
Código PHP:
<?php
     $users 
= new users();
     
$users->infoUsers(5);
     foreach(
$users->arrayuser as $users):
?>
<div class="name"><?php echo $users[name]; ?></div>
<div class="ID"><?php echo $users[ID]; ?></div>
<?php endforeach; ?>
<?php
      $users
->infoUsers(6);
      foreach(
$users->arrayuser as $users):
 
?>
 <div class="name"><?php echo $users[name]; ?></div>
 <div class="ID"><?php echo $users[ID]; ?></div>
 <?php endforeach; ?>
Este ejemplo no funciona. No puedo primero llamar a la función declarando $id=5, y luego declarando $id=6 en un mismo archivo, así que tengo que crear de nuevo el objeto, pero con otro nombre:

Código PHP:
 <?php
      $users 
= new users();
      
$users->infoUsers(5);
      foreach(
$users->arrayuser as $users):
 
?>
 <div class="name"><?php echo $users[name]; ?></div>
 <div class="ID"><?php echo $users[ID]; ?></div>
 <?php endforeach; ?>
<?php
     $users2 
= new users();
       
$users2->infoUsers(6);
       foreach(
$users2->arrayuser as $users):
  
?>
  <div class="name"><?php echo $users[name]; ?></div>
  <div class="ID"><?php echo $users[ID]; ?></div>
  <?php endforeach; ?>
En fin... dudas de novato . Agradecería mucho vuestra ayuda para aprender a usar bien el MVC.
  #2 (permalink)  
Antiguo 17/08/2010, 09:16
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Duda con la parte de la vista

De hecho justamente lo que te falta es esa parte del controlador, que es el encargado de consultar el modelo (clase user) y pasarlo a la vista, tu estas pasando directamente el modelo a la vista, te recomiendo leer este articulo, no es en PHP, pero es muy claro en los conceptos:

http://weblog.jamisbuck.org/2006/10/...ller-fat-model

Respecto a tu segunda duda, sería bueno que pusieras todo el código de tu clase para poder ver porque no funciona la segunda vez.

Saludos.
  #3 (permalink)  
Antiguo 17/08/2010, 10:58
 
Fecha de Ingreso: julio-2010
Mensajes: 16
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Duda con la parte de la vista

Vale, gracias :) A ver si lo he entendido...

MODELO -> /class/class_user.php
Código PHP:
class users {
//vars

      
function __construct() {
           
//constructor
      
}

      function 
infoUsers($id null) {
           
//query
           
while($row $this->db->getResult($query)) {
                 
$this->arrayuser[$row['ID']] = array('ID' => $row['ID'],
                                                      
'name' => $row['name']);
           }
      return 
$this->arrayuser;
      }

VISTA -> /templates/user.tpl
Código PHP:
<div class="name"><?php echo $userinfo[name]; ?></div>
 <div class="ID"><?php echo $userinfo[ID]; ?></div>
CONTROLADOR -> /index.php
Código PHP:
require_once(dirname(__FILE__).'/class/class_user.php');

$users = new users();
$users->infoUsers();
$userinfo $users->arrayuser;

foreach(
$userinfo as $userinfo) {
     include(
dirname(__FILE__).'/template/user.tpl');

¿Bien?

Última edición por Everu; 17/08/2010 a las 13:44

Etiquetas: vistas
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 21:26.