Foros del Web » Programando para Internet » Javascript » Frameworks JS »

cargar vistas en MVC con ajax

Estas en el tema de cargar vistas en MVC con ajax en el foro de Frameworks JS en Foros del Web. Hola, tengo que modifica una aplicación en php realizada con otro programador, que por lo que me comento el dueño de la pagina se baso ...
  #1 (permalink)  
Antiguo 25/03/2010, 14:05
Avatar de destor77  
Fecha de Ingreso: noviembre-2004
Ubicación: Gálvez, Santa Fe, Argentina
Mensajes: 2.654
Antigüedad: 20 años
Puntos: 43
cargar vistas en MVC con ajax

Hola,
tengo que modifica una aplicación en php realizada con otro programador, que por lo que me comento el dueño de la pagina se baso en este tutorial:
http://www.jourmoly.com.ar/introducc...segunda-parte/

El siguiente código es la clase para el manejo de vistas:
Código PHP:
Ver original
  1. < ?php
  2. class View
  3. {
  4.     function __construct()
  5.     {
  6.     }
  7.  
  8.     public function show($name, $vars = array())
  9.     {
  10.         //$name es el nombre de nuestra plantilla, por ej, listado.php
  11.         //$vars es el contenedor de nuestras variables, es un arreglo del tipo llave => valor, opcional.
  12.  
  13.         //Traemos una instancia de nuestra clase de configuracion.
  14.         $config = Config::singleton();
  15.  
  16.         //Armamos la ruta a la plantilla
  17.         $path = $config->get('viewsFolder') . $name;
  18.  
  19.         //Si no existe el fichero en cuestion, tiramos un 404
  20.         if (file_exists($path) == false)
  21.         {
  22.             trigger_error ('Template `' . $path . '` does not exist.', E_USER_NOTICE);
  23.             return false;
  24.         }
  25.  
  26.         //Si hay variables para asignar, las pasamos una a una.
  27.         if(is_array($vars))
  28.         {
  29.                     foreach ($vars as $key => $value)
  30.                     {
  31.                     $$key = $value;
  32.                     }
  33.                 }
  34.  
  35.         //Finalmente, incluimos la plantilla.
  36.         include($path);
  37.     }
  38. }
  39. /*
  40.  El uso es bastante sencillo:
  41.  $vista = new View();
  42.  $vista->show('listado.php', array("nombre" => "Juan"));
  43. */
  44. ?>

