Yii依赖dropDownList

时间:2014-09-12 08:12:36

标签: php ajax drop-down-menu yii

我需要使用yii创建依赖的dropDownLists。因此,我在控制器中创建一个视图和一个动作,如下所示:

视图

<?php
echo "<div class='row'>";
echo $form->labelEx($model, 'id_structure');
echo $form->dropDownList($model, 'id_structure', GxHtml::listDataEx(StructureInformation::model()->findAllAttributes()), 
array('ajax' => array('type' => 'POST', 
    'url' => CController::createUrl('InfoComplementAAjouter/fillTypeList'), 
    'update' => '#typeDonnee', 
    'data' => array('id_structure' => 'js:this.value'))
));
echo $form->error($model, 'id_structure');
echo '</div>';
echo "<div class='row'>";
echo $form->labelEx($model, 'type');
echo $form->dropDownList($model, 'type', array(), array('prompt' => 'Sélectionner', 'id' => 'typeDonnee'));
echo $form->error($model, 'type');
echo '<div>';
?>

现在,控制器InfoComplementAAjouterController中的操作

public function actionFillTypeList(){

        $id_struct = $_POST['InfoComplementAAjouter']['id_structure']; //I get the selected value
        $taille = StructureInformation::model()->find('id = ' . (int)$id_struct)->taille; //and then pass it to the StructureInformation model to obtain the attribute taille

        //I create two arrays which content will be the options of my dropDownList. 
        $un = array('text'=> 'Texte', 'radio' => 'Bouton radio', 'dropDownList' => 'Liste déroulante');
        $plusieurs = array( 'checkboxlist' => 'Choix multiple',);
        //If $taille == 1, I display the contents of $un; if $taille > 1, the content of $plusieurs will be displayed.
        if($taille == 1){
            foreach ($un AS $value => $name){
                $opt = array();
                $opt['value'] = $value;

                echo CHtml::tag('option', $opt, CHtml::encode($name), true);
            }
        }
       if($taille > 1){
            foreach ($plusieurs AS $value => $name){
                $opt = array();
                $opt['value'] = $value;

                echo CHtml::tag('option', $opt, CHtml::encode($name), true);
            }
        }
        die;
    }

我注意到该动作未被执行。我不明白为什么。 有人可以帮我解决问题吗?

1 个答案:

答案 0 :(得分:0)

我刚看到一个错字:

'upedate' => '#typeDonnee', 

应为'update'

尝试先修复它

修改

你有更多小错误/拼写错误

echo $form->dropDownList($model, 'id_structure', GxHtml::listDataEx(StructureInformation::model()->findAllAttributes(), 
array('ajax' => array('type' => 'POST', 
    'url' => CController::createUrl('InfoComplementAAjouter/fillTypeList'), 
    'update' => '#typeDonnee', 
    'data' => array('id_structure' => 'js:this.value'))
));

这里你需要关闭括号

=============================================== ==

StructureInformation::model()->findAllAttributes()

findAllAttributes()中没有CActiveRecord方法 也许你想使用findAllByAttributes(),但是你想要传递一些属性。如果这是您的自定义方法,那么您应该解释它是如何工作的,或粘贴代码

编辑2:

$_POST['InfoComplementAAjouter']['id_structure']

尝试访问这样的帖子:

$_POST['id_structure']

我认为你在该结构中发帖

复制你的情况对我来说并不容易,所以我有点在黑暗中拍摄