Na framework yii os métodos de criação de elementos de visualização HTML estão na classe estática CHtml e como tal a DropDownList não é excepção , se verificar na documentação da yii existem dois métodos para a criação destas listas temos o dropDownList() que permite criar dropdowslist html simples sem associação a model e a activeDropDownList() esta sim associada a um model.
- CHtml::dropDownList()
Onde :$name é o nome da lista, $select valor seleccionado ,$data array com os dados do tipo chave valor, $htmlOptions array das opções de Html bem como também definição do texto a mostrar no caso de permitir elemento vazio.
Neste primeiro exemplo é criado uma combobox com o nome 'Meunome' para escolher o sexo onde $selecionado é o que é apresentado caso seja vazio então mostrado o valor da opção 'empty' nas opções html.
echo CHtml::dropDownList('Meunome', $selecionado,array('M' => 'Masculino', 'F' => 'Feminino'),array('empty' => 'Escolha o sexo'));
Agora caso queira gerar os valores das opções dinamicamente do seu model tambem o poderá fazer basta recorrer ao método listData devolve uma lista do tipo chave, valor que pode ser usada na dropDownList.
$lista = CHtml::listData($model,'sexo_id', 'sexo_nome'); echo CHtml::dropDownList('Meunome', $selecionado,$lista ,array('empty' => 'Escolha o sexo'));
- CHtml::activedropDownList()
Neste primeiro exemplo é uma DropDownList simples para escolha do sexo quando do submit deste formulário no atributo sexo via ter um dos 3 possíveis valores M,F ou vazio .
echo CHtml::activeDropDownList($model,'sexo',array('M'=>'Masculino','F'=>'Feminino'),array('empty'=>'Escolha o sexo'))
Este exemplo é um pouco mais complexo mas a grande diferença é que os valores que o nosso atributo ‘tipo_cliente’ pode conter vem da tabela tipo_cliente onde o valor que assume é o id e o que é mostrado é o nome
$lista =CHtml::listData(tipo_cliente::model()->findAll(), 'id', 'nome'); echo CHtml::activeDropDownList($model,'tipo_cliente',$lista,array('empty'=>'Escolha o tipo de cliente'));
- Listas dropDown dependentes
E para concluir só dar uma visão geral como construir DropDownList desdentes ou seja os valores de uma dependa da selecção da outra:
Criamos a nossa dropDownList e nas opções de html vamos inserir a chave ‘ajax’ as opções desta chave são as mesma do jquery pois a yii vai gerar código jquery , no nosso caso vai fazer um pedido ao nosso controlo e este irá devolver as opções da lista a actualizar que actualizará as opções dessa lista.
echo CHtml::dropDownList('pais_id','', array(1=>'PORTUGAL',2=>'BRASIL',3=>'ANGOLA'), array( 'ajax' => array( 'type'=>'POST', //Tipo de pedidos outra alternativa GET 'url'=>'cidadesDinaminas', //url para chamar 'update'=>'#cidade_id', // Selector jquery da combo a actualizar))); //dropDownList a ser actualizada echo CHtml::dropDownList('cidade_id','', array()); // metodo do controlo que será chamado public function actionCidadesDinaminas() { $data=Location::model()->findAll('parent_id=:parent_id',array(':parent_id'=>(int) $_POST['pais_id'])); $data=CHtml::listData($data,'id','nome'); foreach($data as $value=>$nome) { echo CHtml::tag('option',array('value'=>$value),CHtml::encode($nome),true); } }
Recursos complementares:
Sem comentários:
Enviar um comentário