ejemplo de campo estado, municipio, parroquia

PHOTO EMBED

Wed Oct 23 2024 14:23:07 GMT+0000 (Coordinated Universal Time)

Saved by @jrg_300i #undefined

<div class="col-xs-4" style="display: none;" id='id_estado'>
                                                    <?= $form->field($model, 'id_estado')->dropDownList(ArrayHelper::map(Estados::find()/*->where(['id_municipio'=> 2])*/->orderBy('desc_estado')->all(), 'id_estado', 'desc_estado'), ['prompt' => 'Seleccione ', 'id' => 'id-estado']); ?>
                                                </div>

                                                <div class="col-xs-4" style="display: none;" id='id_municipio'>

                                                    <?= $form->field($model, 'id_municipio')->widget(DepDrop::classname(), [
                                                        'options' => ['id' => 'id-ubicacion'],
                                                        'data' => $model->isNewRecord ? [] : ArrayHelper::map(Municipios::find()->where([ 'id_estado'=>$model->id_estado])->orderBy('desc_municipio')->asArray()->all(), 'id_municipio', 'desc_municipio'),
                                        
                                                        // ensure at least the preselected value is available
                                                        'pluginOptions' => [
                                                            'depends' => ['id-estado'],
                                                            // the id for cat attribute
                                                            'placeholder' => 'Seleccione un municipio...',
                                                            'url' => Url::to(['municipios/listar'])
                                                        ]
                                                    ]);
                                                    ?>
                                                </div>

                                                <div class="col-xs-4" style="display: none;" id='id_parroquia'>
                                                    <?= $form->field($model, 'id_parroquia')->widget(DepDrop::classname(), [
                                                        //'options'=>['id'=>'co_art_'.$regla->cod_linea.''],

                                                        'data' => $model->isNewRecord ? [] : ArrayHelper::map(Parroquias::find()->where(['id_municipio'=>$model->id_municipio])->orderBy('desc_parroquia')->asArray()->all(), 'id_parroquia', 'desc_parroquia'),
                                                        // ensure at least the preselected value is available
                                                        'pluginOptions' => [
                                                            'depends' => ['id-ubicacion'],
                                                            // the id for cat attribute
                                                            'placeholder' => 'Seleccione una parroquia...',
                                                            'url' => Url::to(['parroquias/listar'])
                                                        ]
                                                    ]);
                                                    ?>
                                                </div>

controlador municipio

public function actionListar() {
        $out = [];
        if (isset($_POST['depdrop_parents'])) {
            $parents = $_POST['depdrop_parents'];
            if ($parents != null) {
                $dep_id = $parents[0];
                //$hoy = date('Y-m-d');
                //$out = self::getSubCatList($cat_id);
                $out = \yii\helpers\ArrayHelper::toArray(Municipios::find()->where([ 'id_estado'=>$dep_id])->orderBy('desc_municipio')->all(), 'id_municipio', 'desc_municipio');
               
                $response = array();
                foreach ($out as $row) {
                  $arr['id'] = trim($row['id_municipio']);
                  $arr['name'] = trim($row['desc_municipio']);
                  array_push($response, $arr);
                }
                echo \yii\helpers\Json::encode(['output'=>$response, 'selected'=>'']);
                return;
            }
        }
        echo Json::encode(['output'=>'', 'selected'=>'']);
    }

controlador parroquia
public function actionListar() {
        $out = [];
        if (isset($_POST['depdrop_parents'])) {
            $parents = $_POST['depdrop_parents'];
    //var_dump($parents); die();
            if ($parents != null) {
                $dep_id = $parents[0];

                //para que se pueda cargar la parroquia en blanco, mientras no sea seleccionado un municipio
                if($dep_id == ""){
                          echo \yii\helpers\Json::encode(['output'=>'', 'selected'=>'']);
                          return;

                }
                //$hoy = date('Y-m-d');
                $out = yii\helpers\ArrayHelper::toArray(Parroquias::find()->where(['id_municipio'=>$dep_id])->orderBy('desc_parroquia')->all(), 'id_parroquia', 'desc_parroquia');

                $response = array();
                foreach ($out as $row) {
                  $arr['id'] = trim($row['id_parroquia']);
                  $arr['name'] = trim($row['desc_parroquia']);
                  array_push($response, $arr);
                }
                echo \yii\helpers\Json::encode(['output'=>$response, 'selected'=>'']);
                return;
            }
        }
        echo \yii\helpers\Json::encode(['output'=>'', 'selected'=>'']);
    }    

___________________otro ejemplo usando el modelo del mismo archivo este ejemplo es mas sencillo por que no hay que ponerle la condicion en data como en el ejemplo anterior
<div class="row">
        <div class="col-xs-1"></div>
        <div class="col-xs-3">
            <?= $form->field($model, 'id_estado')->dropDownList(ArrayHelper::map(Estados::find()->orderBy('desc_estado')->all(), 'id_estado', 'desc_estado'), ['prompt' => 'Seleccione un estado', 'id' => 'id-estado']); ?>
        </div>

        <div class="col-xs-3">
            <?= $form->field($model, 'id_municipio')->widget(DepDrop::classname(), [
                'options' => ['id' => 'id-municipio'],
                'data' => [$model->id_municipio => $model->municipio],
                // ensure at least the preselected value is available
                'pluginOptions' => [
                    'depends' => ['id-estado'],
                    // the id for cat attribute
                    'placeholder' => 'Seleccione un municipio...',
                    'url' => Url::to(['municipios/listar'])
                ]
            ]);
            ?>
        </div>
        <div class="col-xs-3">
            <?= $form->field($model, 'id_parroquia')->widget(DepDrop::classname(), [
                //'options'=>['id'=>'co_art_'.$regla->cod_linea.''],
            
                'data' => [$model->id_parroquia => $model->Parroquia],
                // ensure at least the preselected value is available
                'pluginOptions' => [
                    'depends' => ['id-municipio'],
                    // the id for cat attribute
                    'placeholder' => 'Seleccione una parroquia...',
                    'url' => Url::to(['parroquias/listar'])
                ]
            ]);
            ?>
        </div>
    </div>

depues colocar esto en el modelo solamente este ejemplo es mas sencillo que el anterior

public function getMunicipio(){
        if($this->id_municipio):
          $p = Municipios::findOne(['id_municipio'=>$this->id_municipio]);
          if ($p):
            $p = $p->desc_municipio;
          endif;
        else:
          $p = "";
        endif;
  
        return $p;
      }
  
       public function getParroquia(){
        if($this->id_parroquia):
          $p = Parroquias::findOne(['id_parroquia'=>$this->id_parroquia]);
          if ($p):
            $p = $p->desc_parroquia;
          endif;
        else:
          $p = "";
        endif;
  
        return $p;
      }
content_copyCOPY