У меня есть страны, штаты, таблицы городов, и мне нужно 3 раскрывающихся меню, в которых, если я выберу такую страну, как, например, Соединенные Штаты, выпадающее меню состояний автоматически отобразит только состояния, находящиеся под Соединенными Штатами, а затем, если я выберу например, в Калифорнии, выпадающее меню «Города» будет показывать только города в Калифорнии
В настоящее время у меня проблема с реализацией этого в yii. У меня есть этот файл _form, в который должны быть включены эти 3 раскрывающегося списка. У меня есть частичный код, но я не могу понять, как это сделать
это от контроллера
public function actionDynamicstates() { $sql = "SELECT StateName FROM gg_t_worldareasstates ". "WHERE CountryID = :countryid"; $command = Yii::app()->createCommand($sql); $command->bindValue(':countryid', $_POST['CountryID'], PDO::PARAM_INT); $data = $command->execute(); $data = CHtml::listData($data,'StateID','StateName'); foreach($data as $value=>$name) { echo CHtml::tag('option', array('value'=>$value),CHtml::encode($name),true); } }
это из файла вида _form
<div class="row"> <?php $country = new CDbCriteria; $country->order = 'CountryName ASC'; echo $form->dropDownList($model, 'CountryID', CHtml::listData ( Worldareascountries::model()->findAll($country), 'CountryID', array ( 'ajax' => array ( 'type' => 'POST', 'url' => CController::createUrl('wsmembersdetails/dynamicstates'), 'update' => '#StateID', ) ) ) ); echo $form->dropDownList('StateID','', array()); ?> </div>
Я изменил эти коды выше в этот
<div class="row"> <?php echo $form->labelEx($model,'Country'); ?> <?php $country = new CDbCriteria; $country->order = 'CountryName ASC'; ?> <?php echo $form->dropDownList($model,'CountryID',CHtml::listData(Worldareascountries::model()->findAll($country),'CountryID','CountryName'), array( 'ajax' => array( 'type' => 'POST', 'url' => CController::createUrl('wsmembersdetails/dynamicstates'), 'update' => "#StateID" ) ) ); ?> <?php echo $form->error($model,'CountryID'); ?> </div> <div class="row"> <?php echo $form->labelEx($model,'State'); ?> <?php $state = new CDbCriteria; $state->order = 'StateName ASC'; ?> <?php echo $form->dropDownList($model,'StateID',CHtml::listData(Worldareasstates::model()->findAll($state),'StateID','StateName'), array( 'ajax' => array( 'type' => 'POST', 'url' => CController::createUrl('wsmembersdetails/dynamiccities'), 'update' => '#CityID' ) ) ); ?> <?php echo $form->error($model,'StateID'); ?> </div> <div class="row"> <?php echo $form->labelEx($model,'CityID'); ?> <?php echo $form->dropDownList($model,'CityID','',array());?> <?php echo $form->error($model,'CityID'); ?>
изменить эту строку
$ data = $ command-> execute ();
в
$ data = $ command-> query ();
эта проблема была решена, она находится на yii wiki docs