[SOLUCIONADO] Dependent DropdownList con Yii framework

Iniciado por Graphixx, 19 Mayo 2011, 17:45 PM

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

Graphixx

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
Nada tiene fin solo hay pequeñas pausas, pausas que determinan el comienzo de otros. Graphixx
Mi blog

Nakp

#1
pues... no discutire la forma en que trabajas con Yii, no lo he usado a fondo pero.. por que llamas al modelo en una vista? x_X

supongo que lo estas haciendo en base a este tutorial :xD

http://www.yiiframework.com/wiki/24/creating-a-dependent-dropdown/

no veo nada distinto mas que el replace :P  perdona que no lo compruebe yo mismo pero me gustan mas otros frameworks xD
Ojo por ojo, y el mundo acabará ciego.

Graphixx

ya lo solucione yo solo  ::) A proposito compa, en que desarrollas, Kumbia, Cake, Zend ???....
Nada tiene fin solo hay pequeñas pausas, pausas que determinan el comienzo de otros. Graphixx
Mi blog

Nakp

codeigniter, fuel, doophp, a veces zend :) +jquery hardcoded xD
Ojo por ojo, y el mundo acabará ciego.

pabloramirez77

Hola amigo, estoy probando tu codigo pero el mismo no me funciona, te anexo mi codigo a ver si me puedes ayudar.

Lo estoy implementando:
***********************
Modelo: Institucion
Controlador: InstitucionController
Vista: _form.php

_form.php
<?php
// Funcion para llenar combobox dependiente de lo que seleccione el usuario en Estado/Municipio/Parroquia   
   <!-- INICIO COMBOS DEPENDIENTES -->
   
   <div class="row">
       <?php echo $form->labelEx($model,'Estado'); ?>
       <?php
             $estado = new CDbCriteria;
             $estado->order = 'nombre_estado ASC';
       ?>
       <?php
             echo $form->dropDownList($model,'id_estado',CHtml::listData(estado::model()->findAll($estado),'id_estado', 'nombre_estado'),
                       array(
                           'ajax' => array(
                           'type' => 'POST',
                           'url' => CController::createUrl('InstitucionController/actionDynamicMunicipios'),
                           'update' => '#InstitucionController_id_municipio'
                       )   ,'prompt' => 'Seleccione un estado..'    
                 )
             );
       ?>
       <?php echo $form->error($model,'id_estado'); ?>
   </div>
   
   <div class="row">
       <?php echo $form->labelEx($model,'Municipio'); ?>
       <?php
             $municipio = new CDbCriteria;
             $municipio->order = 'Nombre_Municipio ASC';
       ?>
       <?php
             echo $form->dropDownList($model,'id_municipio',CHtml::listData(municipio::model()->findAll($municipio),'id_municipio','nombre_municipio'),
                       array(
                           'ajax' => array(
                           'type' => 'POST',
                           'url' => CController::createUrl('CombosDependientes/dynamicCorregimientos'),
                           'update' => '#InstitucionController_id_parroquia'
                       ),'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,'id_parroquia',array('Seleccione un Corregimiento...'));?>
       <?php echo $form->error($model,'id_parroquia'); ?>
   </div>
   
   <!-- FIN COMBOS DEPENDIENTES -->


?>

InstitucionController.php
public function actionDynamicMunicipios()
   {
       $data = Municipio::model()->findAll('codDepartamento=:parent_id',
                       array(':parent_id'=>(int) $_POST['Institucion']['id_estado']));


       $data = CHtml::listData($data,'id_Municipio','nombre_Municipio');
      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['Institucion']['id_municipio']));

       $data = CHtml::listData($data,'id_parroquia','nombre_parroquia');
      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);
           }
   }

pabloramirez77

Gracias buen amigo ya encontre la solucion.. un abrazo

tamayo461

Hola, alguien me podria ayudar con yii dramework?

Graphixx

Nada tiene fin solo hay pequeñas pausas, pausas que determinan el comienzo de otros. Graphixx
Mi blog