el controlador es:
Código PHP:
Ver original
  1. class configuracionController extends Controller {
  2.  
  3.  
  4.     public function index() {
  5.         $this->Utilidades->validar($this->Session->get('admin'));
  6.         $configuración = new ConfiguracionSitio();
  7.         $datos=$this->validarDatos($configuración->listarConfiguracion());
  8.  
  9.         if(!$datos) {
  10.             $data['datos'] = $this->validarDatos($configuración->listarConfiguracion());
  11.         }
  12.         else {
  13.             $data['datos'] = $datos;
  14.         }
  15.         $data['breadCrumb']=$this->BreadCrumb->listarBreadCrumb($_REQUEST);
  16.         if($this->Session->get('mensaje')) {
  17.             $data['mensaje'] = $this->Session->get('mensaje');
  18.             $this->Session->del('mensaje');
  19.         }
  20.         $this->Vistas->show('index.html',$data);
  21.     }
  22.  
  23.  
  24.     public function editar() {
  25.         $configuración = new ConfiguracionSitio();
  26.         $this->Utilidades->validar($this->Session->get('admin'));
  27.         $data['datos'] = $this->validarDatos($configuración->listarConfiguracion());
  28.         $data['breadCrumb']=$this->BreadCrumb->listarBreadCrumb($_REQUEST);
  29.         $this->Vistas->show('editar.html',$data);
  30.     }
  31.  
  32.  
  33.     public function guardar() {
  34.         $this->Utilidades->validar($this->Session->get('admin'));
  35.         $data['breadCrumb']=$this->BreadCrumb->listarBreadCrumb($_REQUEST);
  36.         $configuración = new ConfiguracionSitio();
  37.         $datos = $this->validarFormulario($_REQUEST);
  38.         $resultado=$configuración->guardarConfiguracion($datos);
  39.         if($resultado==true) {
  40.             $this->Mensajes->agregarMensaje(1,'La configuración se guardo correctamente','ok');
  41.             $this->Session->set('mensaje',$this->Mensajes->mostrarMensaje());
  42.  
  43.             //$this->Vistas->show('index.html',$data);
  44.             $this->Utilidades->redirect('index.php?controlador=configuracion');
  45.         }
  46.         else {
  47.             $this->Mensajes->agregarMensaje(1,'La configuración no se puedo guardar correctamente','error');
  48.             $this->Mensajes->agregarMensaje(1,$resultado,'error');
  49.             $data['mensaje'] = $this->Mensajes->mostrarMensaje();
  50.             $data['datos'] = $this->Utilidades->arrayObjeto($_REQUEST);
  51.             $this->Vistas->show('editar.html',$data);
  52.         }
  53.     }

y una vista la crea asi, por ejemplo index.html del controlador configuracion:
Código HTML:
Ver original
  1. <?php
  2. include_once('template/header.html');
  3. echo $breadCrumb;
  4. include_once('template/sidebar.html');
  5.  
  6. ?>
  7.  
  8. <h2><a href="index.php?controlador=configuracion&amp;accion=editar" title="editar">Editar Configuración</a></h2>
  9. <div id="main">
  10.     <?
  11.    if(!empty($mensaje)){
  12.        echo $mensaje;
  13.    }
  14.    ?>
  15.     <h3>Configuración General del Sitio</h3>
  16.     <table cellpadding="0" cellspacing="0" summary="">
  17.         <tr>
  18.             <td>Titulo del Sitio</td>
  19.             <td><? echo $datos['titulo'];?></td>
  20.         </tr>
  21.         <tr>
  22.             <td>Descripción del Sitio</td>
  23.             <td><? echo $datos['descripcion'];?></td>
  24.         </tr>
  25.         <tr>
  26.             <td>Keywords</td>
  27.             <td><? echo $datos['keywords'];?></td>
  28.         </tr>
  29.         <tr>
  30.             <td>Email principal</td>
  31.             <td><? echo $datos['email'];?></td>
  32.         </tr>
  33.         <tr>
  34.             <td>Nombre de usuario email</td>
  35.             <td><? echo $datos['useremail'];?></td>
  36.         </tr>
  37.         <tr>
  38.             <td>Contraseña email</td>
  39.             <td><? echo $datos['passemail'];?></td>
  40.         </tr>
  41.         <tr>
  42.             <td>Puerto del email</td>
  43.             <td><? echo $datos['portemail'];?></td>
  44.         </tr>
  45.         <tr>
  46.             <td>Servidor del email</td>
  47.             <td><? echo $datos['hostemail'];?></td>
  48.         </tr>
  49.         <tr>
  50.             <td>Mensaje Bienvenida del sitio</td>
  51.             <td><? echo $datos['mensaje'];?></td>
  52.         </tr>  
  53.         <tr>
  54.             <td>Contraseña Galerías</td>
  55.             <td><? echo $datos['galerias'];?></td>
  56.         </tr>        
  57.     </table>
  58.     <br/>
  59.  
  60. </div>
  61. <!-- // #main -->              
  62. <div class="clear"></div>
  63. <?php
  64. include_once('template/footer.html');
  65. ?>

Bien a lo que no le encuentro solución es como poder implementar ajax para que cuando se haga click en una opcion por ejemplo editar configuracion, me salga el famoso gif animado de cargando, y me cargue esa vista por medio de ajax, no se si me conviene usar:
Código Javascript:
Ver original
  1. $('#main').load('controladores/configuracion/template/index.html');

o usar:
Código Javascript:
Ver original
  1. $.ajax({
  2.   url: 'index.php?controlador=configuracion&accion=editarConfiguracion',
  3.   success: function(data) {
  4.     $('.result').html(data);
  5.     alert('Load was performed.');
  6.   }
  7. });

o usar json, me tiene algo perdido este asunto, ya que no encuentro ningun tutorial de ajax con mvc
si me pueden guiar un poco estaré muy agredecido
  #2 (permalink)  
Antiguo 29/03/2010, 06:55
 
Fecha de Ingreso: enero-2005
Mensajes: 122
Antigüedad: 19 años, 9 meses
Puntos: 2
Respuesta: cargar vistas en MVC con ajax

Hola destor77

Yo veo una opcion muy válida y es usar xajax, ya que es un framework ajax para php orientado a objetos y lo podrias implementar bastante bien, si te sirve postea de nuevo y te podria explicar como lo podrias implementar...

Un saludo
  #3 (permalink)  
Antiguo 29/03/2010, 07:48
Avatar de destor77  
Fecha de Ingreso: noviembre-2004
Ubicación: Gálvez, Santa Fe, Argentina
Mensajes: 2.654
Antigüedad: 20 años
Puntos: 43
Respuesta: cargar vistas en MVC con ajax

Cita:
Iniciado por Brahyam Ver Mensaje
Hola destor77

Yo veo una opcion muy válida y es usar xajax, ya que es un framework ajax para php orientado a objetos y lo podrias implementar bastante bien, si te sirve postea de nuevo y te podria explicar como lo podrias implementar...

Un saludo
Si por favor si me podrías explicar como usar xajax, lo he usado en un trabajo, pero no lo había tenido como opción porque no sabía como integrarlo al sistema que estoy usando.
Espero tu explicación.
Desde ya muchas gracias
  #4 (permalink)  
Antiguo 31/03/2010, 10:06
 
Fecha de Ingreso: enero-2005
Mensajes: 122
Antigüedad: 19 años, 9 meses
Puntos: 2
Respuesta: cargar vistas en MVC con ajax

Listo, tengo una estructura de trabajo realizada de la siguiente manera:

Tengo un MainController, Un MainModel y un MainForm, pero aqui te explicare el funcionanmiento del MainController que es el que controlaria todo el manejo de xajax.

El MainController:

Código PHP:
    include_once '../xajax/xajax_core/xajax.inc.php';

    Class 
MainController {
        
        public 
$ajax;
        public 
$respuestaAjax;
        public 
$debug_xajax;
        public 
$waitCursor;
        public 
$lib_xajax;
        public 
$ruta_xajax;
        public 
$reg_functions;

        public function 
__construct(){
            
            
$this->init();
            
            
$this->ajax             = new xajax();            
            
$this->respuestaAjax = new xajaxResponse();            
            
            
$this->regFunctions();    
            
$this->ajaxLibrary();
            
        }


        public function 
init(){
            ;
        }


        protected function 
regFunctions(){ 
            
            foreach(
$this->reg_functions as $function){
                
$this->ajax->registerFunction(array($function, &$this$function));
            }
                           
            
$this->ajax->processRequest();
            
            if(!
$this->debug_xajax$this->debug_xajax false;
            
$this->ajax->setFlag('statusMessages',$this->debug_xajax); 
            
$this->ajax->setFlag('waitCursor',$this->waitCursor); 
                
        }


        protected function 
ajaxLibrary(){
            
            
$this->lib_xajax $this->ajax->getJavascript($this->ruta_xajax)));
            
        }

    } 
