Adicionar/Remover campos dinamicamente

597 views
Skip to first unread message

Douglas Henrique

unread,
Apr 26, 2012, 3:17:09 PM4/26/12
to CakePHP Tuga
Olá, boa tarde!

Galera, gostaria de saber se existe alguma "mágica" do cake para minha
necessidade ou se terei que fazer tudo por javascript, ajax, etc.

Preciso adicionar/remover campos do form dinamicamente

Vou utilizar um exemplo diferente da minha aplicação para facilitar o
entendimento, pois o processo seria o mesmo:

Tenho um formulário para cadastro de vendas, onde cada venda possui X
itens. Cada item possui:
- código
- quantidade
- preço
- descrição
- etc

Como o número de itens varia a cada venda, gostaria de ir adicionando
um campo para cada item a medida que o usuário clicasse em
"adicionar".
Porém, eu teria um botão "remover" caso algum item necessite ser
retirado da lista.

A pergunta é: tem alguma forma de fazer isso pelo cake? Pois salvarei
tudo de uma vez. Como ele salvaria todos e não somente o último? A
dúvida principal está nesse adicionar/remover campos dinamicamente

Douglas Henrique

unread,
Apr 26, 2012, 3:23:40 PM4/26/12
to CakePHP Tuga
Faltou adicionar ali:

OBRIGADO a quem puder ajudar

Abraço.

brunosinister

unread,
Apr 26, 2012, 3:27:47 PM4/26/12
to cakep...@googlegroups.com
Bem a manipulação do form você precisaria fazer realmente via javascript, desconheço uma de adicionar campos no html dinamicamente com o funções do cakephp.

Quanto ao mecanismo para salvar é só proceder da forma como faria com um PHP comum o name do html será um array, no CAKE vc percorre cada elemento e vai salvando.


Bruno Rodrigues de Araujo.



--
CakePHP Tuga (cakephp-pt)

Utilize http://bin.cakephp.org para códigos
Cookbook: http://book.cakephp.org

Website do CakePHP: http://cakephp.org/
Website do grupo: http://groups.google.com/group/cakephp-pt?hl=pt-PT

Vinícius Arantes

unread,
Apr 26, 2012, 3:28:27 PM4/26/12
to cakep...@googlegroups.com
seguinte:

Pra adicionar campos NA TELA dinamicamente, vc vai precisar de algum javascript, com certeza!
Minha sugestão é vc ter os campos na tela, e usar a função CLONE, para duplicá-los (ao clicar de um botão, por exemplo)

Agora, quando for salvar no banco, o cake consegue sim salvar todos os dados enviados, basta somente saber como criar os nomes do campo de formulário...

os nomes de campos do cake são " data[Modelo][campo] "
E, para X itens, (imagino que seja uma tabela relacionada) , fica

data[Venda][1][codigo], data[Venda][1][quantidade], data[ Modelo ][1][preco], data[ Modelo ][1][descricao]
data[Venda][2][codigo], data[Venda][2][quantidade], data[ Modelo][2][preco], data[ Modelo ][2][descricao]

Seguindo esse padrão, o SaveAll do cake salva todos os campos automaticamente.

essa é uma dúvida bastante comum.. e já rodou aqui o grupo algumas vezes.. dá uma procurada em outras explicações se precisar

É isso! espero ter ajudado!
[]s

Douglas Henrique

unread,
Apr 26, 2012, 4:03:48 PM4/26/12
to CakePHP Tuga
Bom, eu estava utilizando javascript realmente para adicionar os
campos. Quanto a função "clone" eu desconhecia (sou novato na área).

Como agora o expediente acabou, vou testar amanhã essa dica

Valeu

