YII widget之dropDownList的二级联动与分组

第一建表:

CREATE TABLE IF NOT EXISTS `sw_category` (
  `id` int(11) NOT NULL auto_increment,
  `parent_id` int(11) NOT NULL,
  `name` varchar(20) collate utf8_unicode_ci NOT NULL,
  PRIMARY KEY  (`id`),
  KEY `province_id` (`pid`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=415 ;#分类表

CREATE TABLE IF NOT EXISTS `sw_topic` (
  `id` int(11) NOT NULL auto_increment,
  `name` varchar(128) collate utf8_unicode_ci NOT NULL,
  `category_id` int(11) default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;#成员表

第二 二级联动(控制值c.php 模型层category表 m_c.php topic表m_t.php视图层 v.php):

//C.php
public function actionAdd(){
$topicDetail = new Topic();$category_model = Category::model(); $categoryAll = $category_model->findAll(); $this ->render('add',array('topic_detail'=>$topicDetail,'category'=>$categoryAll));
}
public function actionDynamicSon($pid){
if(empty($pid)){ echo "";exit;}
$model = Topic::model()->getCityList($pid);
        foreach($model as $value=>$name){
            echo CHtml::tag('option',array('value'=>$value),CHtml::encode($name),true);
        }
}
//m_t.php
public function getPaList(){
	$model = Category::model()->findAllByAttributes(array('parent_id'=>0));
	return CHtml::listData($model, 'id', 'name');
}
public function getSonList($pid){
	$model = Category::model()->findAllByAttributes(array('parent_id'=>$pid));
	return CHtml::listData($model, 'id', 'name');
}
//V.php
	$form = $this->beginWidget('CActiveForm', array('id'=>'topic_form','htmlOptions'=>array('enctype'=>'multipart/form-data'),'enableAjaxValidation'=>true,));//multipart/form-data 开启上传 enableAjaxValidation开启ajax
	echo CHtml::dropDownList('par_id','',$topic_detail->paList,array('empty'=>'-请选择-','ajax'=>array('url'=>Yii::app()->createUrl('htm/topic/dynamicSon'),'data'=>array('pid'=>'js:this.value'),'update'=>'#Topic_category_id',),));//ajax请求数据
	echo $form->dropDownList($topic_detail,'category_id',$topic_detail->getCityList($topic_detail->category_id),array('empty'=>'-请选择-','multiple'=>true));


 PS:这段代码搞了我快一天,ajax一直无法实现;起初渲染我用的是renderPartial;后来发现需加载jquery,加上去之后还是不起作用,然后就有一个疑问,父级应该有个动作来执行请求啊,查看源码也没有发现异步请求;然后改用render再次查看源码,果然再页面最下放生成了一段onchange事件;render与renderPartial的区别,一直以为一个加载布局一个不加载的区别,看来还要再继续研究这两项;这段代码是在模块中写的  在模块中修改布局 只需在所对应的控制器后直接修改public $layout='/layouts/column2';OK 数据添加就算完成了 

第三 下拉框分组

在dropDownList的htmloptions中我加了个‘multiple’属性,即多选,所以在修改的时候 ajax这个做法是满足不了我的要求的(好吧,添加的时候也错了,我需要的不是二级联动 而是分组多选,被任务说明给忽悠了,白忙乎了~) 那下面我们通过修改来看看如何通过YII来对下拉框进行分组

//C.php

	$id = $_GET['id'];
	$topic_model = Topic::model();
	$topicDetail = $topic_model->findByPk($id);
	$category_model = Category::model();
	$categoryP = $category_model->findAll('parent_id=:pid',array(':pid'=>0));
	foreach($categoryP as $pk=>$pv){
		$parent[$pv->id]=$pv->name;
	}
	$categoryAll = $category_model->findAll('parent_id>:pid',array(':pid'=>0));
	foreach($categoryAll as $sk=>$sv){
		$categoryAll[$sk]->parent_id =$parent[$sv->parent_id]; //将父ID替换为父名称
	}
	$this ->render('update',array('topic_detail'=>$topicDetail,'category'=>$categoryAll));

//v.php
	echo $form->dropDownList($topic_detail,'category_id',CHtml::listData($category,"id","name","parent_id"),array("multiple"=>"multiple","options"=>array('$topic_detail["category"]'=>array('selected'=>true))));//listData(array $models, string $valueField, string $textField, string $groupField='')前三个参数就不解释了,第四个参数文档时这样说的‘列表选项组的属性名。如果是空,将不会生成组。’我们根据父级id进行分组即parent_id;但parent_id是实数,所以再控制层进行了一次转换;默认选定信息中分类
"options"=>array('$topic_detail["category"]'=>array('selected'=>true)) 这个只是对一个ID而言的 如果是多个ID的话就无效了,暂时还没有找到好的方法,再研究
好了 分组,ajax请求就此完毕

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值