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