On 26 abr, 16:28, Vinícius Arantes <vinicius....@gmail.com> wrote:
> seguinte:
>
> Pra adicionar campos NA TELA dinamicamente, vc vai precisar de algum
> javascript, com certeza!
> Minha sugestão é vc ter os campos na tela, e usar a função CLONE, para
> duplicá-los (ao clicar de um botão, por exemplo)
>
> Agora, quando for salvar no banco, o cake consegue sim salvar todos os
> dados enviados, basta somente saber como criar os nomes do campo de
> formulário...
>
> os nomes de campos do cake são " data[Modelo][campo] "
> E, para X itens, (imagino que seja uma tabela relacionada) , fica
>
> data[Venda][1][codigo], data[Venda][1][quantidade], data[ Modelo ][1][preco],
> data[ Modelo ][1][descricao]
> data[Venda][2][codigo], data[Venda][2][quantidade], data[ Modelo][2][preco],
> data[ Modelo ][2][descricao]
>
> Seguindo esse padrão, o SaveAll do cake salva todos os campos
> automaticamente.
>
> essa é uma dúvida bastante comum.. e já rodou aqui o grupo algumas vezes..
> dá uma procurada em outras explicações se precisar
>
> É isso! espero ter ajudado!
> []s
>
> On Thu, Apr 26, 2012 at 4:17 PM, Douglas Henrique <douglas1...@gmail.com>wrote:
>
>
>
>
>
>
>
> > Olá, boa tarde!
>
> > Galera, gostaria de saber se existe alguma "mágica" do cake para minha
> > necessidade ou se terei que fazer tudo por javascript, ajax, etc.
>
> > Preciso adicionar/remover campos do form dinamicamente
>
> > Vou utilizar um exemplo diferente da minha aplicação para facilitar o
> > entendimento, pois o processo seria o mesmo:
>
> > Tenho um formulário para cadastro de vendas, onde cada venda possui X
> > itens. Cada item possui:
> > - código
> > - quantidade
> > - preço
> > - descrição
> > - etc
>
> > Como o número de itens varia a cada venda, gostaria de ir adicionando
> > um campo para cada item a medida que o usuário clicasse em
> > "adicionar".
> > Porém, eu teria um botão "remover" caso algum item necessite ser
> > retirado da lista.
>
> > A pergunta é: tem alguma forma de fazer isso pelo cake? Pois salvarei
> > tudo de uma vez. Como ele salvaria todos e não somente o último? A
> > dúvida principal está nesse adicionar/remover campos dinamicamente
>
> > --
> > CakePHP Tuga (cakephp-pt)
>
> > Utilizehttp://bin.cakephp.orgpara códigos

Tony Messias

unread,
Apr 26, 2012, 5:48:25 PM4/26/12
to cakep...@googlegroups.com
Quando tenho que usar JS eu nem penso duas vezes, uso logo jQuery. Conhece essa biblioteca? É uma mão na roda! Acho que a função que o Vinícius está falando é do jQuery (certo?). Dá uma olhada na documentação do jQuery, tem vários tutoriais na internet bem legais. Qualquer coisa, estamos aqui.

Função "clone" do jQuery http://docs.jquery.com/Clone


Att,

--

Luiz Antonio S Messias
Desenvolvedor Web




--
CakePHP Tuga (cakephp-pt)

Utilize http://bin.cakephp.org para códigos

Thiago Belem

unread,
Apr 26, 2012, 5:51:44 PM4/26/12
to cakep...@googlegroups.com
Geralmente uso o método .clone() pra múltiplos campos (adicionados via JS) mesmo :)

Abs,
--
Thiago Belem
Desenvolvedor
Rio de Janeiro - RJ - Brasil

Assando Sites - Curso online de CakePHP



2012/4/26 Tony Messias <ton...@gmail.com>

Vinícius Arantes

unread,
Apr 26, 2012, 6:45:53 PM4/26/12
to cakep...@googlegroups.com
sim...! clone é do jQuery..!!
tão util e completa que as vezes esqueço que é só mais uma biblioteca!

Douglas

unread,
Apr 27, 2012, 2:55:23 PM4/27/12
to CakePHP Tuga
Pesquisei sobre esse método clone() e consegui implementá-lo. Porém, a
dúvida agora é para mudar o "índice" do campo:
data[Venda][1][codigo]
data[Venda][2][codigo], etc...

Vou ter que fazer uma função com um contador, scripts para alterar
nome, id dos campos ou o cake já faz isso sozinho?

Para ilustrar o andamento:

Tenho um botão Adicionar, que será usado para adicionar os campos.

Tenho uma <div> contendo todo o código a ser copiado. Seguindo o
exemplo que usei, optei por atribuir id="item"

Devido a conflitos do jQuery com o Prototype, todo comando jQuery
tenho que substituir o $ por jQuery
ao invés de usar $(CAMPO).load , tenho que usar jQuery(CAMPO).load

Usei o clone assim:
var novoInput = jQuery('#item').clone(true);
jQuery('#item').parent().append(novoInput);



