Encapsular varios elementos no Zend Form

234 views
Skip to first unread message

Robson Alexandre

unread,
Sep 30, 2012, 8:03:35 PM9/30/12
to
Boa Noite caros colegas,

gostaria de saber a melhor de fazer no Zend Form o encapsulamento de vários elementos dentro de uma única div.

p.e.
$nome = new Zend_Form_Element_Text('nome');
        $nome->setLabel('Nome Completo:')
                ->setName('no_pessoa')
                ->setDecorators(array(
                    'ViewHelper', 'Errors', 'Description', 'Label'
                    array('HtmlTag', array('tag' => 'div', 'class' => 'formulario-item'))
                 ));
         $elementos[] = $nome
$limpar = new Zend_Form_Element_Reset('limpar');
        $limpar->setLabel('Limpar')
                ->setDecorators(array(
                    'ViewHelper', 'Errors', 'Description',
                    array('HtmlTag', array('tag' => 'div', 'class' => 'componenteBotao'))
                ));
        $elementos[] = $limpar;

        $enviar = new Zend_Form_Element_Submit('enviar');
        $enviar->setLabel('Reset Senha')
                ->setDecorators(array(
                    'ViewHelper', 'Errors', 'Description',
                    array('HtmlTag', array('tag' => 'div', 'class' => 'componenteBotao'))
                ));
        $elementos[] = $enviar;
$this->addElements($elementos);

A idéia é q no final fique desta maneira:

<div class="formulario-item"><label for="no_pessoa">Nome Completo:></label>
<input type="text" value="" id="no_pessoa" name="no_pessoa">
</div>
<div class="componenteBotao">
<input type="reset" value="Limpar" id="limpar" name="limpar">
<input type="submit" value="Enviar" id="enviar" name="enviar">
</div>


Atenciosamente
Robson Alexandre

Gilberto Albino

unread,
Sep 30, 2012, 8:18:24 PM9/30/12
to zfbr...@googlegroups.com
Para você fazer isto, seria mais interessante você utilizar um arquivo view script para o formulário.

Você poderá fazer isto desta forma ( leia até o final para ver como fica o arquivo Formulario.php):

Dentro da pasta dos views de sua aplicação crie o arquivo

views\scripts\formulario.phtml
[conteudo]

<form action="/para-onde-enviar"
    method="<?php echo $this->element->getMethod() ?>"
    id="<?php echo $this->element->getName() ?>"
<div class="formulario-item"><label for="no_pessoa">Nome Completo:></label>
<?=$this->element->no_pessoa;?>
</div>
<div class="componenteBotao">
<?=$this->element->limpar;?> 
<?=$this->element->enviar;?> 
</div>
</form>

No final da sua classe de Formulario

class Application_Form_Formulario extends Zend_Form
{
    // seu código já criado aqui

    // adicione isto para remover os decoradores

foreach($this->getElements() as $element) {
            $element->removeDecorator('DtDdWrapper');           
            $element->clearDecorators();
            $element->removeDecorator('Label');
            $element->setDecorators(array(
                'ViewHelper', 
                'label', 
                'Errors', 
                    array(
                        'HtmlTag', 
                        array(
                            'tag' => '<div>',
                            'class' => 'element'
                        )
                    ) 
                )
            );
              
       }      

    // defina o arquivo que vai carregar o HTML decorador  
        $this->setDecorators( array( array('ViewScript', array('viewScript' => 'formulario.phtml'))));
}

E você terá o que precisa!

Robson Alexandre

unread,
Oct 4, 2012, 8:38:38 AM10/4/12
to zfbr...@googlegroups.com
Grande Gilberto Albino,

Funcionou perfeitamente. Desculpe-me na demora da resposta, pois estava aprendendo sobre o assunto de utlizar o $this->setDecorators( array( array('ViewScript', array('viewScript' => 'formulario.phtml'))));
A principio achei que todo o conteudo do meu {action}.phtml deveria ir para este ViewScript customizado. Mas depois entendi  que é apenas uma nova definição do <form>Conteudo</form>, daí praticamente o {action}.phtml nem muda.
Gostaria de deixar aqui registrado que seus artigos me ajudaram muito neste primeiro contato com o FW Zend. E aguardamos novos artigos.

Atenciosamente
Robson Alexandre

--
Essa mensagem faz parte do grupo "zfbrasil" no Google Groups.
Para escrever neste grupo, envie um email para zfbr...@googlegroups.com
Para se desligar do grupo, envie um email para zfbrasil-u...@googlegroups.com
Mais informações, visite o grupo em http://groups.google.com/group/zfbrasil?hl=pt-BR

Juliano Buzanello

unread,
Oct 5, 2012, 11:50:12 AM10/5/12
to zfbr...@googlegroups.com
vc pode usar tbm o "displayGroup"
--
__________________________________________________________
"Quem trabalha muito
, erra muito. Quem trabalha pouco, erra pouco. 
Quem não trabalha, não erra e... quem não erra é promovido!"

Reply all
Reply to author
Forward
0 new messages