Foros del Web » Programando para Internet » PHP »

Ayuda a la clase de vista MVC

Estas en el tema de Ayuda a la clase de vista MVC en el foro de PHP en Foros del Web. Hola foreros, Estoy desarrollando una clase para las vistas en el controlador, donde me tendria que pasar unas variables a la vista para poder añadirle ...
  #1 (permalink)  
Antiguo 14/07/2010, 14:22
Avatar de syntex  
Fecha de Ingreso: noviembre-2002
Ubicación: Cataluña
Mensajes: 978
Antigüedad: 21 años, 5 meses
Puntos: 4
Ayuda a la clase de vista MVC

Hola foreros,


Estoy desarrollando una clase para las vistas en el controlador, donde me tendria que pasar unas variables a la vista para poder añadirle valores.

CONTROLADOR

Código PHP:
<?php
/**
* Controller
**/
class Usuarios_controller{
    private 
$userid;
    private 
$user;
    public 
$texto_user_no;
      public function 
login$user ,$password) {
        require_once(
RUTA_models."portada/usuarios.php");
        require_once(
RUTA_models."portada/usuarios_model.php");
        require_once(
RUTA_lib."class_views.php");
        
$user = new Usuarios_model($_POST[user],$_POST[password]);
        
$userid $user->validateUser();
        
$view = new views();
        if(
$userid == ){
              
//******************************************
            // empty=FALSE;isset=TRUE
            
if ((empty($_POST[user]) or empty($_POST[password])) and isset($_POST[xs])){
                
ob_start();        
                  require_once(
RUTA_helpers."portada/portada.php");
                
$this->texto_user_no ob_get_clean();
            }
            
//******************************************
              
$view->view(RUTA_views."portada/sin_loginear.php");
        }else{ 
            
$view->view(RUTA_views."portada/logineado.php");
        }
    }
}    
?>
CLASS VISTAS
Código PHP:
<?php  
   
class views
       public 
$ruta;
      private 
$rutaBase
      private 
$rutaView
      function 
__construct(){ // funcion Constructora 
         // this-> hace referencia a un elemento de esta clase  
         
$this->rutaViewDOMINIOx.RUTA_views
      } 
      function 
view($ruta){ 
          
$this->ruta $ruta;
        require_once(
RUTA_layouts."cabecera.php");
        require_once(
"$this->ruta");          
         require_once(
RUTA_layouts."pie.php");
      } 
   } 
?>
Como veis tengo la variable siguiente para poderle añadir una alerta en la vista

Código PHP:
ob_start();        
                  require_once(
RUTA_helpers."portada/portada.php");
                
$this->texto_user_no ob_get_clean(); 
Como ariais pasar la variable del controlador a la clase vista???????

Gracias.
__________________
------------------------------------------------
La paciencia es el rey de la ciencia
------------------------------------------------

  #2 (permalink)  
Antiguo 14/07/2010, 22:19
Avatar de destor77  
Fecha de Ingreso: noviembre-2004
Ubicación: Gálvez, Santa Fe, Argentina
Mensajes: 2.654
Antigüedad: 19 años, 6 meses
Puntos: 43
Respuesta: Ayuda a la clase de vista MVC

