C.grid.view Problema Al Mostrar Una Columna

Buenas mi problema es el siguiente, en la BD tengo una columna q se llama tipoUsuario, en ella se guardan números del 1 al 5, y cada uno representa un tipo de usuario, 1=admin, 2=mecánica, 3= maquinaria, 4=proveeduría, 5=gerencia.

Lo que pasa es q cuando cargo esa columna en el grid.view, me muestra los números ya sea 1,2,3,4 ó 5, lo que quiero hacer es q se muestren las palabras correspondientes para los tipos de usuarios, que en vez de un 1 se muestre la palabra admin, en vez del número 2 se muestre la palabra mecánica y así…

con este código logré hacer eso mismo para ver si el estado es (1)activo o (2)inactivo,(en la BD se maneja con 1 ó 2)

array( ‘name’=>‘estado’,

'value'=>'$data["estado"]==1?"Activo":"Inactivo"', 


'filter' => array('1' => 'Activo', '2' => 'Inactivo',''=>'Todos')

),

pero solo funciona para 2 variables, y en mi caso manejo 5 varibles… cualquier información será bienvenida, ya que llevo bastantes horas dandole busqueda a ese código y nada de nada… saludos

Crea en el modelo de esa tabla una funcion similar a:




public static grupoTrabajo($valor){

  switch($valor){

    case 1: 

        return 'admin';

    break;

    case 2: 

        return 'mecanica';

    break;

    default:

        return 'desconocido';

    ..........................

  }

}



y en la vista o dende quieras obtener el nombre asociado a ese valor del modelo llama a ese método.

Así los valores están en el modelo y la función puede ser todo lo compleja que quieras.




array(

  'name'=>'estado',

  'value'=>'Usuario::grupoTrabajo($data["estado"])',

  'filter' => array()

),



El array del filtro tambien debería salir del modelo, puedes hacer que si es vacio el valor que se le pasa a la función devuelva el array completo y si pasa un valor devuelve la cadena asociada.

También lo puedes hacer como es debido y crear una tabla para tipos de usuario.

Si no, hazlo como te dice rahif.

Un saludo.

Muchas gracias, por mi cabeza rondaba una idea similar, pero ahora q lo dices, no me parece tan descabellada!!

SI lo q quería era hacer algo no muy complicado, y con esa sgerencia de arriba, creo que resultará. Gracias por tu ayuda.

perfecto lo probé y funciona… lo único fue hacer unos arreglitos, xq en el código que había q poner en el model, había q poner: public static function{} , quitando eso, todo estaba gnial, muchas muchas gracias rahif !

La verdad es que no lo puse muy bien,…

Para el problema que has comentado, lo más normal es hacerlo de la forma:

Crear en el modelo




    static GRUPO=array(1=>'admin', 2=>'mecánica', 3=> 'maquinaria');


    public static function grupoTrabajo($valor=null){

         if ($valor==null) 

             return self::$GRUPO;

         elseif (isset(self::$GRUPO[$valor]))

             return self::$GRUPO[$valor];

         else

             return 'Desconocido';

    }



y en el widget:




array(

  'name'=>'estado',

  'value'=>'Usuario::grupoTrabajo($data["estado"])',

  'filter' => Usuario::grupoTrabajo()

),



Así para modificar un elemento solo lo tienes que hacer en el array.

Aunque te parezca más complicado por tener más tablas, la realidad es muy distinta, ya q una base de datos bien diseñada te ahorra horas de programación, sobre todo en Yii.

Un saludo.