retornar array en el modelo para pasar a un dropdown en el controlador

649 views
Skip to first unread message

diego

unread,
Mar 31, 2011, 2:39:36 AM3/31/11
to codeignit...@googlegroups.com
estimados, tengo este modelo, pero me esta dando mal el arreglo para pasarlo a un form_dropdown

// modelo
<?php
class Role_model extends CI_Model {

function roles()
{
$this->db->select('id, name');
$this->db->from('roles');
$query = $this->db->get();
return $query->result_array();
}
}

// controlador
function roles(){
$roles = $this->Role_model->roles();
$data['roles_dropdown'] = form_dropdown('role_id',$roles);
}

podria desarmar ese array y convertirlo en uno que sirva para pasar al dropdown,
pero talvez alguien encontro alguna forma mejor de hacerlo no?

gracias como siempre

diego



Isern Palaus

unread,
Mar 31, 2011, 3:45:26 AM3/31/11
to codeignit...@googlegroups.com
Hola Diego,

Pues la verdad, si ha encontrado otra manera de hacerlo ser� escribiendo
c�digo, que es lo que tu no quieres. No puedes pretender que te lo haga
todo, todo. Al helper tienes que pasarle las cosas formateadas ya que
sino fallar�. Eso, o modificas el helper para que acepte el pasarle el
dropdown de la forma que tu dices.

De todos modos, hasta el c�digo que tienes el modelo lo puedes
simplificar y hacer algo as�:

$result = array();

$query = $this->db->select("id, name")->get("roles");

foreach($query->result() as $row)
$result[$row->id] = $row->name;

return $result;

As� si deber�a funcionarte el form_dropwdown() que yo personalmente te
recomiendo que lo apliques en el view y no en el controlador, no tiene
sentido pasar html formateado al view si la idea es que el view se
encargue de eso.

Un saludo,
Isern Palaus
http://blog.ipalaus.es

El 31/03/11 08:39, diego escribi�:


> estimados, tengo este modelo, pero me esta dando mal el arreglo para
> pasarlo a un form_dropdown
>

> *// modelo*


> <?php
> class Role_model extends CI_Model {
>
> function roles()
> {
> $this->db->select('id, name');
> $this->db->from('roles');
> $query = $this->db->get();
> return $query->result_array();
> }
> }
>

> *// controlador*


> function roles(){
> $roles = $this->Role_model->roles();
> $data['roles_dropdown'] = form_dropdown('role_id',$roles);
> }
>
> podria desarmar ese array y convertirlo en uno que sirva para pasar al
> dropdown,
> pero talvez alguien encontro alguna forma mejor de hacerlo no?
>
> gracias como siempre
>
> diego
>
>
>

> --
> ---
> Para anular la suscripci�n a este grupo, env�a un mensaje a
> codeigniter-spa...@googlegroups.com
> Para obtener m�s opciones, visita este grupo en
> http://groups.google.com/group/codeigniter-spanish?hl=es.

--
Isern Palaus <ipa...@ipalaus.es>

Damian Fernandez

unread,
Mar 31, 2011, 8:30:51 AM3/31/11
to codeignit...@googlegroups.com, Isern Palaus
Te paso lo que yo uso
Este es mi combo_model

<?php
class Combo_Model extends Model {

    function combo_Model(){
        parent::Model();
    }
   
    function get_combo($table, $order = null){
       
        $data = array();
        $data['']='Seleccione una opción';
 
        if ($this->db->field_exists('habilitado', $table)) {
              $this->db->where('habilitado', 'SI');
        }
         
        $id = "id_".$table;
        $this->db->select("$id as id, descripcion");
       
        // order
        if (is_null($order)) {
            $this->db->order_by($id);
        }else{
             $this->db->order_by($order);
        }
       
           $query = $this->db->get($table);
                                   
        foreach($query->result() as $row){
           $data[$row->id]= ucwords(strtolower($row->descripcion));
        }
  
        return $data;
    }
   
}

Esta es la llamada desde un controlador
Como podes ver tengo un metodo en el controlador que carga los combos de mi vista y es bastante sencillo
e paso el nombre de la tabla que quiero cargar como combo.
es decir esto es muy util para tablas que tiene esta estructura (id, descripcion)


function _load_form($data){
          
        $data['cmb_sexo'] = $this->combo_model->get_combo('sexo');
        $data['cmb_tipo_documento'] = $this->combo_model->get_combo('tipo_documento');
        $data['cmb_estado_civil'] = $this->combo_model->get_combo('estado_civil');
        $data['cmb_tipo_tel1'] = $this->combo_model->get_combo('tipo_tel');
        $data['cmb_tipo_tel2'] = $this->combo_model->get_combo('tipo_tel');
        $data['cmb_nacionalidad'] = $this->combo_model->get_combo('nacionalidad');
        $data['cmb_provincia'] = $this->combo_model->get_combo('provincia');
       
        return $data;
    }