yo a mi clase vista la tengo así (no es la mejor forma, pero a mi me funciona y eso me alcanza por el momento jaja)
Código PHP:
Ver original
  1. <?php
  2. /**
  3. * @package Punk Framework
  4. * @copyright Copyright (C) 2009 On&iacute;rico Sistemas. Todos los derechos reservados.
  5. * @version 0.1
  6. * @author Lucas M. Sastre
  7. * @link http://www.oniricosistemas.com
  8. *
  9. * @name Vistas.php
  10. */
  11.  
  12. /**
  13.  * Modificaciones realizadas
  14.  *
  15.  * 28/02/2010
  16.  * - se agrego el codigo para llamar a otras clases y asignarlas para ser usadas
  17.  * en las vistas.
  18.  *
  19.  * 17/04/2010
  20.  * - se modifico la clase para que se use una estructura de template, donde en las vistas de cada controlador solo se carga el contenido del html a mostrar y en la carpeta
  21.  * template en el archivo index.html se imprima el contenido de cada vista.
  22.  *
  23.  */
  24. class Vistas
  25. {
  26.  
  27.  
  28.     function __construct()
  29.     {
  30.     }
  31.  
  32.     public function show($name, $vars = array())
  33.     {
  34.         //$name es el nombre de nuestra plantilla, por ej, listado.php
  35.         //$vars es el contenedor de nuestras variables, es un arreglo del tipo llave => valor, opcional.
  36.  
  37.         //Traemos una instancia de nuestra clase de configuracion.
  38.         $config = Config::singleton();
  39.         $utilidades = Utilidades::singleton();
  40.         $debug = FirePHP::getInstance(true);
  41.         $lenguaje = Language::singleton();
  42.         $url = Url::singleton();
  43.  
  44.         //Armamos la ruta a la plantilla
  45.         $path = $config->get('vista') . $name;
  46.  
  47.         //asingo algunos objetos para que puedas ser usados en el frontend
  48.         $vars['utilidades'] = $utilidades;
  49.         $vars['config'] = $config;
  50.         $vars['debug'] = $debug;
  51.     $vars['leng'] = $lenguaje;
  52.  
  53.         //Si no existe el fichero en cuestion, tiramos un 404
  54.         if (file_exists($path) == false)
  55.         {
  56.             //trigger_error ('El Template `' . $path . '` no existe.', E_USER_NOTICE);
  57.             //return false;
  58.             error_log("El Template: {$path}  no existe - ".date("F j, Y, G:i")."\n", 3,$config->get('root').'/errores.log');
  59.             header("Location:index.php?controlador=error404");
  60.         }
  61.  
  62.         //Si hay variables para asignar, las pasamos una a una.
  63.         if(is_array($vars))
  64.         {
  65.             foreach ($vars as $key => $value)
  66.             {
  67.                 $$key = $value;
  68.             }
  69.         }
  70.         header('Content-Type: text/html; charset=ISO-8859-1');
  71.         //valido si se quiere mostrar el login
  72.         if($name!='login.html'){
  73.             //cargo la vista a mostrar
  74.             ob_start();
  75.             //$contenido=file_get_contents($path);
  76.             if(($config->get('activo')=='1' || $_REQUEST['controlador']=='inicio') && ($config->get('path')!=$config->get('root').'admin')){
  77.                 include_once($config->get('root').$config->get('viewsFolder').'header.html');
  78.                 include ($path);
  79.                 include_once($config->get('root').$config->get('viewsFolder').'footer.html');
  80.             }
  81.             else{
  82.                 include ($path);
  83.             }
  84.             $contenido = ob_get_contents();
  85.            
  86.            
  87.             ob_end_clean();
  88.            
  89.  
  90.             //Finalmente, incluimos la plantilla validando si estoy en el admin o en el frontend
  91.             if(strpos($config->get('path'),'admin')){
  92.                 include($config->get('root').$config->get('adminViewsFolder').'index.html');
  93.             }
  94.             else{
  95.                 include($config->get('root').$config->get('viewsFolder').'index.html');
  96.             }
  97.         }
  98.         else{
  99.             include ($path);
  100.         }
  101.     }
  102. }
  103. /*
  104. El uso es bastante sencillo:
  105. $data['nombre']='Pepe';
  106. $this->Vista->show('listado.php',$data);
  107. */
  108. ?>
  #3 (permalink)  
Antiguo 15/07/2010, 00:08
Avatar de syntex  
Fecha de Ingreso: noviembre-2002
Ubicación: Cataluña
Mensajes: 978
Antigüedad: 21 años, 5 meses
Puntos: 4
Respuesta: Ayuda a la clase de vista MVC

Por lo que veo haces llamar otras clases dentro de esta clase.

#
$config = Config::singleton();
#
$utilidades = Utilidades::singleton();
#
$debug = FirePHP::getInstance(true);
#
$lenguaje = Language::singleton();
#
$url = Url::singleton();

Un saludo.
__________________
------------------------------------------------
La paciencia es el rey de la ciencia
------------------------------------------------


Última edición por syntex; 15/07/2010 a las 00:27
  #4 (permalink)  
Antiguo 15/07/2010, 10:19
Avatar de destor77  
Fecha de Ingreso: noviembre-2004
Ubicación: Gálvez, Santa Fe, Argentina
Mensajes: 2.654
Antigüedad: 19 años, 6 meses
Puntos: 43
Respuesta: Ayuda a la clase de vista MVC

Si lo que hago con esas lineas es instanciar esas clases para poder usarlas en los html de las vistas por ejemplo:
Código PHP:
Ver original
  1. $debug->log($datos);
ejecuta el log de Firephp

