Le contrôle
DropDownList est également appelé contrôle de la liste déroulante Plusieurs lignes de données dans la liste de contrôle sont exprimées sous une forme implicite. Lorsque l'utilisateur doit sélectionner l'élément de liste souhaité, cliquez. Dans l'affichage graphique "triangle inférieur", l'utilisateur ne peut sélectionner qu'une seule donnée à la fois. Le contrôle DropDownList est en fait un conteneur pour les éléments de liste et la zone de liste déroulante utilise la collection Items pour représenter le contenu de chaque élément. Si en ASP. NET, remplissez manuellement la colonne options du tableau du contrôle DropDownList un par un Lorsqu'il y a de nombreux éléments de liste, il sera plus fastidieux et plus difficile à modifier. Le contrôle DropDownList est connecté dynamiquement à la base de données, interroge les données des options de liste de la base de données selon les conditions spécifiées, puis les lie au contrôle, qui peut afficher rapidement et facilement plusieurs options déroulantes. Dans le même temps, les options déroulantes peuvent être modifiées dynamiquement en modifiant les données de la base de données. Par exemple, dans le système de sélection du tuteur, lorsque le tuteur diplômé remplit les informations de candidature, il doit sélectionner le type de candidature, et les mêmes informations apparaissent sur plusieurs pages. Reliez les données du tableau des types de candidature dans la base de données. au contrôle DropDownList , peut mieux résoudre le problème.
Cet article présente en détail la liste déroulantele code d'implémentation spécifique de la liaison multi-niveaux dropDownList
View:
cdnauto/views/config/index .php
Le code est le suivant :
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('--请选择服务器--'));
Contrôleur :
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); } }
Modèle :
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']; }
Autres :
Structure de la table de données
Effet :
Aucune sélection Avant le nœud :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!