Como carregar Dropdown diânico no Update

Olá pessoal, fiz um combobox dinâmico de Estado / Cidade onde pego os dados do Dropdown Estado do banco e ao atualizar-lo ele atualiza automaticamente o dropdown Cidade, até ai tudo bem, funciona perfeitamente.

Guardo apenas o id da cidade na tabela onde tem o endereço completo de quem esta preenchendo o formulário.

Na minha tabela cidade tenho os campos: idcidade, idestado, nome_cidade.

Na minha tabela estado tenho os campos: idestado, idpais, nome_estado, sgl_estado.

Até ai tudo bem, o Dropdown dinâmico funcionou perfeitamente.

No meu formulário como já disse tenho os dropdowns Estado e Cidade além de outros que não preciso dizer. O input Cidade manda valor para o model e Estado só esta lá para fazer aparecer as cidades.

Quando faço o Insert tudo bem, meu problema é quando vou fazer o Update, quando abro qualquer tela de Update nem o Campo Estado nem o Campo Cidade vem preenchido com o que o controler resgata do banco pelo model e este é meu problema, como faço para fazer com que o Campo Estado e Cidade fiquem já com seus valores corretos ao acessar o _form dentro do Update?

Desculpem, acho que enrolei demais para falar o problema, mas precisei fazer isso pq sem isso nem eu estava entendendo.

Breno,

Posta pra nós, a parte do form que tem esses 2 DropDown, eu tenho a solução.

Opa, só se for agora, segue o código que esta no _form abaixo:




<div class="row">


    <?php echo $form->labelEx($model,'Estado'); ?>


    <?php

        $estado = Estado::model()->findAllEstado();

            echo CHtml::dropDownList('estado','', $estado,

            array(

            'empty' => 'Selecione um estado',


            'ajax' => array(

            'type'=>'POST',

            'url'=>CController::createUrl('pessoa/dynamiccities'),

            'update'=>'#idcidade',

        )));


    ?>

</div>


<div class="row">

        <?php echo $form->labelEx($model,'idcidade'); ?>

        <?php echo CHtml::dropDownList('idcidade','', array(), array('empty' => 'Selecione uma cidade')); ?>

        <?php echo $form->error($model,'idcidade'); ?>

</div>



Obrigado,

esta nesse outro post onde conversavamos hoje cedo

Ola pessoal eu vi o exemplo de tres(2) dropdown (estado cidade) mas tentei adaptar ao do meu mas não consegui fazer.desculpa pela ignorancia eu sou novato.eu tenho 3 tabelas(categorias, subcategorias, e inscricao).eu quero fazer o seguinte dentro do formulario aluno quero que as 3 tabelas seria um dropdown dinamico.

categoria( id_categorias (int), nome_categorias(varchar));

subcategorias(id_subcategorias(int), id_categorias(int),nome_subcategorias(varchar));

inscricao(id_inscricao(int), id_subcategorias(int),tipo_inscricao(varchar));

Ficaria muita mais facil min explicar em que ficheiro editar os codigos.tambem tenho uma duvida em ‘url’=>CController::createUrl(‘pessoa/dynamiccities’) como criar o ficheiro? e onde fica? e o que que fica ali dentro? dynamiccities ,

obrigado

Breno,

Segue a minha solução, com exemplo do meu Model - Cliente.




class Cliente extends CActiveRecord {


    public $uf;

	

    [...]


    public function afterFind() {

        $this->uf = Municipio::model()->findByPk($this->codmunicipio)->uf_ibge;

    }


}


class Municipio extends CActiveRecord {


    public function lista($id)

    {

        if ($model->isNewRecord) {

            $municipios = array();

        } else {

            $municipios = Municipio::model()->findAll(array(

                'condition' => 'uf_ibge = :uf_ibge',

                'params' => array(':uf_ibge' => $id)

            ));

        }

        return $municipios;

    }


}



Segue meu _form.php




<?php echo $form->labelEx($model, 'uf'); ?>

<?php

$ufs = Estado::model()->findAll();

$ufs = CHtml::listData($ufs, 'uf_ibge', 'uf');

?>

<?php

echo $form->dropDownList($model, 'uf', $ufs, array('empty' => 'Selecione',

	'ajax' => array(

		'type' => 'POST',

		'url' => Yii::app()->createUrl('my/municipios'),

		'success' => 'function(data){$("select#Cliente_codmunicipio").html(data);}',

		'data' => array('uf' => 'js:$(this).val()')

		)));

?>

<?php echo $form->error($model, 'uf'); ?>




<?php echo $form->labelEx($model, 'codmunicipio'); ?>

<?php echo $form->dropDownList($model, 'codmunicipio', CHtml::listData(Municipio::lista($model->uf), 'codmunicipio', 'municipio')); ?>

