Page 1 of 1
Como atualizar 3 dropDownList Dinâmicamente
#1
Posted 16 December 2009 - 08:21 PM
Olá pessoal, estou com mais uma dúvida, como faço para atualizar 3 dropDownList dinâmicamente, um dependendo de outro tipo PAIS/ESTADO/CIDADES, isto é, um dropDownList pega os países de uma tabela do BD, e de acodo com o país o outro é atualizado com todos os estados e quando escolher o um estado o terceiro dropDownList seria atualizados com as cidades do estado selecionado. Alguém sabe como fazer isso ? Procurei no site mais só achei como atualizar 2 dropDownList e não 3, tentei usar a lógica usadas neles mas não está funcionando.
#2
Posted 18 December 2009 - 10:44 AM
Mas pq não funcionou? O que deu errado.
eu acho dica do CookBook é uma boa forma de fazer(Pra quem não sabe qual CookBook, http://www.yiiframew...oc/cookbook/24/).
Poste o código da sua view e do seu action, vamos ver se chegamos a uma solução.
eu acho dica do CookBook é uma boa forma de fazer(Pra quem não sabe qual CookBook, http://www.yiiframew...oc/cookbook/24/).
Poste o código da sua view e do seu action, vamos ver se chegamos a uma solução.
Every solution creates a problem.
twitter.com/nenhumnick
twitter.com/nenhumnick
#3
Posted 23 June 2010 - 03:29 PM
Segui exatamente o que o cookbook diz...
com 2 dropdown ta dando certo, mas, com três dropdown acaba nao funcionando..
código da view
Código da action
com 2 dropdown ta dando certo, mas, com três dropdown acaba nao funcionando..
código da view
echo '<div class="form">'; echo CHtml::beginForm(); echo '<p>'; echo CHtml::dropDownList('estado_id','', $data, array( 'empty' => 'Selecione uma estado', 'ajax' => array( 'type'=>'POST', //request type 'url'=>CController::createUrl('estado/dynamicMunicipio'), //url to call. 'update'=>'#municipio', //selector to update ))); echo ' </p> <p>'; echo CHtml::dropDownList('municipio','', array( 'empty' => 'Selecione uma estado', 'ajax' => array( 'type'=>'POST', //request type 'url'=>CController::createUrl('estado/dynamicUnidade'), //url to call. 'update'=>'#unidade', //selector to update ))); echo ' </p> <p>'; echo CHtml::dropDownList('unidade','', array('empty' => 'Selecione uma unidade')); echo '</p>'; echo CHtml::endForm(); echo '</div>';
Código da action
public function actionDynamicMunicipio() { $dataMunicipio=municipio::model()->findAll('estado_id=:estado_id', array(':estado_id'=>(int) $_POST['estado'])); $dataMunicipio=CHtml::listData($dataMunicipio,'id','nome'); foreach($dataMunicipio as $value=>$name) { echo CHtml::tag('option', array('value'=>$value),CHtml::encode($name),true); } } public function actionDynamicUnidade() { $dataUnidade=unidade::model()->findAll('municipio_id=:municipio_id', array(':municipio_id'=>(int) $_POST['municipio'])); $dataUnidade=CHtml::listData($dataUnidade,'id','nome'); foreach($dataUnidade as $value=>$name) { echo CHtml::tag('option', array('value'=>$value),CHtml::encode($name),true); } }
#4
Posted 24 June 2010 - 08:17 AM
De olho eu não ví nenhum erro.
Nenhum dos 2 combos funciona ou somente o segundo?
Nenhum dos 2 combos funciona ou somente o segundo?
Every solution creates a problem.
twitter.com/nenhumnick
twitter.com/nenhumnick
#6
Posted 24 June 2010 - 08:31 AM
acho eu que o grande erro esta na construção deste dropdownlist aqui
pois quando renderiza ele aparece assim
echo CHtml::dropDownList('municipio','', array( 'empty' => 'Selecione um estado', 'ajax' => array( 'type'=>'POST', //request type 'url'=>CController::createUrl('estado/dynamicUnidade'), //url to call. 'update'=>'#unidade', //selector to update )));
pois quando renderiza ele aparece assim
<select name="municipio" id="municipio"> <option value="empty">Selecione um estado</option> <optgroup label="ajax"> <option value="type">POST</option> <option value="url">/logol/index.php?r=estado/dynamicUnidade</option> <option value="update">#unidade</option> </optgroup> </select>
#7
Posted 24 June 2010 - 09:01 AM
ahh ta .. agora eu ví o erro ..
No segundo e no terçeiro dropDownList ta faltando um parâmetro.
ao inves de:
O correto seria:
O array no final do nome, ele é o parâmetro da lista de dados, que está faltando. Mesmo os dados sendo carregados dinamicamente, é necessário passar o parâmetro.
Este problema está nos dois últimos combos. Por isso gera aquele html e não faz a requisição ao servidor, pq ele está considerando os parâmetros de requisição como dados.
No segundo e no terçeiro dropDownList ta faltando um parâmetro.
ao inves de:
echo CHtml::dropDownList('municipio','', array( 'empty' => 'Selecione uma estado', 'ajax' => array( 'type'=>'POST', //request type 'url'=>CController::createUrl('estado/dynamicUnidade'), //url to call. 'update'=>'#unidade', //selector to update )));
O correto seria:
echo CHtml::dropDownList('municipio','', array(), array( 'empty' => 'Selecione uma estado', 'ajax' => array( 'type'=>'POST', //request type 'url'=>CController::createUrl('estado/dynamicUnidade'), //url to call. 'update'=>'#unidade', //selector to update )));
O array no final do nome, ele é o parâmetro da lista de dados, que está faltando. Mesmo os dados sendo carregados dinamicamente, é necessário passar o parâmetro.
Este problema está nos dois últimos combos. Por isso gera aquele html e não faz a requisição ao servidor, pq ele está considerando os parâmetros de requisição como dados.
Every solution creates a problem.
twitter.com/nenhumnick
twitter.com/nenhumnick
#10
Posted 28 June 2010 - 09:39 AM
TextBox?
?
Bom, de quaquer forma, o CHtml::dropDownList já tem alguns parâmetros pra se usar ajax.
Outros componentes html vc pode usar a função CHtml::ajax pra gerar o javascript da requisição e inserir num evento do html pelo parâmetro "htmlOptions".

Bom, de quaquer forma, o CHtml::dropDownList já tem alguns parâmetros pra se usar ajax.
Outros componentes html vc pode usar a função CHtml::ajax pra gerar o javascript da requisição e inserir num evento do html pelo parâmetro "htmlOptions".
Every solution creates a problem.
twitter.com/nenhumnick
twitter.com/nenhumnick
#11
Posted 29 June 2010 - 06:48 AM
Daniel A. Bastos, on 28 June 2010 - 09:39 AM, said:
TextBox?
?
Bom, de quaquer forma, o CHtml::dropDownList já tem alguns parâmetros pra se usar ajax.
Outros componentes html vc pode usar a função CHtml::ajax pra gerar o javascript da requisição e inserir num evento do html pelo parâmetro "htmlOptions".

Bom, de quaquer forma, o CHtml::dropDownList já tem alguns parâmetros pra se usar ajax.
Outros componentes html vc pode usar a função CHtml::ajax pra gerar o javascript da requisição e inserir num evento do html pelo parâmetro "htmlOptions".
Sim textbox imagina um dropdownmenu em que voce escolhe opção e dependendo da opção os textbox em baixo mudam o valor , por exemplo imagine um enquete multi-lingua em que vc tem um dropdownmenu com a respectiva linguage e dependendo da opçao os textbox apresentam os valores escritos nessa lingua.
Drop down lingua: |___PT-BR___|
Resposta 1: |_____ola ola_____|
Resposta 2: |_____ola ola2____|
Como implementar tudo isto nessa situação?
#12
Posted 29 June 2010 - 10:13 AM
bom, eu faria da seguinte forma:
Criaria uma nova action no meu controller, que seria responsável pela renderização via ajax da parte da enquete, que recebe um parâmetro na requisição e retorna a view na língua correta.
View do seu formulário:
Nova action no seu controller:
Mais a view da sua enquete com o que vc precisa, fazendo as traduções seguindo a variável request.
Obs: Da uma conferida no codigo ai em cima, pq eu fiz tudo de cabeça, ai já viu.. provavelmente tem erros.
Criaria uma nova action no meu controller, que seria responsável pela renderização via ajax da parte da enquete, que recebe um parâmetro na requisição e retorna a view na língua correta.
View do seu formulário:
<?php echo CHtml::dropDownList('lang',array(<lista de línguas>), array( 'empty' => 'Selecione uma língua', 'ajax' => array( 'type'=>'POST', 'url'=>$this->createUrl('enquete'), 'update'=>'#enqueteArea', ))); ?> <div id='enqueteArea'> </div>
Nova action no seu controller:
public function actionEnquete(){ $this->renderPartial('enquete', array('lang'=>$_REQUEST['lang']), true, true); }
Mais a view da sua enquete com o que vc precisa, fazendo as traduções seguindo a variável request.
Obs: Da uma conferida no codigo ai em cima, pq eu fiz tudo de cabeça, ai já viu.. provavelmente tem erros.
Every solution creates a problem.
twitter.com/nenhumnick
twitter.com/nenhumnick
Share this topic:
Page 1 of 1