Como carregar Dropdown diânico no Update Como carregar Dropdown diânico no Update
#1
Posted 23 January 2011 - 01:45 PM
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.
#2
Posted 24 January 2011 - 01:50 PM
Posta pra nós, a parte do form que tem esses 2 DropDown, eu tenho a solução.
#3
Posted 24 January 2011 - 02:33 PM
<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,
#4
Posted 24 January 2011 - 02:34 PM
Extensions:
translate modue - module to handle translations
multiActiveRecord - db selection in models
redisCache - redis cache component
mpCpanel - interact with cpanel api
mUploadify - use uploadify uploader in your application
Gustavo Salomé Silva
#5
Posted 23 October 2012 - 06:29 PM
Gustavo, on 24 January 2011 - 02:34 PM, said:
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
#6
Posted 23 October 2012 - 06:55 PM
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'); ?>
This post has been edited by Newerton: 23 October 2012 - 06:55 PM
#7
Posted 25 October 2012 - 05:53 AM
Quem puder me responda porque estou a pegar framework Yii e não está nada facíl porque é tanta coisa para ler.
Obrigado
#8
Posted 27 October 2012 - 05:52 AM
Newerton, on 23 October 2012 - 06:55 PM, said:
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'); ?>
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
#9
Posted 27 October 2012 - 09:12 PM
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.yiiframew...endent-dropdown
Faz pelo menos 1 dropDownList() funcionar, que no resto você vai ter sucesso.
#10
Posted 02 November 2012 - 02:20 PM
Newerton, on 27 October 2012 - 09:12 PM, said:
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.yiiframew...endent-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
#11
Posted 02 November 2012 - 05:09 PM
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">
#12
Posted 02 November 2012 - 09:11 PM
Newerton, on 02 November 2012 - 05:09 PM, said:
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.
#13
Posted 03 November 2012 - 09:05 AM
Verifica com o firebug se ele está chamando a requisição POST, e enviando o ID correto.
#14
Posted 03 November 2012 - 06:39 PM
Newerton, on 03 November 2012 - 09:05 AM, said:
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
#15
Posted 03 November 2012 - 10:37 PM
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
#16
Posted 08 November 2012 - 02:11 PM
Newerton, on 03 November 2012 - 10:37 PM, said:
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
#17
Posted 20 November 2012 - 10:42 AM
Newerton, on 03 November 2012 - 10:37 PM, said:
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 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/ges...nos/Selectsubca
302 Found 277ms
GET http://localhost/ges...e/index&error=1
200 OK 585ms
Mais um detalhes quando testo este link:
http://localhost/ges...nos/Selectsubca
aparece esta mensagem:Acesso Negado
Não está autorizado o acesso a esta página.
#18
Posted 22 November 2012 - 12:06 PM
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.
#19
Posted 23 November 2012 - 07:19 AM
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().
#20
Posted 24 November 2012 - 08:19 AM
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

Help
















