Autor Tema: [SOLUCIONADO] Dependent DropdownList con Yii framework  (Leído 6633 veces)

0 Usuarios y 1 Visitante están viendo este tema.

graphixx

  • Visitante
Hola compañeros ya que es medio complicado implementar combos dependientes en el framework. les comparto el codigo trabajando.

Lo estoy implementando:
***********************

Modelo: CombosDependientes
Controlador: CombosDependientes
Vista: _form.php

Haciendo uso de los modelos:
****************************

Departamento:
codDepartamento
strDepartamento

Municipio:
codMunicipio
strMunicipio
codDepartamento

Corregimiento:
codCorregimiento
strCorregimiento
codMunicipio
codDepartamento

En el controlador:
Código: (php) [Seleccionar]
<?php
// Funcion para llenar combobox dependiente de lo que seleccione el usuario en Departamento/Municipio/Corregimiento

public function actionDynamicMunicipios()
    {
        
$data Municipio::model()->findAll('codDepartamento=:parent_id',
                        array(
':parent_id'=>(int) $_POST['CombosDependientes']['codDepartamento']));
 
 
        
$data CHtml::listData($data,'codMunicipio','strMunicipio');
echo CHtml::tag('option',array('value' => ''),'Seleccione un municipio...',true);
            foreach(
$data as $id => $value)
            {
                echo 
CHtml::tag('option',array('value' => $id),CHtml::encode($value),true);
            }
 
    }
 
    public function 
actionDynamicCorregimientos()
    {
        
$data Corregimiento::model()->findAll('codMunicipio=:parent_id',
                        array(
':parent_id'=>(int) $_POST['CombosDependientes']['codMunicipio']));
 
        
$data CHtml::listData($data,'codCorregimiento','strCorregimiento');
echo CHtml::tag('option',array('value' => ''),'Seleccione un corregimiento...',true);
            foreach(
$data as $id => $value)
            {
                echo 
CHtml::tag('option',array('value' => $id),CHtml::encode($value),true);
            }
    }
?>


En la vista:
Código: (php) [Seleccionar]
<!-- INICIO COMBOS DEPENDIENTES -->
<div class="row">
        <?php echo $form->labelEx($model,'Departamento'); ?>
        <?php 
              $departamento 
= new CDbCriteria
              
$departamento->order 'strDepartamento ASC';
        
?>

        <?php 
              
echo $form->dropDownList($model,'codDepartamento',CHtml::listData(Departamento::model()->findAll($departamento),'codDepartamento','strDepartamento'),
                        array(
                            
'ajax' => array(
                            
'type' => 'POST',
                            
'url' => CController::createUrl('CombosDependientes/dynamicMunicipios'),
                            
'update' => '#CombosDependientes_codMunicipio'
                        
),'prompt' => 'Seleccione un Departamento...'
                  
)
              );
        
?>

        <?php echo $form->error($model,'codDepartamento'); ?>
    </div>
 
    <div class="row">
        <?php echo $form->labelEx($model,'Municipio'); ?>
        <?php 
              $municipio 
= new CDbCriteria;
              
$municipio->order 'strMunicipio ASC';
        
?>

        <?php 
              
echo $form->dropDownList($model,'codMunicipio',CHtml::listData(Municipio::model()->findAll($municipio),'codMunicipio','strMunicipio'),
                        array(
                            
'ajax' => array(
                            
'type' => 'POST',
                            
'url' => CController::createUrl('CombosDependientes/dynamicCorregimientos'),
                            
'update' => '#CombosDependientes_codCorregimiento'
                        
),'prompt' => 'Seleccione un Municipio...'
                    
)
              );
        
?>

        <?php echo $form->error($model,'codMunicipio'); ?>
    </div>
 
 
    <div class="row">
 
        <?php echo $form->labelEx($model,'Corregimiento'); ?>
        <?php echo $form->dropDownList($model,'codCorregimiento',array('Seleccione un Corregimiento...'));?>
        <?php echo $form->error($model,'codCorregimiento'); ?>
    </div>
<!-- FIN COMBOS DEPENDIENTES -->

El codigo trabaja perfecto :D