Yii Framework Forum: Dropdownlist Dinâmico - Problema No Segundo Combo Com Ajax - Yii Framework Forum

Jump to content

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

Dropdownlist Dinâmico - Problema No Segundo Combo Com Ajax DropDownList Dinâmico - Problema no segundo combo com Ajax Rate Topic: -----

#1 User is offline   Electra 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 9
  • Joined: 09-February 12
  • Location:Santo André / SP

Posted 23 November 2012 - 06:56 AM

Bom dia pessoal!

Estou precisando de ajuda com DropDownList dinâmico. Minha tela tem 2 combos "Unidade" e "Pacote". Quando seleciono a unidade, carregam os pacotes da unidade e quando seleciono o pacote o sistema precisa verificar se o pacote tem vagas. Se tiver continua normal, mas se não tiver tem que escrever do lado do combo "Vagas esgotadas. Você entrará na lista de espera.".

Como essa é a primeira vez que faço isso, comecei com base no código que tem aqui: http://www.yiiframew...endent-dropdown

Encontrei uma versão com 3 combos dinâmicos e para começar já ajudaria. No terceiro combo eu carregaria o número de vagas disponíveis e depois que isso funcionasse ia em busca da exibição do texto pro usuário. Ficou assim:

COMBO UNIDADE
$unidade = CHtml::listData(CadUnidade::model()->findAll(array('condition'=>"flg_ativo='S' and flg_matriz='N'", 'order'=>'des_unidade')), 'cod_unidade', 'des_unidade');
echo CHtml::dropDownList('cod_unidade','', $unidade,
                array(
                    'prompt'=>'Selecione',
                    'ajax' => array(
                        'type'=>'POST',
                        'url'=>CController::createUrl('TemporadaCombo/Combo'), 
                        'dataType'=>'json',
                        'data'=>array('cod_unidade'=>'js:this.value'),  
                        'success'=>'function(data) {
                            $("#cod_pacote").html(data.dropDownPacote);
                            $("#vaga").html(data.dropDownVaga);
                        }',
            	)));


COMBO PACOTE
 echo CHtml::dropDownList('cod_pacote','', array(),
	                array(
	                    'prompt'=>'Selecione a Unidade',
	                    'ajax' => array(
	                        'type'=>'POST',
	                        'url'=>CController::createUrl('TemporadaCombo/VerificaVaga'), 
	                        'update'=>'#vaga', 
                        	'data'=>array('cod_pacote'=>'js:this.value'),
	            	)));


COMBO VAGA (PROVISÓRIO)
 echo CHtml::dropDownList('vaga','', array(), array('prompt'=>'Selecione o Pacote'));


CONTROLLER - COMBO
public function actionCombo()
{
     //Pacote		
     $unidade=$_POST['cod_unidade'];
     $consulta = "EXEC USP_GET_TEMPORADAPACOTE :unidade";
     $conexao=Yii::app()->db;
     $comando=$conexao->createCommand($consulta);
     $comando->bindParam(":unidade", $unidade, PDO::PARAM_STR);
     $resultado=$comando->queryAll();
		
     $data = CHtml::listData($resultado,'cod_pacote','des_pacote');
     $dropDownPacote = "<option value=''>Selecione o Pacote</option>"; 
     foreach($data as $value=>$name)
      	$dropDownPacote .= CHtml::tag('option', array('value'=>$value),CHtml::encode($name),true);
 
     //Avisa Vaga
     $avisaVaga = "<option value='null'>Selecione o Pacote</option>";;
 
     //return data (JSON formatted)
     echo CJSON::encode(array(
           'dropDownPacote'=>$dropDownPacote,
           'dropDownVaga'=>$avisaVaga
    ));
}


CONTROLLER - VERIFICAVAGA
public function VerificaVaga()
{
     $pacote=$_POST['cod_pacote'];
    	
     $consulta = "EXEC USP_GET_VAGASPACOTE :pacote";
     $conexao=Yii::app()->db;
     $comando=$conexao->createCommand($consulta);
     $comando->bindParam(":pacote", $pacote, PDO::PARAM_STR);
     $resultado=$comando->queryAll();
				
     $data = CHtml::listData($resultado,'vagas','vagas');
     echo "<option value=''>Selecione o Pacote</option>";
     foreach($data as $value=>$name)
        $dropDownVaga .= CHtml::tag('option', array('value'=>$value),CHtml::encode($name),true);
                
     //return data (JSON formatted)
     echo CJSON::encode(array(
         'dropDownVaga'=>$dropDownVaga
     ));
}


O carregamento dos dois primeiros combos está certinho, quando seleciono a unidade carrega os pacotes normalmente, mas o terceiro combo não funciona, fica vazio.......
Tentei debugar o código, mas aconteceu algo bem estranho, se debugo pela função "Combo" consigo fazer o passo-a-passo certinho, mas se quero debugar a "VerificaVaga" ele não faz nada, simplesmente ignora o breakpoint. Parece que nem dispara o ajax do segundo combo (uso o Zend para desenvolver).