Espero te sirva Damian.



El 31 de marzo de 2011 04:45, Isern Palaus <ipa...@ipalaus.es> escribió:
Hola Diego,

Pues la verdad, si ha encontrado otra manera de hacerlo será escribiendo código, que es lo que tu no quieres. No puedes pretender que te lo haga todo, todo. Al helper tienes que pasarle las cosas formateadas ya que sino fallará. Eso, o modificas el helper para que acepte el pasarle el dropdown de la forma que tu dices.

De todos modos, hasta el código que tienes el modelo lo puedes simplificar y hacer algo así:


$result = array();

$query = $this->db->select("id, name")->get("roles");

foreach($query->result() as $row)
   $result[$row->id] = $row->name;

return $result;

Así si debería funcionarte el form_dropwdown() que yo personalmente te recomiendo que lo apliques en el view y no en el controlador, no tiene sentido pasar html formateado al view si la idea es que el view se encargue de eso.


Un saludo,
Isern Palaus
http://blog.ipalaus.es

El 31/03/11 08:39, diego escribió:

estimados, tengo este modelo, pero me esta dando mal el arreglo para
pasarlo a un form_dropdown

*// modelo*
<?php
class Role_model extends CI_Model {

function roles()
{
$this->db->select('id, name');
$this->db->from('roles');
$query = $this->db->get();
return $query->result_array();
}
}

*// controlador*
function roles(){
$roles = $this->Role_model->roles();
$data['roles_dropdown'] = form_dropdown('role_id',$roles);
}

podria desarmar ese array y convertirlo en uno que sirva para pasar al
dropdown,
pero talvez alguien encontro alguna forma mejor de hacerlo no?

gracias como siempre

diego



--
---
Para anular la suscripción a este grupo, envía un mensaje a
codeigniter-spa...@googlegroups.com
Para obtener más opciones, visita este grupo en
http://groups.google.com/group/codeigniter-spanish?hl=es.

--
Isern Palaus <ipa...@ipalaus.es>


--
---
Para anular la suscripción a este grupo, envía un mensaje a
codeigniter-spa...@googlegroups.com
Para obtener más opciones, visita este grupo en
http://groups.google.com/group/codeigniter-spanish?hl=es.

combo_model.php

diego

unread,
Mar 31, 2011, 3:22:08 PM3/31/11
to codeignit...@googlegroups.com
@Isern,
si si, porahi me malinterpretaste, no quiero modificar el helper sino formatearle los registros y pasarselo como los pide.
asi mismo como dijiste lo arme pero pense que habia algo que lo hacia.
gracias!
 
@Damian,
genial el modelo sirve para todo combo, ya me lo copié ;)
 
diego


 
El 31 de marzo de 2011 04:45, Isern Palaus <ipa...@ipalaus.es> escribió:
Hola Diego,

Pues la verdad, si ha encontrado otra manera de hacerlo será escribiendo código, que es lo que tu no quieres. No puedes pretender que te lo haga todo, todo. Al helper tienes que pasarle las cosas formateadas ya que sino fallará. Eso, o modificas el helper para que acepte el pasarle el dropdown de la forma que tu dices.

De todos modos, hasta el código que tienes el modelo lo puedes simplificar y hacer algo así:


$result = array();

$query = $this->db->select("id, name")->get("roles");

foreach($query->result() as $row)
   $result[$row->id] = $row->name;

return $result;

Así si debería funcionarte el form_dropwdown() que yo personalmente te recomiendo que lo apliques en el view y no en el controlador, no tiene sentido pasar html formateado al view si la idea es que el view se encargue de eso.


Un saludo,
Isern Palaus
http://blog.ipalaus.es

El 31/03/11 08:39, diego escribió:
estimados, tengo este modelo, pero me esta dando mal el arreglo para
pasarlo a un form_dropdown

*// modelo*
<?php
class Role_model extends CI_Model {

function roles()
{
$this->db->select('id, name');
$this->db->from('roles');
$query = $this->db->get();
return $query->result_array();
}
}

*// controlador*
function roles(){
$roles = $this->Role_model->roles();
$data['roles_dropdown'] = form_dropdown('role_id',$roles);
}

podria desarmar ese array y convertirlo en uno que sirva para pasar al
dropdown,
pero talvez alguien encontro alguna forma mejor de hacerlo no?

gracias como siempre

diego



--
---
Para anular la suscripción a este grupo, envía un mensaje a
codeigniter-spa...@googlegroups.com
Para obtener más opciones, visita este grupo en
http://groups.google.com/group/codeigniter-spanish?hl=es.

--
Isern Palaus <ipa...@ipalaus.es>

--
---
Para anular la suscripción a este grupo, envía un mensaje a
codeigniter-spa...@googlegroups.com
Para obtener más opciones, visita este grupo en
http://groups.google.com/group/codeigniter-spanish?hl=es.

Reply all
Reply to author
Forward
0 new messages