campos dinâmicos

Senhores,

Boa tarde.

Gostaria de uma opinião, ajuda, socorro dos senhores.

Possuo o seguinte cenário: um modelo contato com suas propriedades e métodos e um modelo meios (meios de comunicação) que se refere a todos os meios de comunicação que o contato pode ter.

Abaixo as propriedades desses modelos:

contato:

  • id

  • nome

  • função

  • categoria

  • (…)

meios:

  • id

  • id_contato (FK de contato.id)

  • dispositivo(tel, im, email, site)

  • tipo (movel, fixo, skype, …)

O que eu preciso: no formulário de contatos coloco 4 links referentes a meios (telefone, instant messenger, email e site).

1 - Qndo clicar em um desses links, abrirá um formulário em JS usando o CJuiDialog.

2 - Ao preencher os dados e clicar em salvar, a dialog box some e no formulário de contatos aparecerá um campo com os dados preenchidos no formulario contatos.

3 - Os passos 1 e 2 podem ser repetidos diversas vezes.

4 - Ao enviar os dados de contato, o controller do contato ira tratar esses relacionamentos ao criar um novo contato.

Bom, espero ter sido claro nas especificações acima.

Eu pergunto aos senhores. Como criar uma textfield (com máscara de validação) dinamicamente e como passar N dados para o controller sem associa-los diretamente com o mesmo?

Cordialmente,

Leonardo.

Vc tem como mandar uma imágem, a sua view ou o screen da sua app gerada?

Eu até entendi o que vc quer fazer, mas ainda não consegui visualizar como fica isso no form.

Ok meu camarada:

Seguinte, clipboard01 é o form inicial, clipboard02 é a dialog com um form em ajax e o clipboard03 é o retorno (nao exatamente como eu quero, mas estou tentando por aqui).

1007

Clipboard01.jpg

Usei o exemplo deste link:

http://www.yiiframework.com/wiki/72/cjuidialog-and-ajaxsubmitbutton

funciona muito bem com dropdownlist, mas é uma merda com textfields.

HUmm… não tinha visto este wiki antes.

Eu crio dialogos na minha app de forma bem parecida que descreve no wiki, e eu acho uma boa forma de fazer. Aparentemente neste tutorial funciona pro sei caso(Não sei se da forma como ele foi feito, vai mostrar se tiver erros no form, mas não tive tempo de refazer o wiki pra ver).

Bom, como vc está seguindo o wiki, o que vc conseguiu fazer e onde está dando problema.

Cara,

Como você pode ver, seguindo o wiki, categoria, funcao e empresa eu consegui fazer

os contatos é q nao esta funfando

os contatos nao é droplistbox, é texfield (ou checkbox, q é o q estou fazendo agora).

QNdo tento inserir uma textfield numa div qq, ele nao fecha a caixa de dialogos.

Encerro no botao de fechar.

Ao incluir outro contato novamente, ele ao inves de inserir mais 1, ele repete 2 vezes. Na terceira vez, 3 e assim sucessivamente.

Ta muito escroto!!!!

Vou copiar o código:

controller (actionCriarMeio())




public function actionCriarMeio(){

            $model = new Meios;

            // Uncomment the following line if AJAX validation is needed

            $this->performAjaxValidation($model);


            // copiado do exemplo no site: http://www.yiiframework.com/wiki/72/cjuidialog-and-ajaxsubmitbutton

            // Flag to know if we will render the form or try to add

            // new jon.

            $flag=true;


            if(isset($_POST['Meios']))

            {

                $flag=false;

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

                if($model->save()){

                    $name = $model->id;

                    $value = $model->valor;

                    $htmlOptions = array();

                    //Return an <option> and select it

                    //echo CHtml::tag('option', array('value'=>$model->id,'selected'=>true),CHtml::encode($model->nome),true);

                    echo "<div id='row'>";

                    echo CHtml::label($name, $name);

                    echo CHtml::textField($name, $value, $htmlOptions);

                    echo "</div>";                    

                }

            }

            if ($flag)

                    $this->renderPartial('createDialog',array('model'=>$model,),false,true);

        }



divs no _form




<div class = "row" id="cel">            

        </div>

        <div id="celular">

            <?php echo CHtml::ajaxLink(Yii::t('meios','Inserir Celular'),$this->createUrl('meios/criarmeio',array('dispositivo'=>'celular')),array(

            'onclick'=>'$("#meiosDialog").dialog("open"); return false;',

            'update'=>'#meiosDialog'

            ),array('id'=>'showMeiosDialog'));

            ?>

        </div>

        <div id="meiosDialog"></div>