Código PHP:
Ver original
  1. $url->urlAmigables('index.php?controlador=ayuda',1);
me transforma la url a url amigable.

Es decir instancio aquellas clases que se voy a necesitar siempre en las vistas, y para no tener que hacer una instancia en cada vista, lo hago una sola vez en la clase vista y esta disponible para todas las vistas. No se si es la forma correcta, seguramente no, pero estoy en plena investigación de como poder mejorarlo.
  #5 (permalink)  
Antiguo 15/07/2010, 11:18
Avatar de syntex  
Fecha de Ingreso: noviembre-2002
Ubicación: Cataluña
Mensajes: 978
Antigüedad: 21 años, 5 meses
Puntos: 4
Respuesta: Ayuda a la clase de vista MVC

Perdona por desconocer el tema y ponerme ahora en el MVC.

Entonces la clase

#
class Vistas
#
{

La ejecutas desde el controlador?

Yo tengo que hacerme alguna clase para pasarme la vista con todos sus datos.

Un saludo.
__________________
------------------------------------------------
La paciencia es el rey de la ciencia
------------------------------------------------

  #6 (permalink)  
Antiguo 15/07/2010, 11:50
Avatar de syntex  
Fecha de Ingreso: noviembre-2002
Ubicación: Cataluña
Mensajes: 978
Antigüedad: 21 años, 5 meses
Puntos: 4
Respuesta: Ayuda a la clase de vista MVC

Yo en el controlador me e creado una clase para la vista

CONTROLADOR

Código PHP:
<?php
/**
* Controller
**/
class Usuarios_controller{
    private 
$userid;
    private 
$user;
    public 
$texto_user_no;
      public function 
login$user ,$password) {
        require_once(
RUTA_models."portada/usuarios.php");
        require_once(
RUTA_models."portada/usuarios_model.php");
        require_once(
RUTA_lib."class_views.php");
        
$user = new Usuarios_model($_POST[user],$_POST[password]);
        
$userid $user->validateUser();
        
$view = new views();
        if(
$userid == ){
              
//******************************************
            // empty=FALSE;isset=TRUE
            
if ((empty($_POST[user]) or empty($_POST[password])) and isset($_POST[xs])){
                
ob_start();        
                  require_once(
RUTA_helpers."portada/portada.php");
                
$this->texto_user_no ob_get_clean();
            }
            
//******************************************
              
$view->view(RUTA_views."portada/sin_loginear.php");
        }else{ 
            
$view->view(RUTA_views."portada/logineado.php");
        }
    }
}    
?>
En la clase vista es donde pondre todo el objeto vista.

Código PHP:
<?php  
   
class views
       public 
$ruta;
      private 
$rutaBase
      private 
$rutaView
      function 
__construct(){ // funcion Constructora 
         // this-> hace referencia a un elemento de esta clase  
         
$this->rutaViewDOMINIOx.RUTA_views
      } 
      function 
view($ruta){ 
          
$this->ruta $ruta;
        require_once(
RUTA_layouts."cabecera.php");
        require_once(
"$this->ruta");          
         require_once(
RUTA_layouts."pie.php");
      } 
   } 
?>
Como veis ejecuta una cabecera con html, metas etc etc y en el pie </body></html>, en la variable $this->ruta donde tendre toda la vista html.

Pero en el controlador tengo que enviar un aviso a la vista html.

Código PHP:
ob_start();        
                  require_once(
RUTA_helpers."portada/portada.php");
                
$this->texto_user_no ob_get_clean(); 
Como pasar la variable $this->texto_user_no en la clase views para poner avisos, etc etc sobre la plantilla vista???

Gracias.
__________________
------------------------------------------------
La paciencia es el rey de la ciencia
------------------------------------------------

  #7 (permalink)  
Antiguo 16/07/2010, 13:35
Avatar de destor77  
Fecha de Ingreso: noviembre-2004
Ubicación: Gálvez, Santa Fe, Argentina
Mensajes: 2.654
Antigüedad: 19 años, 6 meses
Puntos: 43
Respuesta: Ayuda a la clase de vista MVC

bueno en realidad lo que yo hago es tener una clase abstracta llamada controler, donde cargo todas las clases que quiero que se usen en los controladores (vistas,imagenes,uploads, etc)
entonces tus controladores los extendes de la clase "controller" y van a heredar todas las instanacias a las otras clases.
Te dejo el link de un tutorial del cual tome la idea base para mi framework
http://www.jourmoly.com.ar/introducc...segunda-parte/
  #8 (permalink)  