<?php echo $form->error($model, 'codmunicipio'); ?>




Ola pessoal do forúm tenho uma duvída.Quero saber se fazer relacionamento de tabelas facilita desenvolvimento no Yii ou nem por isso?Tambem se caso não fiz o relacionamento da tabela na base de dados eu posso fazer no model ou tem que ser feito primeiro na base de dados edepois no model.

Quem puder me responda porque estou a pegar framework Yii e não está nada facíl porque é tanta coisa para ler.

Obrigado

pessoal estou mesmo travado em fazer dropdown dinamico vou explicar o que eu fiz fazque ainda não funcionou.

as 3 tabelas seria um dropdown dinamico.

categoria( id_categorias (int), nome_categorias(varchar));

subcategorias(id_subcategorias(int), id_categorias(int),nome_subcategorias(varchar));

inscricao(id_inscricao(int), id_subcategorias(int),tipo_inscricao(varchar));

Mas não coloquei relacionamento entre elas e depois tenhouma outra tabela que e alunos(codigo_alunos,nome_alunos,nome_categoria,nome_subcategoria,tipo_inscricao)

depois ja criei CRUD da tabela aluno e gostaria de que aqueles 3 tabelas acima seja um dropdown dinamico quando eu escolho um tipo categoria esse vai me listar o seu tipo de subcategorias em dropdown subcategorias e depois quando seleciono um determinado sucategoria ele vai me listar o tipo de inscricão.

peço desculpa pela tanta volta.

obrigado

Jair,

Você vai precisar usar o paramêtro ‘ajax’ => array() nos 3 dropDownList(), cada dropDowList(), você vai usar uma ‘url’ => Yii::app()->createUrl() diferente.

No primeiro dropDownList(‘categoria’), você vai precisar enviar o ID selecionado e retornar os <options> para o dropDownList(‘subcategoria’), isso vai ocorrer o mesmo para o dropDownList(‘subcategoria’), selecinando o ID do dropDownList(‘subcategoria’), vai enviar o ID selecionado para outra URL e retornar os <options> para o dropDownList(‘inscricao’).

Seria mais ou menos assim:


<?php

$categorias = Categoria::model()->findAll();

$categorias = CHtml:listData($categorias, 'id', 'titulo');

echo $form->dropDownList($model, 'categoria', $categorias, array('empty' => 'Selecione',

        'ajax' => array(

                'type' => 'POST',

                'url' => Yii::app()->createUrl('my/subcategorias'),

                'success' => 'function(data){$("select#subcategoria").html(data);}',

                'data' => array('id' => 'js:$(this).val()')

                )));

?>

<?php

echo $form->dropDownList($model, 'subcategoria', array(), array('empty' => 'Selecione',

        'ajax' => array(

                'type' => 'POST',

                'url' => Yii::app()->createUrl('my/inscricao'),

                'success' => 'function(data){$("select#inscricao").html(data);}',

                'data' => array('uf' => 'js:$(this).val()')

                )));

?>

<?php

echo $form->dropDownList($model, 'inscricao', array());

?>

Segue esse wiki: http://www.yiiframework.com/wiki/24/creating-a-dependent-dropdown

Faz pelo menos 1 dropDownList() funcionar, que no resto você vai ter sucesso.

Muito obrigado Newerton.ate aqui esta tudo bem agora estou tendo problema em controlo.A duvída agora e como vou criar a função que pega os dados na base de dados o exemplo esta acima mas não sei em que subpasta Guardar(O ficheiro _form esta dentro de View/Aluno onde vou guardar o Objecto subcategorias e inscricao) e nem em que classe vai ficar estas função.

Obrigado

Jair,

Só como exemplo, tem uma wiki que ensina a criar 1 controler para somente essas requisições ajax. Eu criei com o nome de MyControler, e nele eu coloco as actions que me retorna os dados.

No dropdown categoria, você vai consultar o my/subcategorias, então no controler seria assim:


class MyController extends Controller {

    public function actionSubcategorias(){

        $subs = Subcategorias::model()->findAll('parent = :parent', array(':parent' => $_POST['id']));

        $subs = CHtml::listData($subs, 'id', 'titulo');


        echo CHtml::tag('option', array('value' => ''), CHtml::encode('Selecione'), true);

        foreach ($subs as $value => $name) {

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

        }

    }

}

Ai quando retornar os dados, o:


'success' => 'function(data){$("select#subcategoria").html(data);}',

Vai adicionar todo o html adicionado no <select id="subcategoria">

Pois é meu caro criei o ficheiro acima depois alterei id_subcategoria e depois guardei dentro da pasta controller mais ainda não funcionou.

Jair,

Verifica com o firebug se ele está chamando a requisição POST, e enviando o ID correto.