Listo, esto es el MainController.
Ahora configuramos la clase que va a extender el MainController asi:

Código PHP:

    
class IndexController extends MainController
    
{
    
        protected 
$plantilla

        public function 
init(){
                
            
$this->plantilla            'tu_plantilla.php';
            
$this->ruta_xajax        '../xajax/';
            
$this->debug_xajax        true;
            
$this->lib_xajax         'xajax_javascript';
            
$this->waitCursor         false;
            
$this->reg_functions     = array('functionPrueba');
                
        }


        public function 
index() {

            
// Aqui va el contenido de tu pagina cuando se carga por primera vez
            
$data = array(lib_ajax => $this->lib_xajax,main => true);
            
$this->Vistas->show($this->plantilla,$data);

        }


        public function 
functionPrueba(){

            
$var 'texto de prueba para la vista';

            
//Para tu caso, podria ser asi:
            
return $this->respuestaAjax->assign('div_id','innerHTML',$this->Vistas->show($this->plantilla,$var));

        } 
y en la vista asi:

Código HTML:
<? if($data[main]) : ?>
<html>
<head>
<!-- incluimos la libreria xajax -->
<? if($data[lib_ajax]) echo $data[lib_ajax]; ?>
</head>
<body>

<div id="div_id"></div>

</body>
</html>

<? endif ?>

<? if($var) : ?>
este es el texto generado con xajax: <?= $var ?>
<? endif; ?> 
Con esto te deberia funcionar.
  #5 (permalink)  
Antiguo 31/03/2010, 19:48
Avatar de destor77  
Fecha de Ingreso: noviembre-2004
Ubicación: Gálvez, Santa Fe, Argentina
Mensajes: 2.654
Antigüedad: 20 años
Puntos: 43
Respuesta: cargar vistas en MVC con ajax

Brahyam,
muchisimas gracias!!!!, entre mañana y pasado que es feriado por aca, me pongo y adapto el "framework" con tus recomendaciones y si me sale algún problema te consulto, por ultimo quisera hacerte las siguientes que me surgieron al ver tu código:

1- en los controladores si o si tengo que usar la funcion init o puedo usar __contruct como venia usando hasta ahora?
2- si quisiera que salga la famosa animacion de cargando cada vez que se carga una página, como sería?

muchas gracias nuevamente....

Etiquetas: ajax, 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 06:06.