Antiguo 17/07/2010, 01:29
Avatar de syntex  
Fecha de Ingreso: noviembre-2002
Ubicación: Cataluña
Mensajes: 978
Antigüedad: 21 años, 5 meses
Puntos: 4
Respuesta: Ayuda a la clase de vista MVC

Super interesante el link que me has reportado.

Yo siempre e programado forma espagueti como dicen y ahora con el MVC es un poco diferente al separar en tres capas.

Muchisimas gracias.
__________________
------------------------------------------------
La paciencia es el rey de la ciencia
------------------------------------------------

  #9 (permalink)  
Antiguo 18/07/2010, 15:40
Avatar de syntex  
Fecha de Ingreso: noviembre-2002
Ubicación: Cataluña
Mensajes: 978
Antigüedad: 21 años, 5 meses
Puntos: 4
Respuesta: Ayuda a la clase de vista MVC

Bueno ya e hecho mis primeras cosas como en el ejemplo reportado modificando la clase de la base de datos, hecha por mi.

Una pregunta,
En la clase View donde hacemos el include a la carpeta views donde se encuentra el template de la vista en html, donde se cargarian el css, javascripts, subida de imagenes etcc, en la misma carpeta views?????????????????

Código PHP:
<?php
class View{
    private 
$Bd;
    function 
__construct(){
        
// *******************************************
        
$this->Bd = new conectarMySQL(dbdriver,bdhost,dbuser,dbpass,dbselect);
        
$this->Bd->conectar();
        
// *******************************************
    
}
    public function 
show($name$vars = array()) 
    {
        
//$name es el nombre de nuestra plantilla, por ej, listado.php
        //$vars es el contenedor de nuestras variables, es un arreglo del tipo llave => valor, opcional.
        
        //Traemos una instancia de nuestra clase de configuracion.
        
$config Config::singleton();
                
        
//Armamos la ruta a la plantilla
        
$path $config->get('viewsFolder') . $name;

        
//Si no existe el fichero en cuestion, tiramos un 404
        
if (file_exists($path) == false
        {
            
trigger_error ('Template `' $path '` does not exist.'E_USER_NOTICE);
            return 
false;
        }
        
        
//Si hay variables para asignar, las pasamos una a una.
          
if(is_array($vars))
        {
                    foreach (
$vars as $key => $value)
                    {
                    $
$key $value;
                    }
                }
          
        
//Finalmente, incluimos la plantilla.
        
include(RUTA_layouts."cabecera.php");
        include(
$path);
        include(
RUTA_layouts."pie.php");
    }
}
?>
Ahora mismo lo tengo así.

# app
--# config
--# controllers
--# lib
--# models
--#views
----#layouts
----#helpers
#css
config.php
index.php

Vista preliminar del template html.
CABECERA dentro de views/layouts/cabecera.php
Código HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title><?= $title; ?></title>
<link rel="stylesheet" type="text/css" href="css/default.css"/>
</head>
<body> 
PIE dentro de views/layouts/pie.php
Código HTML:
<br />
<a href="?"><< Inicio</a>
</body>
</html> 
Muchas gracias.
__________________
------------------------------------------------
La paciencia es el rey de la ciencia
------------------------------------------------