ja testei mas esta com um erro ao criar URl para …my/subcategorias

ainda esta uma duvida ai tenho que colocar o meu controller criado dentro da pasta Controller ou nao…

Obrigado Newerton

Jair,

Se você crio um arquivo com o nome de MyController, e chamando ele como ‘my/subcategorias’, ele precisa está na seguinte pasta:


seuprojeto/protected/controllers/MyController.php

ola Newerton muito obrigado pela ajuda.usei a felosofia desse link:http://www.yiiframework.com/wiki/24/creating-a-dependent-dropdown/ mas so funcionou a primeira dropdown a segunda fica vazia.

pois usei o firebug o post funciona mas o get da o seguinte aparece:http://localhost/gescola/index.php?r=site/index&error=1

Ola Newerton encontrei um video que faz dropdown dinamico como eu queria mas so que continuei com mesmo erro e reparei que e mesma coisa que eu ja tinha feito.Ja fiz o meu login e tambem controlo de acesso.

Pois estou a usar Srbac sera que este modulo que esta a causar este problema.o resultado do firebug é o seguinte:

POST http://localhost/gescola/index.php?r=Alunos/Selectsubca

302 Found 277ms

GET http://localhost/gescola/index.php?r=site/index&error=1

200 OK 585ms

Mais um detalhes quando testo este link:

http://localhost/gescola/index.php?r=Alunos/Selectsubca

aparece esta mensagem:Acesso Negado

Não está autorizado o acesso a esta página.

Boa tarde pessoal!

Estou precisando de uma ajuda com os dropdownlist…

Tenho combos dinâmicos na minha tela "Unidade" e "Temporada", quando seleciono a Unidade ele carrega a Temporada. Até aí está funcionando perfeitamente.

O que eu preciso fazer agora é: quando eu selecionar a Temporada ele roda uma function que verifica se aquela Temporada tem vaga e caso não tenha exibir uma mensagem informando.

Fiz seguindo o mesmo padrão do Unidade, usando ajax, mas no Temporada ele não está chamando a função que faz a verificação…

COMBO DA UNIDADE




$unidade = $model->cod_unidade;

$uni = CHtml::listData(CadUnidade::model()->findAll(array('condition'=>"flg_ativo='S' and flg_matriz='N'", 'order'=>'des_unidade')), 'cod_unidade', 'des_unidade');


echo $form->DropDownList($model,'cod_unidade', $uni, array('prompt'=>'Selecione', 'options'=>array($unidade=>array('selected'=>true)), 'ajax'=>array('type'=>'POST', 'url'=>CController::createUrl('TemporadaCombo/Combo'),'update'=>'#'.CHtml::activeId($model, 'cod_pacote'))));

COMBO DA TEMPORADA




echo $form->DropDownList($model, 'cod_pacote', array(), array('prompt'=>'Selecione a Unidade', 'ajax'=>array('type'=>'POST','url'=>CController::createUrl('TemporadaCombo/VerificaVaga'),'update'=>'#paramid'))

);



Coloquei um textfield pra exibir o retorno da function VerificaVaga (não sei se funciona, peguei este código para testar, mas não consegui chegar até esse teste…)




<div id="paramid" class="column">

<?php 	        	

   echo CHtml::textField('tempid') ;

?>

</div>



Não sei por qual motivo ele não está nem chamando a VerificaVaga então fica apenas no carregamento dinâmico do combo e o processo não fica completo…

Talvez esteja faltando alguma coisa no código do segundo combo, mas não estou conseguindo identificar.

Espero que vocês possam me ajudar.

Agradeço antecipadamente.

Electra,

Veja no código fonte, no final da página e veja se ele ta gerando os javascript do ajax.

Exemplo:


$('body').on('change','#SEUMODEL_cod_unidade',function(){jQuery.ajax({'type':'POST','url':'/casadosachet/my/municipios.html','success':function(data){$("#SEUMODEL_cod_pacote").html(data);},'data':{'id':$(this).val()},'cache':false});return false;});


$('body').on('change','#SEUMODEL_cod_pacote',function(){jQuery.ajax({'type':'POST','url':'/casadosachet/my/municipios.html','success':function(data){$("#paramid").html(data);},'data':{'id':$(this).val()},'cache':false});return false;});

Se estiver aparecendo os 2, deveria funcionar, caso esteja aparecendo somente 1, vai precisar fazer com jquery usando o $.ajax().

Problema Resolvido sobre Dropdown dinamico e estou preste a ajudar quem precisa.

Mas continuei com um problema não consigo integrar este dropdown num projecto ja feito porque este me retorna um erro de permissão.

ja atribui o utilizador toda permisaão mas este dropdown não funciona.

Obrigado