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.yiiframework.com/wiki/24/creating-a-dependent-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!