  #10 (permalink)  
Antiguo 18/07/2010, 16:48
Avatar de destor77  
Fecha de Ingreso: noviembre-2004
Ubicación: Gálvez, Santa Fe, Argentina
Mensajes: 2.654
Antigüedad: 19 años, 6 meses
Puntos: 43
Respuesta: Ayuda a la clase de vista MVC

Yo lo cargo en el header asi:
Código HTML:
Ver original
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3.  <?php $config = Config::singleton(); ?>
  4. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  5. <title>Administración - <? echo ucfirst($_REQUEST['controlador']);?></title>
  6. <link rel="shortcut icon" href="favicon.ico" />
  7. <!--<base href="http://tu-url.com/" />-->
  8. <!-- CSS -->
  9.  
  10. <link href="<?php echo $config->get('urlRoot').'/'.$config->get('adminViewsFolder').$config->get('cssAdmin');?>transdmin.css" rel="stylesheet" type="text/css" media="screen" />
  11. <!--[if IE 6]><link rel="stylesheet" type="text/css" media="screen" href="<? echo $config->get('urlRoot').'/'.$config->get('adminViewsFolder').$config->get('cssAdmin');?>css/ie6.css" /><![endif]-->
  12. <!--[if IE 7]><link rel="stylesheet" type="text/css" media="screen" href="<? echo $config->get('urlRoot').'/'.$config->get('adminViewsFolder').$config->get('cssAdmin');?>css/ie7.css" /><![endif]-->
  13.  
  14. <!-- JavaScripts-->
  15. <script type="text/javascript" src="<? echo $config->get('urlRoot').'/'.$config->get('adminViewsFolder').$config->get('jsAdmin');?>jquery.js"></script>
  16. <script type="text/javascript" src="<? echo $config->get('urlRoot').'/'.$config->get('adminViewsFolder').$config->get('jsAdmin');?>jNice.js"></script>
  17.  
  18. <link type="text/css" href="<? echo $config->get('urlRoot').'/'.$config->get('adminViewsFolder').$config->get('cssAdmin');?>smoothness/jquery-ui-1.7.2.custom.css" rel="stylesheet" /> 
  19. <script type="text/javascript" src="<? echo $config->get('urlRoot').'/'.$config->get('adminViewsFolder').$config->get('jsAdmin');?>jquery-1.3.2.min.js"></script>
  20. <script type="text/javascript" src="<? echo $config->get('urlRoot').'/'.$config->get('adminViewsFolder').$config->get('jsAdmin');?>jquery-ui-1.7.2.custom.min.js"></script>
  21. <script type="text/javascript" src="<? echo $config->get('urlRoot').'/'.$config->get('adminViewsFolder').$config->get('jsAdmin');?>ui.dialog.js" ></script>  
  22. <script type="text/javascript" src="<? echo $config->get('urlRoot').'/'.$config->get('adminViewsFolder').$config->get('jsAdmin');?>ui.core.js" ></script>  
  23. <script type="text/javascript" src="<? echo $config->get('urlRoot').'/'.$config->get('adminViewsFolder').$config->get('jsAdmin');?>i18n/ui.datepicker-es.js"></script>
  24. <script type="text/javascript" src="<? echo $config->get('urlRoot').'/'.$config->get('adminViewsFolder').$config->get('jsAdmin');?>funciones.js" ></script>
  25. <script type="text/javascript" src="<? echo $config->get('urlRoot').'/'.$config->get('adminViewsFolder').$config->get('jsAdmin');?>effects.js" ></script>
  26. <?php
  27. include_once($config->get('root').$config->get('adminViewsFolder').$config->get('jsAdmin')."fckeditor/fckeditor.php") ;
  28. ?>
  29.  
  30.  
  31. </head>

lo que puedes hacer es sino, crearte un método para que puedas cargar automaticamente los css y js de una carpeta

Última edición por destor77; 18/07/2010 a las 16:55
  #11 (permalink)  
Antiguo 18/07/2010, 16:53
Avatar de destor77  
Fecha de Ingreso: noviembre-2004
Ubicación: Gálvez, Santa Fe, Argentina
Mensajes: 2.654
Antigüedad: 19 años, 6 meses
Puntos: 43
Respuesta: Ayuda a la clase de vista MVC

Cita:
Iniciado por destor77 Ver Mensaje
Yo lo cargo en el header asi:
Código HTML:
Ver original
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3.  <?php $config = Config::singleton(); ?>
  4. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  5. <title>Administración - <? echo ucfirst($_REQUEST['controlador']);?></title>
  6. <link rel="shortcut icon" href="favicon.ico" />
  7. <!--<base href="http://tu-url.com/" />-->
  8. <!-- CSS -->
  9.  
  10. <link href="<?php echo $config->get('urlRoot').'/'.$config->get('adminViewsFolder').$config->get('cssAdmin');?>transdmin.css" rel="stylesheet" type="text/css" media="screen" />
  11. <!--[if IE 6]><link rel="stylesheet" type="text/css" media="screen" href="<? echo $config->get('urlRoot').'/'.$config->get('adminViewsFolder').$config->get('cssAdmin');?>css/ie6.css" /><![endif]-->
  12. <!--[if IE 7]><link rel="stylesheet" type="text/css" media="screen" href="<? echo $config->get('urlRoot').'/'.$config->get('adminViewsFolder').$config->get('cssAdmin');?>css/ie7.css" /><![endif]-->
  13.  
  14. <!-- JavaScripts-->
  15. <script type="text/javascript" src="<? echo $config->get('urlRoot').'/'.$config->get('adminViewsFolder').$config->get('jsAdmin');?>jquery.js"></script>
  16. <script type="text/javascript" src="<? echo $config->get('urlRoot').'/'.$config->get('adminViewsFolder').$config->get('jsAdmin');?>jNice.js"></script>
  17.  
  18. <link type="text/css" href="<? echo $config->get('urlRoot').'/'.$config->get('adminViewsFolder').$config->get('cssAdmin');?>smoothness/jquery-ui-1.7.2.custom.css" rel="stylesheet" /> 
  19. <script type="text/javascript" src="<? echo $config->get('urlRoot').'/'.$config->get('adminViewsFolder').$config->get('jsAdmin');?>jquery-1.3.2.min.js"></script>
  20. <script type="text/javascript" src="<? echo $config->get('urlRoot').'/'.$config->get('adminViewsFolder').$config->get('jsAdmin');?>jquery-ui-1.7.2.custom.min.js"></script>
  21. <script type="text/javascript" src="<? echo $config->get('urlRoot').'/'.$config->get('adminViewsFolder').$config->get('jsAdmin');?>ui.dialog.js" ></script>  
  22. <script type="text/javascript" src="<? echo $config->get('urlRoot').'/'.$config->get('adminViewsFolder').$config->get('jsAdmin');?>ui.core.js" ></script>  
  23. <script type="text/javascript" src="<? echo $config->get('urlRoot').'/'.$config->get('adminViewsFolder').$config->get('jsAdmin');?>i18n/ui.datepicker-es.js"></script>
  24. <script type="text/javascript" src="<? echo $config->get('urlRoot').'/'.$config->get('adminViewsFolder').$config->get('jsAdmin');?>funciones.js" ></script>
  25. <script type="text/javascript" src="<? echo $config->get('urlRoot').'/'.$config->get('adminViewsFolder').$config->get('jsAdmin');?>effects.js" ></script>
  26. <?php
  27. include_once($config->get('root').$config->get('adminViewsFolder').$config->get('jsAdmin')."fckeditor/fckeditor.php") ;
  28. ?>
  29.  
  30.  
  31. </head>

lo que puedes hacer es sino, crearte un método para que puedas cargar automaticamente los css y js de una carpeta
  #12 (permalink)  
Antiguo 19/07/2010, 00:43
Avatar de syntex  
Fecha de Ingreso: noviembre-2002
Ubicación: Cataluña
Mensajes: 978
Antigüedad: 21 años, 5 meses
Puntos: 4
Respuesta: Ayuda a la clase de vista MVC

Ok muchas gracias por el reporte,

Una cosa el objeto $url->urlAmigables('index.php?controlador=ayuda',1);

No viene en el link que me facilitastes, verdad???
Yo lo he hecho es en la clase Views es incluir la vista y dos layouts de cabecera y pie.
Despues me e creado una clase de Helpers de los tipos de avisos que existieran para el template de la vista.

CONTROLADOR
Código PHP:
<?php
class UsuariosController extends ControllerBase
{    
    
//*********************************************************************************************
    
public function agregar(){
        if (
$_POST[user] !="" and $_POST[pass] !=""){
            
$ADD $this->items->add_Usuarios();
            if (
$ADD == TRUE){
                
$data['error']         = $this->helpers->view("AccesoCorrecto");    
                
$data['title']         = "Grabar Usuarios";
                
$this->view->show("UsuariosGrabadoOk.php"$data);
            }
        }else{
            if (
$_POST[boton] !=""){
                
$data['error']         = $this->helpers->view("Datosregistro");    
            }
            
$data['title']         = "Formulario de registro";
            
$this->view->show("UsuariosFormulario.php"$data);
        }
    }
    
//*********************************************************************************************
    
public function listar(){
        
$consulta    $this->items->Query_Usuarios();
        
$data['consulta']     = $consulta;
        
$data['title']         = "Listado de usuarios";
        
$this->view->show("UsuariosListar.php"$data);
        
$this->Bd->limpiaconsulta($consulta);
    }
    
//*********************************************************************************************
    
public function acceso(){
        if (
$_POST[user] !="" and $_POST[pass] !=""){
            
$CNS $this->items->comprobar_Usuarios();
            if (
$CNS == TRUE){
                
$data['title']         = "Panel de control Uusarios";
                
$this->view->show("UsuariosPaneldecontrol.php"$data);
            }else{
                
$data['title']         = "Formulario de acceso usuarios - Error en Usuario";
                
$data['error']         = $this->helpers->view("Noexiste");
                
$this->view->show("UsuariosAcceso.php"$data);
            }
        }else{
            if (
$_POST[boton] !=""){
                
$data['error']         = $this->helpers->view("Obligadopulsar");
            }
            
$data['title']         = "Formulario de acceso usuarios";
            
$this->view->show("UsuariosAcceso.php"$data);
        }
    }
    
//*********************************************************************************************
}
?>
Como verás $data['title'] le paso el valor al title del template html.
Si ves algo un poco incorrecto, es bueno corregir.

HELPERS

Código PHP:
<?php
class Helpers{
    public function 
__construct(){
        
    }
    public function 
view($path){
        
$path RUTA_helpers.$_GET['controlador'].$path.".php";
        if (
file_exists($path) == TRUE
        {
            
ob_start();
            include(
$path);
            
$E5 ob_get_clean();
            return 
$E5;
        }else{
            
$E5 "La vista Helpers ($path) No existe";    
            return 
$E5;
        }
    }    
}
?>
Otras dudas que tengo són.

Vemos que realizamos desde la clase ItemsModel una function de una consulta a la bd y despues mostramos los resultados en el template html.
Pero si quisieramos liberizar la tabla de la consulta, crearíamos una function nueva en la clase del modelo???????????????

Muchsimas gracias


Un saludo y muchas gracias.
__________________
------------------------------------------------
La paciencia es el rey de la ciencia
------------------------------------------------


Última edición por syntex; 19/07/2010 a las 02:25
  #13 (permalink)  
Antiguo 19/07/2010, 17:31
Avatar de destor77  
Fecha de Ingreso: noviembre-2004
Ubicación: Gálvez, Santa Fe, Argentina
Mensajes: 2.654
Antigüedad: 19 años, 6 meses
Puntos: 43
Respuesta: Ayuda a la clase de vista MVC

Hola, vamos por parte dijo jack con el cuchillo en la mano....

1- Lo de $url->urlAmigables(); es un desarrollo mio que traduce una direccion a url amigable del tipo /controlador/accion por ejemplo usuarios/listado.php o noticias/verNoticias/1/titulo.php
el segundo parametro es para saber si la url amigable es con multilenguaje, es decir si no le paso el 1 asi: $url->urlAmigables('index.php?controlador=index&amp;acc ion=ver'); me va a devolver algo así:
es/index/ver.php por defecto sino puedo hacer esto: $url->urlAmigables('index.php?controlador=index&amp;acc ion=ver&amp;leng='.$_SESSION['leng']); y suponiendo que $_SESSION['leng'] es igual a en (por ingles) me va a devolver:
en/index/ver.php

En cuanto a como tratas las vistas, no se si esta bien o mal, cada uno lo hace a su manera jeje.
Sobre tus otras dudas si a liberizar te refieres a hacer un mysql_free_result(); si lo mejor sería hacer un método o sino directamente meterlo dentro de las funciones que hacen query la base de datos.
  #14 (permalink)  
Antiguo 20/07/2010, 01:07
Avatar de syntex  
Fecha de Ingreso: noviembre-2002
Ubicación: Cataluña
Mensajes: 978
Antigüedad: 21 años, 5 meses
Puntos: 4
Respuesta: Ayuda a la clase de vista MVC

Ok muchas gracias por el reporte

Entonces sería mejor hacer una funcion en la clase para liberizar la consulta.

Mira te reporto el script

CONTROLADOR
Código PHP:
<?php
class UsuariosController extends ControllerBase
{    
    
//*********************************************************************************************
    
public function listar(){
        
$consulta    $this->items->Query_Usuarios();
        
$data['consulta']     = $consulta;
        
$data['title']         = "Listado de usuarios";
        
$this->view->show("UsuariosListar.php"$data);
        
$this->items->Limpiaconsulta_Usuarios();
    }
    
//*********************************************************************************************
}
?>
MODULO
Código PHP:
<?php
class UsuariosModel extends ModelBase
{
    protected 
$Bd;
    function 
__construct(){
        
parent::__construct();    
    }
    
//*********************************************************************************************
    
public function Query_Usuarios(){
        
//realizamos la consulta de todos los items
        
$consulta $this->Bd->consultar("id,email,nombre","usuarios","","");
        return 
$consulta;
    }
    
//*********************************************************************************************
    
public function Limpiaconsulta_Usuarios($consulta){
        
$this->Bd->limpiaconsulta($consulta);    
    }    
//*********************************************************************************************
}
?>
UsuariosListar.php
Código PHP:
<h1><?= $title?></h1>
<table>
    <tr>
        <td><center><strong>ID</strong></center></td>
        <td><center><strong>Usuario</strong></center></td>
        <td><center><strong>Nombre</strong></center></td>
    </tr>
    <?php 
        
// OBJETO DEL QUERY LISTADO
        
while($RR $this->Bd->obtendatos($consulta)){
        
?>
        <tr>
            <td><?php echo $RR['id']?></td>
            <td><?php echo $RR['email']?></td>
            <td><?php echo $RR['nombre']?></td>
        </tr>
        <?php
        
}
    
?>
</table>
Me gustaria que me pudieran ayudar y saber si el script puede ser mejorable para comenzar una buena base y sobretodo muchas gracias por la gran ayuda recibida de antemano.
__________________
------------------------------------------------
La paciencia es el rey de la ciencia
------------------------------------------------