On 26 Abr, 19:45, Vinícius Arantes <vinicius....@gmail.com> wrote:
> sim...! clone é do jQuery..!!
> tão util e completa que as vezes esqueço que é só mais uma biblioteca!
>
> On Thu, Apr 26, 2012 at 6:51 PM, Thiago Belem <cont...@thiagobelem.net>wrote:
>
>
>
>
>
>
>
> > Geralmente uso o método *.clone()* pra múltiplos campos (adicionados via
> > JS) mesmo :)
>
> > Abs,
> > --
> > ***Thiago Belem*
> > Desenvolvedor
> > Rio de Janeiro - RJ - Brasil
>
> > *Assando Sites* - Curso online de *CakePHP*
> > assando-sites.com.br <http://goo.gl/b1EEd>
>
> > thiagobelem.net
> > cont...@thiagobelem.net
>
> > *Skype / gTalk **»* thiago.belem.web
> > *LinkedIn* *»* br.linkedin.com/in/thiagobelem/pt
>
> > 2012/4/26 Tony Messias <tony...@gmail.com>
>
> >> Quando tenho que usar JS eu nem penso duas vezes, uso logo jQuery.
> >> Conhece essa biblioteca? É uma mão na roda! Acho que a função que o
> >> Vinícius está falando é do jQuery (certo?). Dá uma olhada na documentação
> >> do jQuery, tem vários tutoriais na internet bem legais. Qualquer coisa,
> >> estamos aqui.
>
> >> Função "clone" do jQueryhttp://docs.jquery.com/Clone
>
> >> Att,
>
> >> --
>
> >> Luiz Antonio S Messias
> >> Desenvolvedor Web
>
> >> <http://twitter.com/tonyzrp>
> >> @tonyzrp <http://twitter.com/tonyzrp>
> >> *LinkedIn* <http://www.linkedin.com/in/luizantoniosmessias>

Thiago Belem

unread,
Apr 27, 2012, 2:56:33 PM4/27/12
to cakep...@googlegroups.com
Até onde u sei, se você fizer data[Model][][campo] vai funcionar.

Abs,
--
Thiago Belem

Desenvolvedor
Rio de Janeiro - RJ - Brasil

Assando Sites - Curso online de CakePHP



2012/4/27 Douglas <e.tis...@icos.com.br>
--
CakePHP Tuga (cakephp-pt)

Utilize http://bin.cakephp.org para códigos

Douglas

unread,
Apr 27, 2012, 3:07:36 PM4/27/12
to CakePHP Tuga
Bom, estou forçando o name a seguir esse padrão então

Fiz assim:
echo $form->input("Venda.codigo", array('name'=>'data[Venda][]
[codigo]));

Só não vou conseguir testar agora pois tem outras coisas faltando no
sistema. Mas tudo leva a crer que seja isso mesmo

Obrigado!

On 27 Abr, 15:56, Thiago Belem <cont...@thiagobelem.net> wrote:
> Até onde u sei, se você fizer data[Model][][campo] vai funcionar.
>
> Abs,
> --
> ***Thiago Belem*
> Desenvolvedor
> Rio de Janeiro - RJ - Brasil
>
> *Assando Sites* - Curso online de *CakePHP*
> assando-sites.com.br <http://goo.gl/b1EEd>
>
> thiagobelem.net
> cont...@thiagobelem.net
>
> *Skype / gTalk **»* thiago.belem.web
> *LinkedIn* *»* br.linkedin.com/in/thiagobelem/pt
>
> 2012/4/27 Douglas <e.tisupo...@icos.com.br>

Tobias Sette

unread,
Apr 27, 2012, 3:56:32 PM4/27/12
to cakep...@googlegroups.com
Exemplos:


Att,

Tobias

-----BEGIN GEEK CODE BLOCK-----
Version: 3.12
GCS/CM/G/H/IT/L/SS d?(--) s++:+ a-- C+++>++++ UL++>++++ P+ L+++>+++++ !E@ W+++
!N o? K- w !O !M@ !V@ PS PE-- !Y@ PGP t+ 5? X? R+ !tv b+ DI>+ !D@ G e- h+ r-- y?
------END GEEK CODE BLOCK------




Em 26 de abril de 2012 16:17, Douglas Henrique <dougl...@gmail.com> escreveu:

--
CakePHP Tuga (cakephp-pt)

Utilize http://bin.cakephp.org para códigos
Reply all
Reply to author
Forward
0 new messages