Yii Framework Forum: Como atualizar 3 dropDownList Dinâmicamente - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Como atualizar 3 dropDownList Dinâmicamente Rate Topic: -----

#1 User is offline   jbsalgado 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 2
  • Joined: 25-November 09

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.
0

#2 User is offline   Daniel Augusto Bastos 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 347
  • Joined: 25-May 09
  • Location:Rio de Janeiro - Brasil

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. 


Every solution creates a problem.
twitter.com/nenhumnick
0

#3 User is offline   Odair Soares 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 7
  • Joined: 16-February 10

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

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);
    }
}

0

#4 User is offline   Daniel Augusto Bastos 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 347
  • Joined: 25-May 09
  • Location:Rio de Janeiro - Brasil

Posted 24 June 2010 - 08:17 AM

De olho eu não ví nenhum erro. 

Nenhum dos 2 combos funciona ou somente o segundo?


Every solution creates a problem.
twitter.com/nenhumnick
0

#5 User is offline   Odair Soares 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 7
  • Joined: 16-February 10

Posted 24 June 2010 - 08:27 AM

somente o segundo não funciona
0

#6 User is offline   Odair Soares 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 7
  • Joined: 16-February 10

Posted 24 June 2010 - 08:31 AM

acho eu que o grande erro esta na construção deste dropdownlist aqui

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>

0

#7 User is offline   Daniel Augusto Bastos 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 347
  • Joined: 25-May 09
  • Location:Rio de Janeiro - Brasil

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:

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
0

#8 User is offline   Odair Soares 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 7
  • Joined: 16-February 10

Posted 24 June 2010 - 12:49 PM

deu certo :)

cara muito obrigado mesmo.
0

#9 User is offline   koz 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 35
  • Joined: 23-June 10

Posted 25 June 2010 - 06:48 AM

Como fazer se forem textbox envez de drop down??
0

#10 User is offline   Daniel Augusto Bastos 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 347
  • Joined: 25-May 09
  • Location:Rio de Janeiro - Brasil

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".


Every solution creates a problem.
twitter.com/nenhumnick
0

#11 User is offline   koz 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 35
  • Joined: 23-June 10

Posted 29 June 2010 - 06:48 AM

View PostDaniel 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".


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?
0

#12 User is offline   Daniel Augusto Bastos 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 347
  • Joined: 25-May 09
  • Location:Rio de Janeiro - Brasil

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:
<?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
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users