O form que abre na dialogbox




<div class="form">

<?php $form=$this->beginWidget('CActiveForm', array('id'=>'meios-form', 'enableAjaxValidation'=>false,)); ?>

    <?php echo $form->errorSummary($model); ?>


    <div class="row">

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

            <?php echo $form->textField($model,'dispositivo',array('size'=>60,'maxlength'=>100)); ?>

            <?php echo $form->error($model,'dispositivo'); ?>

    </div>

    <div class="row">

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

            <?php echo $form->textField($model,'tipo',array('size'=>60,'maxlength'=>100)); ?>

            <?php echo $form->error($model,'tipo'); ?>

    </div>

    <div class="row">

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

            <?php echo $form->textField($model,'valor',array('size'=>60,'maxlength'=>100)); ?>

            <?php echo $form->error($model,'valor'); ?>

    </div>


    <div class="row buttons">

        <?php echo CHtml::ajaxSubmitButton(Yii::t('meios','Criar Meio de contato'),CHtml::normalizeUrl(array('meios/criarmeio','dispositivo'=>'cel', 'render'=>false)),

            array('success'=>'js:function(data){$("#cel").append(data);$("#meiosDialog").dialog("close");}'),array('id'=>'closeMeiosDialog'));

        ?>

    </div>

<?php $this->endWidget(); ?>

</div><!-- form -->



a view que renderiza a dialog




<?php

    $this->beginWidget('zii.widgets.jui.CJuiDialog',array(

        'id'=>'createDialog',

        'options'=>array(

            'title'=>Yii::t('meios','Criar Meio de contato'),

            'autoOpen'=>'true',

            'modal'=>'true',

            'width'=>'auto',

            'height'=>'auto',

        ),

        ));

    echo $this->renderPartial('_formDialog', array('model'=>$model));

    $this->endWidget('zii.widgets.jui.CJuiDialog');

?>



E é isso ai!!!

acho q tenho q zerar alguma coisa, nao tenho certeza

Com a droplistbox funfa q é uma maravilha, mas com textfield dá merda!!!

Hummmmm,

descobri q tb esta dando erro no droplistbox

qndo vc insere 2 funçoes, ele tb duplica, triplica, quadruplica os itens inseridos.

Outro problema: nao consigo pegar as fields inseridas via ajax no form.

Isso no envio do form??

Da uma checada com o DragonFly(Opera) ou o Firebug(FF) se está enviando seu form corretamente.

Isso que eu ia dizer, verifica no Firebug, se está indo 3 submissão ou se ta indo 1, esses tipos de dados, eu procuro fazer inline, no proprio form, com outra aba, nunca fiz por dialog.

Galera,

Só pra dar um feedback, abortei essa parte, fis da maneira tradicional mesmo.

Quando eu retomar essa parte, eu comunico aqui no forum.

[]`s

Amigos,

Gostaria de saber se posso fazer o seguinte: queria mostrar um campo a mais na tabela do meu ‘[color="#FF0000"]\atendimento\admin[/color]’ por exemplo. Tenho um campo de Km Inicial e outro de Km Final, gostaria de mostrar ao usuário a diferença. É possível fazer isso? E como?

Agradeço a todos

Desculpa desenterrar o topico!

Mais preciso de algumas sugestão!

E sobre inserir N números de telefone em um cadastro de Clientes, por exemplo.

  1. Inserir os dados nos campos de telefone(tipo de contato, nome e telefone).

  2. Após clicar no botão de adicionar, chamar em ajax o telefone/create e inserir os dados.

  3. E dar um reload na grid que fica abaixo do formulário que lista todos os telefones.

Eu fiz 2 renderPartial(), um chamando o //telefone/_formPartial e outro //telefone/indexPartial.

Dentro do _formPartial fiz um botão em ajax que envia os dados, e no ‘success’ do javascript eu retorno um ‘$.fn.yiiGridView.update(‘telefone-grid’);’, ele envia os dados corretamente.

Mais eu queria fazer uma validação desses campos, eu só sei que a validação e feita no ID do form, porem em HTML <form> dentro do outro <form> não funciona, existe outra maneira de validar?