Hola a todos, despues de intentar varias cosa para otener el nombre de usuario completo en un dropDownList he creado una solución que creo que a muchos le servira, dado que es una opcion util para cualquier caso…
Les explico mi problema primero:
yo tengo una tabla usuarios ya saben almaceno idusuario, nombre, apellido, etc…
entonces en un dropDownList yo quiero mostrar el nombre y el apellido asi:
Pepito Perez, pero no me era posible pues al usar el CHtml::listData solo obtenia Pepito, asi que busque y intecte de todo pero todo era un complique para mostrar como yo queria asi que pense un poco y cree lo siguiente, yo se que no sera la mejor opcion pero almenos esta funciona bien y lo mejor sirve para cualquier caso de dropDownList.
cree un modelo en la carpeta models llamado HHtml.php que contiene lo siguiente:
su_apps->protected->models->HHtml.php
<?php
class HHtml extends CActiveRecord
{
public function listData($arrayDatos,$value,$campo_1,$campo_2='')
{
/*
$arrayDatos=array que contiene los datos
$value = id o campo para las key o values. Ej:iduser
$campo_1 = texto que se va mostrar campo_1. Ej:nombre
$campo_2= texto que se va mostrar campo_2. Ej:apellido
*/
$values = array(); //array utilizado para guardar los values del select
$texto = array(); //array utilizado para guardar el texto que se mostrara en las opciones del select
$listCombo=array(); //array que contine los option con sus value y texto
if ($arrayDatos!=null && $value!=null && $campo_1!=null) {
foreach ($arrayDatos as $key) { //recorremos el array de los datos
array_push($values, $key->$value); //añadimos el nuevo valor o value al array values
if ($campo_2!='' && $campo_2!=null) {//validamos si viene el segundo campo
# code...
array_push($texto, ucwords(strtolower($key[$campo_1].' '.$key[$campo_2]))); //añadimos el texto correspondiente del value al array texto
}else{
array_push($texto, ucwords(strtolower($key[$campo_1]))); //añadimos el texto correspondiente del value al array texto
}
}
}
/* Combinamos los dos array values y texto para otener el un solo array.
Ej: el resultado sera algo como esto <option name='xx' value='$values'>$texto</option>
es decir; <option name='xx' value='5'>Manzana</option> */
$listCombo=array_combine($values, $texto);
return $listCombo;
}
}
?>
NOTA: Yo cree un nuevo modelo para esto pero si ustedes quieren no tienen que crearlo solo creen el metodo dentro de cualquier modelo de los que ya tiene.
Ahora en la vista donde lo necesiten solo tien que hacer lo siguiente:
<?php
echo $form->dropDownList($model,'userid',HHtml::listData(Usuario::model()->findAll(),'idusuario','nombre','apellido'),array('prompt'=>'Seleccione...'));
?>
o esto si no crearon el modelo HHtml.php
<?php
echo $form->dropDownList($model,'userid',su_modelo::listData(Usuario::model()->findAll(),'idusuario','nombre','apellido'),array('prompt'=>'Seleccione...'));
?>
Espero les sea de mucha ayuda.