Dropdownlist Criado Dinamicamente

Oi

Eu estou usando o ‘ext.jqrelcopy.JQRelcopy’ pra poder adicionar campos dinamicamente no meu form.

O problema eh que eu não consigo reproduzir um form que possui uma dropDownList, porque eu não sei oq colocar no lugar do $model.

codigo do form




    <?php if (empty($datacomida)):

        ?>

        <div class="linha copy">




            .......................................................

            <div class="linha">

                <label class="required"> <?php echo CHtml::encode('Comida '); ?><span class="required">*</span> </label>

                <?php

                $listaComida = Comida::model()->findAll();

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

                echo $form->dropDownList(<img src='http://www.yiiframework.com/forum/public/style_emoticons/default/huh.gif' class='bbc_emoticon' alt='???' />?<img src='http://www.yiiframework.com/forum/public/style_emoticons/default/huh.gif' class='bbc_emoticon' alt='???' />???, 'id_comida', $list);

                ?>  

                <?php echo $form->error(<img src='http://www.yiiframework.com/forum/public/style_emoticons/default/huh.gif' class='bbc_emoticon' alt='???' />?<img src='http://www.yiiframework.com/forum/public/style_emoticons/default/huh.gif' class='bbc_emoticon' alt='???' />???, 'id_comida'); ?>

            </div>

             <div class="linha">

                <label class="required"> <?php echo CHtml::encode('Quantidade '); ?><span class="required">*</span> </label>

                <?php echo CHtml::textField('PromocaoComida[quantidade][]'); ?>    

            </div>




        </div>

        .......................................................

        <br> </br>

        <a id="add_comida" href="#" rel=".copy">Outra Comida</a>


    <?php else: ?>

        <?php

        $idx = 0;

        $countcomida = count($datacomida);

        foreach ($datacomida as $comida):

            $copyClass = ($idx == $countcomida - 1) ? ' copy' : '';

            ?>

            <div class="linha<?php echo $copyClass; ?>">

                <div class="linha copy">


                    <div class="linha">

                        <label class="required"> <?php echo CHtml::encode('Comida '); ?><span class="required">*</span> </label>

                        <?php

                        $listaComida = Comida::model()->findAll();

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

                        echo $form->dropDownList(<img src='http://www.yiiframework.com/forum/public/style_emoticons/default/huh.gif' class='bbc_emoticon' alt='???' />?<img src='http://www.yiiframework.com/forum/public/style_emoticons/default/huh.gif' class='bbc_emoticon' alt='???' />???, 'id_comida', $list);

                        ?>  

                        <?php echo $form->error(<img src='http://www.yiiframework.com/forum/public/style_emoticons/default/huh.gif' class='bbc_emoticon' alt='???' />?<img src='http://www.yiiframework.com/forum/public/style_emoticons/default/huh.gif' class='bbc_emoticon' alt='???' />???, 'id_comida'); ?>

                    </div>

                    <div class="linha">

                        <label class="required"> <?php echo CHtml::encode('Quantidade '); ?><span class="required">*</span> </label>

                        <?php echo CHtml::textField('PromocaoComida[quantidade][]', $comida->quantidade); ?>    

                    </div>

                </div>


                <a class="nocopy" onclick="$(this).parent().remove(); return false;" href="#"><?php echo $removeText; ?></a>


            </div>

            <?php

            $idx++;

        endforeach;

        ?>


    <?php endif; ?>


    <?php

    $removeText = 'Remover';


    $this->Widget('ext.jqrelcopy.JQRelcopy', array(

        'id' => 'add_bebida',

        'removeText' => $removeText,

        'options' => array('excludeSelector' => '.nocopy'),

    ));

    ?>

controller




    public function actionCreate() {

        $model = new Promocao;


        if (isset($_POST['Promocao'], $_POST['PromocaoComida'], $_POST['PromocaoBebida'])) {

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

            

            if ($model->save()) {

                if ($this->saveComidas($_POST['PromocaoComida'], $model->id)) {

                        

            $this->redirect(array('view', 'id' => $model->id));

                    }else{

                        //erro

                    }

            }else{

                //erro

            }

                

            $this->redirect(array('index'));

        }


        $this->render('create', array(

            'model' => $model,

        ));

    }



funcao saveComidas




    public function saveComidas($formData, $id) {

        if (empty($formData))

            return;


        $result = array();

        $idx = 0;

        

        foreach ($formData['quantidade'] as $quantidade) {

            $model = new PromocaoComida;

             $model->quantidade = $quantidade;

            $model->id_promocao = $id;

            $model->id_comida = $formData['id_comida'][$idx];


            if (!$model->save())

                return false;


            $idx++;

            

        }

        return true;

    }



valeu :P

nickezaro,

No seu formulário ta usando o CActiveForm? Se não tiver usando não precisa usar o $form->.

Pode criar usando o CHtml::dropDownList().

http://www.yiiframework.com/doc/api/1.1/CHtml#dropDownList-detail

sim estou usando ele


CHtml::dropDownList('PromocaoBebida[id_bebida][]', 'id_bebida', $list);

coloquei no lugar do $form-> e nao apareceu o campo

Funcionou… meu problema agora esta… se eu remover o campo comida ou o campo bebida ele nao salva no banco de dados…

nickezaro,

Como assim remover?

Se você remover os campos, com certeza eles não irão salvar no banco de dados.

Adiciona o print_r() depois da seguinte condição:


[...]

if (isset($_POST['Promocao'], $_POST['PromocaoComida'], $_POST['PromocaoBebida'])) {

    echo '<pre>';

    print_r($_POST);

    exit();

[...]

Ai você vai verificar quais campos estão indo ou não.

Esconda os campos ao invés de removê-los.