Filtrar Listbox A Partir Do Dropdownlist E Definir As Informações Em 2 Listbox

Boa tarde pessoal!

Vasculhei muito no fórum e no google maneiras de filtrar listbox com o dropdownlist, até achei bastante coisa, mas não consegui implementar.

Bom, vou explicar o que eu estou querendo fazer:

1° Usuário seleciona uma programa no dropdownlist(Sendo que as opções vem do banco de dados)

2° Filtra o que aparece em 2 listbox, sendo que em 1 é a lista de pessoas que não pertencem aquele programa e no outro é a lista de pessoas que pertencem aquele programa. (De inicio todas as pessoas não irão pertencer, puxando do banco de dados, ou seja, se o usuário trocar o programa, todas as pessoas irão aparecer novamente pertencendo ou não aquele programa escolhido).

3° Usuário clica nos botões >>>> ou <<<< para gerenciar as pessoas que pertencem ou não aquele programa, ou se algum iluminado ae também souber fazer o drag and drop (porque eu não consegui =/ )

4° Botão pra salvar as modificações feitas pelo usuário, (provavelmente farei salvar tambem na hora que trocar de programa.

3186

relaciona prog e responsa.bmp

Pessoal, eu sei que são várias dúvidas insanas… hehe… não to pedindo pra ninguém fazer pra mim não, mas qualquer luz que voces puderem me dar ae… já é de grande ajuda… to travado nisso ae… =/

Se alguém tiver alguma outra idéia tambem… do que eu possa usar ou fazer… sei lá… to meio perdido… hehe

Valeu galera!!!

Abraços,

Diego Rodrigo

Nenhuma idéia galerinha? :(

Diego,

Deixa eu ver se entendi, me corrija caso eu esteja errado.

Vai ter um combobox com os nome dos programas, cada programa vai ter diferentes pessoas cadastrada.

Quando selecionar 1 programa pelo combobox, vai listar todas as pessoas na lista do [Não Pertence], assim você vai seleciona as pessoas que vai para outra lista [Pertence], e depois salvar esta listagem?

Se for está lógica, vou falar meio que um resumo do que irá fazer.

O combobox você vai pòpular normalmente pelo banco de dados.

Ao selecionar 1 programa, você vai precisar fazer isso em javascript, usando o $.ajax() do jQuery, para que seja enviado o ID do programa, e buscando somente as pessoas deste programa, ao retornar os dados usando o $.ajax() você popula a lista de Não Pertence.

Faça essa parte primeiro, depois vejamos como mandar de uma lista para outra usando o drag’n’drop, e salvar os dados.

opa!

Dar uma olhada nesse link ver se tira alguma ideia achei interessante o template devo trabalhar nele esses dias caso eu consiga colocar posto aqui pra você o MultiSelect

MultiSelect

Opa Newerton!

É mais o menos isso mesmo…

Usuário seleciona o programa;

Traz todos os responsáveis cadastrados (fazendo um check se o responsável pertence ou não);

Os que forem trabalhar nesse programa vão para a direita;

Ao salvar, criar um relacionamento entre esse programa e os responsáveis pertencentes;

Estes responsáveis podem trabalhar em vários programas diferentes;

Vou fazer essa primeira parte como voce disse!! Valeu brother!

Darlécio, muito bacana esse MultiSelect!! Aliás, todas as ferramentas desse link ae, muito bom! Vou dar uma olhada!! Valeuu!

Obrigado galera!

Assim que eu fizer essa primeira parte, posto aqui o que eu fiz e pergunto sobre o Drag and Drop! XD

Abraços,

Diego Rodrigo

Newerton,

Uma dúvida aqui cara, esse código ta me trazendo o dropdown com as opções que estão no banco:




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

<?php echo $form->dropDownList($model, 'tab_prog_idProg', 

CHtml::listData(programa::model()->findAll(

array(

'order'=> 'prog ASC')),

'idProg', 'prog'),

array(

'prompt'=>'Select Name...',

'style'=>'width:200px')); ?>



Onde e como nesse código ai eu chamo a função que serviria como "onchange", pra na hora que eu selecionar o programa ele atualizar pra mim o listbox com informações do BD?

Outra coisa, no yii seria mais comum fazer essa função na view ou no controller da view?

Obrigado!

Abraços,

Diego Rodrigo Gil de Paula

Diego,

Segue um exemplo para você testar:

Seu dropdown:




$lista = CHtml::listData(programa::model()->findAll(array('order'=> 'prog ASC')),'idProg', 'prog');

echo $form->dropDownList($model, 'tab_prog_idProg', $lista, array('prompt'=>'Select Name...','style'=>'width:200px',

'ajax'=>  array(

	  'type'=>'POST',

	  'dataType'=>'json',

	  'url'=>Yii::app()->createUrl('programa/listaresponsavel'),

	  'success'=>'function(data){

			$('select#responsavel').html(data);

	  }',

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

)

));



Vai precisar criar um action dentro do controller que é mostrado os combobox dos programas:


public function actionListaResponsavel(){

	$id = (int) $_POST['id'];

	$list = Responsavel::model()->findAll(array('condition' = 'programa_id = :programa_id', 'params' => array(':programa_id' => $id)));

	$list = CHtml::listData($list, 'responsavel_id', 'nome');

	

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

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

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

	}

}

Opa Newerton!

Tudo blz?

Desculpa demora da resposta, mas eu estava afastado…

Cara, eu tentei, mas aqui não deu certo não, aqui só fica em branco acho que devo estar fazendo algo de errado, olha só, View:




$lista = CHtml::listData(programa::model()->findAll(array('order'=> 'prog ASC')),'idProg', 'prog');

echo $form->dropDownList($model, 'tab_prog_idProg', $lista, array('prompt'=>'Selecione','style'=>'width:200px',

'ajax'=>  array(

          'type'=>'POST',

          'dataType'=>'json',

          'url'=>Yii::app()->createUrl('programa/listaresponsavel'),

          'success'=>'function(data){

                      $('select#responsavel').html(data);

}',

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

));



Fiquei na dúvida se tinha aquela aspas simples antes do function e depois da }, mas testei com ou sem e deu na mesma…

Controller:




public function actionListaResponsavel(){

        $id = (int) $_POST['id'];

        $list = Responsavel::model()->findAll(array('condition' = 'idProg = :idProg', 'params' => array(':idProg' => $id)));

        $list = CHtml::listData($list, 'idRpons', 'nom');

        

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

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

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

        }

}



Tem alguma idéia do que possa estar errado? Perdão pela ignorância, mas não entendi mesmo…

Desde já agradeço!

Abraços,

Diego Rodrigo

Diego,

Faz o testes usando o firebug na aba Console, veja se o dropdowlist está fazendo a requisição para o controler programa/listaresponsavel.

Corrigi uns erro do dropdownlist, e adicionei um console.log() para você ver na aba Console do Firebug se está retornando os dados.




$lista = CHtml::listData(Programa::model()->findAll(array('order'=> 'prog ASC')),'idProg', 'prog');

echo $form->dropDownList($model, 'tab_prog_idProg', $lista, array('prompt'=>'Selecione','style'=>'width:200px',

'ajax'=>  array(

          'type'=>'POST',

          'url'=>Yii::app()->createUrl('programa/listaresponsavel'),

          'success'=>'function(data){ 

				console.log(data);

				$("select#responsavel").html(data);

			}',

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

));