在做一個小項目,有項目,預算和採購三張表,項目包含多個預算,預算包含採購。
在創建採購的時候就需要下拉菜單來選擇項目和預算了。先選擇項目,再更具項目選擇預算。 所以需要耳機聯動的下拉菜單。
原來直接用CHtml就可以做出來了,在百度之前我還一直想着自己怎麼寫。
看了好多博客,自己總結一下吧。
視圖裏面的代碼:
<div class="row">
<?php echo $form->labelEx($model,'prj_id'); ?>
<?php
$prjs = Project::items();
echo CHtml::dropDownList('Caigou[prj_id]', '', //這裏是父菜單
$prjs, //父級數組 array('父級ID1'=>'父級名稱1')
array(
'name'=>'Caigou[prj_id]', //名稱
'empty'=>'請選擇', //空時顯示
'ajax'=>array( //選項切換時進行ajax操作
'type'=>'post', // ajax type
'url'=>Yii::app()->createUrl('yusuan/Childyuan'), //路徑
'update'=>'#Caigou_yusuan_id', //更新的ID,這裏貌似要注意一下
'data'=>array('pid'=>'js:this.value') //獲取本身的值,作爲Post數據
)
)
);
?>
<?php echo $form->error($model,'prj_id'); ?>
</div>
<div class="row">
<?php echo $form->labelEx($model,'yusuan_id'); ?>
<?php echo CHtml::dropDownList('Caigou[yusuan_id]', '', array(), array('name'=>'', 'empty'=>'----------'));?> //這裏是子菜單
<?php echo $form->error($model,'yusuan_id'); ?>
</div>
控制器裏面的代碼:也就是Post的Childyuan方法
public function actionChildyuan(){
$items = Yusuan::model()->findAll(array(
'condition' =>'prj_id=:pid',
'params' =>array( ':pid' =>(int)$_POST['pid']) ,
));
$items = CHtml::listData($items,'id','name');
foreach($items as $k=>$v){
echo CHtml::tag('option', array('value'=>$k), CHtml::encode($v), true); //這裏要小心
}
}