Se alguém puder me ajudar a identificar esse problema seria muito bom! Funcionando vou em busca de como exibir a mensagem de texto pro usuário.

Valeu!
0

#2 User is offline   Newerton 

  • Master Member
  • PipPipPipPip
  • Yii
  • Group: Members
  • Posts: 808
  • Joined: 27-April 10
  • Location:Campo Grande/MS - Cambé/PR, Brasil

Posted 23 November 2012 - 07:21 AM

Electra,

Respondi aqui:
http://www.yiiframew...post__p__182539

Visualiza lá e responde aqui neste post.
Newerton Vargas de Araújo
0

#3 User is offline   Electra 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 9
  • Joined: 09-February 12
  • Location:Santo André / SP

Posted 23 November 2012 - 07:28 AM

View PostNewerton, on 23 November 2012 - 07:21 AM, said:

Electra,

Respondi aqui:
http://www.yiiframew...post__p__182539

Visualiza lá e responde aqui neste post.


Oi Newerton, bom dia.

Agradeço a resposta.

Verifiquei o que você pediu e os códigos aparecem! Olha só:

$('body').on('change','#cod_unidade',function(){jQuery.ajax({'type':'POST','url':'/PORTAL/index.php/pt_br/TemporadaCombo/Combo','dataType':'json','data':{'cod_unidade':this.value},'success':function(data) {

                            $("#cod_pacote").html(data.dropDownPacote);

                            $("#vaga").html(data.dropDownVaga);

                        },'cache':false});return false;});
$('body').on('change','#cod_pacote',function(){jQuery.ajax({'type':'POST','url':'/PORTAL/index.php/pt_br/TemporadaCombo/VerificaVaga','data':{'cod_pacote':this.value},'cache':false,'success':function(html){jQuery("#vaga").html(html)}});return false;});


Deveria mesmo funcionar....... :[

Alguma sugestão?

Valeu
0

#4 User is offline   Newerton 

  • Master Member
  • PipPipPipPip
  • Yii
  • Group: Members
  • Posts: 808
  • Joined: 27-April 10
  • Location:Campo Grande/MS - Cambé/PR, Brasil

Posted 23 November 2012 - 03:14 PM

Electra,

Quando você seleciona o <select #cod_pacote> ele não acontece nada em ajax? Verifico pelo Firebug do Firefox ou Chrome se é pelo menos chamado a URL?
Newerton Vargas de Araújo
0

#5 User is offline   Electra 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 9
  • Joined: 09-February 12
  • Location:Santo André / SP

Posted 26 November 2012 - 09:45 AM

Oi Newerton,

Isso mesmo não faz nada!

Estou verificando pelo Firebug, mas ainda não encontrei nada que justificasse, ele chama o Ajax normal, mas não carrega o combo.

Fiz um teste agora cedo de colocar o combo direto na view com valor de parâmetro fixo pra ver se carregava e carregou... parece que tem alguma coisa acontecendo entre combo Pacote, function que calcula vaga e combo de Vaga, mas tá difícil encontrar o que.......

Se eu tiver novidades posto aqui....

Agradeço novamente.
0

#6 User is offline   Electra 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 9
  • Joined: 09-February 12
  • Location:Santo André / SP

Posted 26 November 2012 - 11:57 AM

Pessoal,

Consegui resolver a primeira parte do problema! Agora os três combos carregam.

O que eu fiz foi trocar o código de retorno da function VerificaVaga para:

foreach($data as $value=>$name)
                echo CHtml::tag('option', array('value'=>$value),CHtml::encode($name),true);


Resolveu!

Agora só preciso descobrir como voltar esse resultado, que agora carrega num combo, para uma label na minha view.

Tendo novidades posto aqui.
0

#7 User is offline   Electra 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 9
  • Joined: 09-February 12
  • Location:Santo André / SP

Posted 26 November 2012 - 12:21 PM

Resolvido pessoal!

Na view basta colocar:

<?php 
  echo CHtml::label('','',array('id'=>'vaga'));
?>


E no retorno da function:
foreach($data as $value=>$name)
    echo CHtml::tag('label', array('value'=>$value),CHtml::encode($name),true);

0

#8 User is offline   Newerton 

  • Master Member
  • PipPipPipPip
  • Yii
  • Group: Members
  • Posts: 808
  • Joined: 27-April 10
  • Location:Campo Grande/MS - Cambé/PR, Brasil

Posted 26 November 2012 - 01:14 PM

Opa, parabéns ;)
Newerton Vargas de Araújo
0

#9 User is offline   Electra 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 9
  • Joined: 09-February 12
  • Location:Santo André / SP

Posted 26 November 2012 - 01:30 PM

View PostNewerton, on 26 November 2012 - 01:14 PM, said:

Opa, parabéns ;)

Obrigada!!! :)

Mas você me deu uma ajuda boa! ;)
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