La semana pasada puse un artículo donde explícaba mi propuesta para el envío de parametros entre modelos y controladores del framework de codeigniter; ahora se me ocurrió la fabulantástica idea de hacer lo mismo, pero esta vez de la vista al controlador. Actualmente uso prototypejs para el manejo de operaciones/acciones con ajax y para los efectillos uso scriptaculous. El caso es que dejaré un ejemplo muy sencillo de como hacer esto, tanto de la vista y el script de JS así como el controlador y obviamente con el ejemplo anterior de pasar parametros como un arreglo al modelo

//MODELO
/*
*Este es el ejemplo de como el MODELO recibe parametros desde el
*controlador mediante un arreglo descriptivo
*/
<php if (!defined("BASEPATH")) { exit("No direct access allowed");}
class Getusuarios extends Model {

  function __construct(){
    parent::Model();
  } 

  function details($parametros = NULL){
    //Checo que el arreglo de parametros contenga datos
    if (is_array($parametros)){
      //Creo la sentencia SQL para extraer los datos
      $sqlUsuariosDetalle = ' SELECT * ';
      $sqlUsuariosDetalle .= ' FROM Users ';
      $sqlUsuariosDetalle .= ' WHERE uid = ? ';
      $sqlUsuariosDetalle .= ' AND dep = ? ';
      //ejecuto el query a la base de datos pasandole el arreglo que
      //viene del controlador
      $rs = $this->db->query($sqlUsuariosDetalle, $parametros);
      //checo que contenga datos
      if ($rs->num_rows() > 0){
        //en caso de que contenga datos regreso el resultado
        $result = $rs->result();
        return $result;
      //no hay datos, no regreso nada.
      } else { return FALSE; }
    //si no hay parametros, no hay consulta
    } else { return FALSE; }

  }

  function list () {
    //creo la sentencia sql para obtener los datos
    $sqlListaUsuarios = ' SELECT uid, name ';
    $sqlListaUsuarios .= ' FROM Users ';
    $sqlListaUsuarios .= ' WHERE gid >= 12 ';
    //ejecuto el query en la base de datos.
    $rs = $this->db->query($sqlListaUsuarios);
    //checo que traiga datos
    if ($rs->num_rows() > 0){
      //De tener algo, regreso el resultado
      return $rs->result();
    //Si no hay datos, regreso falso
    } else { return FALSE; }

  }
}
?>

Ahora veamos como se aplícan ambos ejemplos en el controlador, tanto para recibir parametros desde la vista con JS mandados con prototype y a su vez como manda los parametros al modelo por medio del arreglo.

//Controlador
<php if (!defined("BASEPATH")) { exit("No direct access allowed");}
class Usuarios extends Controller {

  function __construct(){
    parent::Controller();
    $this->load->model('getusuarios');
  }

  function detalles(){

    //convierto lo que viene de la cadena en un arreglo.
    $param = explode(',',$this->input->post('params'));

    if ($param[0] > -1 ) {

      $dep = $param[1]!=5?$param[1]:-1;

      $dao_params['id'] = $param[0];
      $dao_params['dep'] = $param[1];
      //envío el arreglo de parametros al modelo.
      $recordset = $this->getusuarios->details($dao_params);

      if (count($recordset) > 0) { $data['registros'] = $recordset; } else { $data['registros'] = NULL; }

      $this->load->view('user_details',$data);

    } else { $this->usuarios(); }

  }

  function lista(){

    $recordset = $this->getdepartamentos->list();

    if (count($recordset) > 0) {

      $datos = array('-1'=>"Seleccione");

      foreach($recordset as $rs){ $datos[$rs->id] = $datos[$rs->nombre_dep]; }
      $data['lista_departamentos'] = $datos;

    } else { $data['lista_departamentos'] = NULL; }

    $this->load->view('users_list',$data);
  }
}
?>
//VISTA







Próximamente me pondré a jugar con JSON para poner ejemplos, espero les ayude y les guste el post, por favor no olviden dejar su comentario.
Saludos.

SociBook del.icio.us Digg Facebook Google Yahoo Buzz StumbleUpon

  4 Responses to “How to send parameters from js to php with prototype in CodeIgniter”

  1. Interesante how-to, solo tengo una duda el archivo de prototype.js en que carpeta lo colocas y como lo mandas a llamar?

    De antemano muchas gracias.

  2. Hola Cristopher:

    Te daré el ejemplo de como hacerlo usando el CodeIgniter (php framework).
    El archivo prototype.js puede ir en cualquier carpeta (dentro de DocumentRoot o del apache que estas usando; sí estas usando IIS entonces debe estar dentro de la carpeta que señalas como “contenedora” de archivos web.

    Ejemplo:
    DocumentRoot “/var/www/htdocs/proyecto_demo”

    Suponiendo que tu aplicación estará dentro de “/var/www/htdocs/proyecto_demo” entonces, en la carpeta

    /proyecto_demo debes incorporar el archivo prototype.js a nivel de la carpeta system/ o si lo prefieres dentro de ella.
    Te recomiendo que antes de proceder con la inclusión del prototype.js a tu archivo.php te asegures de que esté accesible desde web para que no tengas problemas con las rutas de los archivos.
    Ejemplo http://127.0.0.1:8888/js/prototype.js
    Sí el archivo se puede visualizar en texto plano entonces procedes con la inclusión de éste a tu vista o archivo.php

    Ejemplo:
    Alias cidemo “/var/www/htdocs/proyecto_demo/”

    bla bla blah

    Ejemplo http://127.0.0.1:8888/cidemo/js/prototype.js
    Sí el archivo se puede visualizar en texto plano entonces procedes con la inclusión de éste a tu vista o archivo.php

    En el blog también tengo un demo que usa PrototypeJs con Scriptaculous http://geeking.me/blog/codeigniter-170-demo/

    Puedes bajarlo y probarlo a fin de que encuentres una solución en la práctica a tus dudas.

    Saludos.
    Te agrego a GTalk, veo que tu comentario viene desde una cuenta de Gmail.

  3. Estimado, armé un caso con Ajax y CI muy similar al suyo. Pero tengo un problema, seguramente es algo simple; todo funciona bien; pero no llegan los parámetros al controlador. Allí realizo un print_r($_POST); y muestra un array vacío. Tienes idea de porqué sucede esto? Gracias.

  4. Fácil, codeigniter no te permite usar el $_POST o $_GET O $_REQUEST, para eso tienes la clase INPUT…
    en el controlador para recoger un parámetro que envías desde una vista, lo haces con
    $variable = $this->input->post(“nombre_parametro”, true);

 Leave a Reply

(required)

(required)

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

   
© 2012 Geekeandome Suffusion theme by Sayontan Sinha