  #15 (permalink)  
Antiguo 20/07/2010, 10:04
Avatar de destor77  
Fecha de Ingreso: noviembre-2004
Ubicación: Gálvez, Santa Fe, Argentina
Mensajes: 2.654
Antigüedad: 19 años, 6 meses
Puntos: 43
Respuesta: Ayuda a la clase de vista MVC

Yo lo haría asi:
Código PHP:
Ver original
  1. <?php
  2. class UsuariosModel extends ModelBase
  3. {
  4.     protected $Bd;
  5.     function __construct(){
  6.         parent::__construct();    
  7.     }
  8.     //*********************************************************************************************
  9.     public function Query_Usuarios(){
  10.         //realizamos la consulta de todos los items
  11.         $consulta = $this->Bd->consultar("id,email,nombre","usuarios","","");
  12.         $this->limpiarConsulta();
  13.         return $consulta;
  14.     }
  15.     //*********************************************************************************************
  16.     private function Limpiaconsulta_Usuarios(){
  17.         // aca iria el llamado al query que hace el mysq_free_result(); de tu clase Bd  
  18.     }    //*********************************************************************************************
  19. }
  20. ?>

Esa sería una opcion, o sino la mas rápida pero tal vez mas rebuscada, es que modifiques tu clase que hace las consultas a la base de datos y despues de cada query le metas el mysql_free_result() y listo no lo tenes que invocar en ningun lado
  #16 (permalink)  
Antiguo 20/07/2010, 10:44
Avatar de syntex  
Fecha de Ingreso: noviembre-2002
Ubicación: Cataluña
Mensajes: 978
Antigüedad: 21 años, 5 meses
Puntos: 4
Respuesta: Ayuda a la clase de vista MVC

Pero la funcion $this->limpiarConsulta();, no podrias invocarlo en la funcion Query_Usuarios, porque aun tendriamos que invocar mysql_fetch_array en la plantilla html y lo cerrariamos verdad???? nos daria un mensaje de error.

Entonces creariamos la funcion en la clase del mysql_free_result y la invocariamos despues de ejecutar el mysql_fetch_array en la plantilla html, y se ejecuta en el controlador.
Código PHP:
<?php
class UsuariosController extends ControllerBase
{    
    
//*********************************************************************************************
    
public function listar(){
        
$consulta    $this->items->Query_Usuarios();
        
$data['consulta']     = $consulta;
        
$data['title']         = "Listado de usuarios";
        
$this->view->show("UsuariosListar.php"$data);
        
$this->items->Limpiaconsulta_Usuarios();
    }
    
//*********************************************************************************************
}
?>

UsuariosListar.php

Código HTML:
<h1><?= $title; ?></h1>
<table>
	<tr>
		<td><center><strong>ID</strong></center></td>
        <td><center><strong>Usuario</strong></center></td>
        <td><center><strong>Nombre</strong></center></td>
    </tr>
	<?php 
		// OBJETO DEL QUERY LISTADO
		while($RR = $this->Bd->obtendatos($consulta)){
		?>
		<tr>
			<td><?php echo $RR['id']?></td>
			<td><?php echo $RR['email']?></td>
            <td><?php echo $RR['nombre']?></td>
		</tr>
		<?php
		}
	?>
</table> 
Realmente la url que facilitastes me a servido de muy gran ayuda para conocer el concepto MVC. Gracias.
__________________
------------------------------------------------
La paciencia es el rey de la ciencia
------------------------------------------------


Etiquetas: clase, mvc, 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 10:58.