首页 >后端开发 >php教程 >php 下拉列表多级联动dropDownList示例代码

php 下拉列表多级联动dropDownList示例代码

怪我咯
怪我咯原创
2017-07-12 15:45:412442浏览

DropDownList控件又称下拉列表框控件, 控件 列表 中的多行数 据 以隐含 的形式表 示 出 来,当用户需要选择所需列表项时,通过点击 “下三角 ”图形 展示 ,用户每次 只能选用一个 数据项。DropDownList控件实际上是列表项 的 容器 ,下拉列表框 用 Items集合表示各项 的内 容。如果在 ASP.NET页面中逐个 的手 动填写 DropDownList控件的列表选项,当列表项很多 的时候会 比较繁琐 ,而且修改 比较麻烦 。 DropDownList控件动态连接到数据库,按指定 条件从数据库 中查询 出列表选项数据,然后绑 定到控件,可以方便快速地显示出多个下拉选 项 。 同时 ,通过修 改数据库 中数据 ,可 以动 态改 变下 拉选项。例如 ,在导 师遴 选系统 中, 研究生导师填写申请信息 的时候 ,需要选 择申 请类型,而且同样的信息在多处页面出现,将 数据库中申请类型表的数据绑定到 DropDownList控件上,能比较好的解决问题。

本文为大家详细介绍下下拉列表多级联动 dropDownList具体的实现代码

视图:
cdnauto/views/config/index.php

代码如下:

echo CHtml::dropDownList('node', '', CHtml::listData(Node::model()->findAll(),'name','name'),array('empty'=>'--请选择节点--', 
'id' => 'node', 
'ajax'=>array( 
'type'=>'POST', 
'url'=>Yii::app()->createUrl('cdnauto/config/getNodeServersByNodeName'), 
'update'=>'#servers', 
'data'=>array('node_name'=>'js:$("#node").val()'), 
) 
) 
); 
echo "        "; 
echo CHtml::dropDownList('servers', '', array('--请选择服务器--'));

控制器
cdnauto/controllers/ConfigController.php 

public function actionGetNodeServersByNodeName(){ 
// if(!Yii::app()->request->isAjaxRequest) 
// throw new CHttpException(404); 
$node_name = $_POST['node_name']; 
$nodeid = Node::model()->getNodeId($_POST['node_name']); //通过节点名称获取该节点ID 
$server = GossServer::model()->getServerByNodeid($nodeid); //通过节点ID获取服务器信息 
//$server 为array类型,形如 $server = array(array('name'=>'name1'),array('name'=>'name2'));所以需要两次foreach 
if(isset($server)){ 
foreach ($server as $k=>$v){ 
foreach($v as $kk => $vv){ 
echo CHtml::tag('option', array('value'=>$kk), CHtml::encode($vv), true); 
} 
} 
}else{ 
echo CHtml::tag('option', array('value'=>''), 'servers', true); 
} 
}

模型:
GossServer.php 

/** 
* 通过节点ID获取该节点下所有的服务器名称 
* @author ysdaniel 
*/ 
public static function getServerByNodeid($nodeid) 
{ 
$sql = "SELECT name FROM OSS_Server WHERE nodeid = '{$nodeid}' "; 
///$sql = "SELECT name,nodeid FROM OSS_Server WHERE nodeid = '{$nodeid}' "; //both ok 
$cmd = Yii::app()->db->createCommand($sql); 
$ret = $cmd->queryAll(); 
if (!$ret){ 
throw new Exception("找不到这个节点对应的服务器"); 
} 
return $ret; 
}

Node.php 

/** 
* 通过nodename获取nodeid名 
* @author 
*/ 
public static function getNodeId($name) 
{ 
$sql = "SELECT id FROM OSS_Node WHERE name = '{$name}'"; 
$cmd = Yii::app()->db->createCommand($sql); 
$ret = $cmd->queryAll(); 
if (!$ret){ 
return null; 
//throw new Exception("找不到Node{$name}"); 
} 
return $ret[0]['id']; 
}

其它
数据表结构
效果:
没有选择节点前:
201306271718331.gif

以上是php 下拉列表多级联动dropDownList示例代码的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn