TUTORIAL YII FRAMEWORK (CAPÍTULO 13) – COMBOS DEPENDIENTES

La idea es la siguiente: Queremos dos combos, Tipo Organismo y Organismo, la idea es que al momento de escoger un tipo de organismo se despliegue en el segundo combo los distintos organismos que pertenecen a ese tipo para ello utilizamos el siguiente código en el _form:

 // Tipo de organismos
 <div class="row">
 <?php echo $form->labelEx($model,'id_tipo_org');
 // Nombre de la etiqueta a mostrar ej: Tipo Organización
 $departamento = new CDbCriteria;
 // Preparamos los parámetros de búsqueda
 $departamento->order = 'descripcion ASC';
 // ordenamos alfabéticamente
 echo $form->dropDownList($model,'id_tipo_org',
 // id_tipo_org es el nombre del campo en el modelo
 CHtml::listData(TipoOrgG::model()->findAll($departamento),
 // TipoOrgG es el modelo en el que se buscaran los datos
 'id_tipo_org','descripcion'),
 // id_tipo_org es el dato que se quiere guardar y
 // descripción lo que se quiere mostrar
 array('ajax' => array('type' => 'POST',
 'url' => CController::createUrl('Correspondencia/cargarorganismos'), //
 la acción que va a cargar el segundo div
 'update' => '#Correspondencia_id_org_g'
 // el div que se va a actualizar
 ),'prompt' => 'Seleccione un Tipo'
 // Valor por defecto
 )
 );
 echo $form->error($model,'id_tipo_org'); ?>
 </div>
 // Segundo Combo, organismos
 <div class="row">
 <?php echo $form->labelEx($model,'id_org_g');

if ($model->isNewRecord==1)
 //Si se está creando un registro nuevo
 {
 echo $form->dropDownList($model,'id_org_g',
 array('0' => 'Seleccione un Organismo'));
 // se muestra solo Seleccione un Organismo
 }
 else {
 $tipo=$model->id_tipo_org;
 // Si se está modificando un registro
 $sql="select count(id_org_g) from organismos_g where id_tipo_org='$tipo';";
 //
 $connection=Yii::app()->db;
 //
 $command=$connection->createCommand($sql);
 //
 $row=$command->queryRow();
 //
 $bandera=$row['count'];
 //
 if ($bandera==0) {
 //
 echo $form->dropDownList($model,'id_org_g',
 array('0' => 'Seleccione un Organismo')); }
 // Si el tipo de organismo no tiene ningún
 else {
 // organismo solo muestra Seleccione un Organismo
 echo $form->dropDownList($model,'id_org_g',
 CHtml::listData(OrganismosG::model()->findAllBySql(
 //Aquí van los datos de la búsqueda del segundo combo
 "select * from organismos_g where id_tipo_org
 =:keyword order by id_org_g=:clave2 asc",
 array(':keyword'=>$model->id_tipo_org,':clave2'=>$model->id_org_g)),
 'id_org_g','descripcion'));
 }
 }
 ?></div>

En el controlador colocamos la siguiente función:

 public function actionCargarorganismos()
 {
 $data=OrganismosG::model()->findAllBySql(
 "select * from organismos_g where id_tipo_org
 =:keyword or id_org_g=0 order by id_org_g=0 desc, descripcion asc",
 // Aquí buscamos los diferentes organismos que pertenecen al tipo elegido
 array(':keyword'=>$_POST['Correspondencia']['id_tipo_org']));
 $data=CHtml::listData($data,'id_org_g','descripcion');
 foreach($data as $value=>$name)
 {
 echo CHtml::tag('option', array('value'=>$value),CHtml::encode($name),true);
 }
 }

Hay que darle permisos a la acción cargarorganismos.

Anuncios

Publicado el 27/01/2012 en Yii Framework. Añade a favoritos el enlace permanente. 11 comentarios.

  1. Hola sera posible que puedas enviarme el código fuente junto con el sql del ejemplo que muestras.

  2. entonces podrías colocar las tablas que utilizas con sus campos respectivos.

  3. otra pregunta como hago para hacer que 2 combos dependan de 1??

  4. como das permisos a las función cargarorganismos???

  5. Gabriel, buenas noches.
    Que me conviene hacer en el caso que tengo un cgridview con datos de empleados y al seleccionar uno, en otro cgridview se debe mostrar su horario de trabajo para determinada fecha

    Saludos y gracias nuevamente.

Tu Opinión es Importante, Comenta!

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s