Form Dinamico

Possuo a tabela produto e a tabela adicional… gostaria de saber como ligar um adicional somente com os produtos que aceitem este adicional.

ex x-bacon … adicional + bacon…

a sopa nao pode ter + bacon.

no momento de cadastrar os produtos deverá ser marcado os adicionais possiveis para aquele produto, cada vez que criar um adicional quero que o mesmo apareça como um checkBox no form de cadastro do produto…

Se alguem possuir uma ideia melhor de como fazer ajudaria muito tbm.

Obrigado

nickezaro,

Vou postar um modelo, e veja como sai o resultado no seu formulário.

Você vai precisar criar o Model da tabela ‘Adicional’.

Ai no _form.php onde você faz o cadastro do produto, você vai precisar pegar todos os Adicionais.




$lista = Adicional::model()->findAll(); //Buscar todos os resultados da tabela Adicional

$lista = CHtml::listData($lista, 'id', 'titulo'); //Criar um array com os dados (id[key],titulo[value])


echo $form->checkBoxList($model,'adicionais', $lista); //Populando o checkBoxList



Hey Newerton, eu to com um problema parecido.

Usando um $model nessa checkBoxList eu sobreponho as informações se o usuário selecionar mais de uma opção. Eu estou tentando passar um array pelo Controller, mas não consigo fazer funcionar.

Como eu faço pra resolver isso?

Valeu.

PS: estou tentando me basear na solução deste outro tópico, mas não esta dando certo http://www.yiiframework.com/forum/index.php/topic/30366-checkboxlist-valores/

Begnini,

Faz assim, o campo que você vai salvar, coloca ele como text ou varchar(255).

De inicio, você salva todo o array selecionado em 1 atributo no banco de dados, mais pra frente com mais experiência e calma você cria um outra tabela somente para receber esses atributos.

Quando selecionado os itens, ele submete o formulário para o actionCreate() ou actionUpdate().

Antes do $model->attributes = $_POST

Você adiciona a váriavel que será dos checkbox selecionado, vamos supor que o nome do atributo do banco seja ‘opcional’


$model->opcional = json_encode($_POST['Produto']['opcional']);

$model->attributes = $_POST['Produto'];

Depois com um tempo, você pode fazer isso dentro do seu Model, usando a função beforeValidate().

Olha o exemplo do array, de como ele vai ser salvo no banco de dados:


$arr = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5);

Banco de dados:


{"a":1,"b":2,"c":3,"d":4,"e":5}

Até ae tudo bem, agora vamos resgatar esse valores do banco de dados e mostrar no checkBoxList();

Antes do $form->checkBoxList(), adicione a váriavel que é do opcional:


$model->opcional = json_decode($model->opcional, true);

$form->checkBoxList(...);

Ele pega o que foi encodado pelo json_encode, e transforma novamente em array, o resto o Yii da conta do recado.