Yii Framework Forum: Como carregar Dropdown diânico no Update - Yii Framework Forum

Jump to content

  • (2 Pages)
  • +
  • 1
  • 2
  • You cannot start a new topic
  • You cannot reply to this topic

Como carregar Dropdown diânico no Update Como carregar Dropdown diânico no Update Rate Topic: -----

#1 User is offline   Breno Mayder 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 85
  • Joined: 15-September 10
  • Location:Belo Horizonte - Brasil

Posted 23 January 2011 - 01:45 PM

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 Mayder
Posted Image
0

#2 User is offline   Newerton 

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

Posted 24 January 2011 - 01:50 PM

Breno,

Posta pra nós, a parte do form que tem esses 2 DropDown, eu tenho a solução.
Newerton Vargas de Araújo
0

#3 User is offline   Breno Mayder 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 85
  • Joined: 15-September 10
  • Location:Belo Horizonte - Brasil

Posted 24 January 2011 - 02:33 PM

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,
Breno Mayder
Posted Image
0

#4 User is offline   Gustavo 

  • Master Member
  • Yii
  • Group: Moderators
  • Posts: 916
  • Joined: 27-July 10
  • Location:Curitiba - Brasil

Posted 24 January 2011 - 02:34 PM

esta nesse outro post onde conversavamos hoje cedo
--
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
0

#5 User is offline   jair Duarte 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 25
  • Joined: 19-October 12

Posted 23 October 2012 - 06:29 PM

View PostGustavo, on 24 January 2011 - 02:34 PM, said:

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
0

#6 User is offline   Newerton 

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

Posted 23 October 2012 - 06:55 PM

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'); ?>


This post has been edited by Newerton: 23 October 2012 - 06:55 PM

Newerton Vargas de Araújo
0

#7 User is offline   jair Duarte 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 25
  • Joined: 19-October 12

Posted 25 October 2012 - 05:53 AM

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
0

#8 User is offline   jair Duarte 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 25
  • Joined: 19-October 12

Posted 27 October 2012 - 05:52 AM

View PostNewerton, on 23 October 2012 - 06:55 PM, said:

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'); ?>








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
0

#9 User is offline   Newerton 

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

Posted 27 October 2012 - 09:12 PM

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.yiiframew...endent-dropdown

Faz pelo menos 1 dropDownList() funcionar, que no resto você vai ter sucesso.
Newerton Vargas de Araújo
0

#10 User is offline   jair Duarte 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 25
  • Joined: 19-October 12

Posted 02 November 2012 - 02:20 PM

View PostNewerton, on 27 October 2012 - 09:12 PM, said:

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

#11 User is offline   Newerton 

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

Posted 02 November 2012 - 05:09 PM

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">
Newerton Vargas de Araújo
0

#12 User is offline   jair Duarte 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 25
  • Joined: 19-October 12

Posted 02 November 2012 - 09:11 PM

View PostNewerton, on 02 November 2012 - 05:09 PM, said:

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

#13 User is offline   Newerton 

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

Posted 03 November 2012 - 09:05 AM

Jair,

Verifica com o firebug se ele está chamando a requisição POST, e enviando o ID correto.
Newerton Vargas de Araújo
0

#14 User is offline   jair Duarte 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 25
  • Joined: 19-October 12

Posted 03 November 2012 - 06:39 PM

View PostNewerton, on 03 November 2012 - 09:05 AM, said:

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
0

#15 User is offline   Newerton 

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

Posted 03 November 2012 - 10:37 PM

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

Newerton Vargas de Araújo
0

#16 User is offline   jair Duarte 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 25
  • Joined: 19-October 12

Posted 08 November 2012 - 02:11 PM

View PostNewerton, on 03 November 2012 - 10:37 PM, said:

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
0

#17 User is offline   jair Duarte 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 25
  • Joined: 19-October 12

Posted 20 November 2012 - 10:42 AM

View PostNewerton, on 03 November 2012 - 10:37 PM, said:

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

#18 User is offline   Electra 

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

Posted 22 November 2012 - 12:06 PM

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

#19 User is offline   Newerton 

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

Posted 23 November 2012 - 07:19 AM

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().
Newerton Vargas de Araújo
0

#20 User is offline   jair Duarte 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 25
  • Joined: 19-October 12

Posted 24 November 2012 - 08:19 AM

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
0

Share this topic:


  • (2 Pages)
  • +
  • 1
  • 2
  • 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