Zend_Form içine HTML yer tutucu ekle

2 Cevap php

I Zend_Form bu kodu kullanarak bir başvuru formu için kullanıyorum:

class Form_ApplicationForm extends Zend_Form
{
    public function init()
    {
        $this->setAction('/application/new')
             ->setMethod('post')
             ->setAttrib('id','application');

        $name = new Zend_Form_Element_Text('name');
        $name->setLabel('Your Name')
             ->setRequired(TRUE)
             ->addValidator('alpha', FALSE, array('allowWhiteSpace' => true));

        $email = new Zend_Form_Element_Text('email');
        $email->setLabel('Email Address')
              ->setRequired(TRUE)
              ->addValidator('EmailAddress');

        $this->addElements(array($name,$email));
    }
}

Ben çalışmak için yerinde bir HTML pasajı ihtiyacı bu forma için bir flash dosya aktarıcı (SWFUpload) ekliyorum, pasajı şöyle:

<div id="swfupload-control">
    <p>Upload upto 5 image files(jpg, png, gif), each having maximum size of 1MB(Use Ctrl/Shift to select multiple files)</p>
    <input type="button" id="button" />
    <p id="queuestatus" ></p>
    <ol id="log"></ol>
</div>

Bir yerde <form> ki ben böyle benim denetleyicisi dahilinde takacağım içinde oturur, böylece bu ekleme en iyi yolu nedir:

public function newAction()
{
    $form = new Form_ApplicationForm();
    if($this->_request->isPost()){
        $data = $_POST;
        if($form->isValid($data)){
            /// handle data here
        }else{
            $form->populate($data);
        }
    }
    $this->view->form = $form;
}

Bir yer tutucu veya Zend_Form içinde benzer ekleyerek, ya da bu gibi bir dekoratör veya bir şey kullanarak yapılmalıdır bir yolu var mı?

Teşekkürler.

2 Cevap

Bunu, örneğin, bunun için kendi Eleman yazmak olurdu My_Form_Element_SwfUpload bir işleyici ile birlikte. Bu öğreticileri bakınız:

Basit yolu görünümünde bunu yapmak için:

echo her elemanını ing tarafından onun html yazdırabilirsiniz. İşte bunu yapmanın bir yolu var:

<form id="<?= $this->form->getId() ?>" action="<?= $this->form->getAction() ?>">

<? foreach ($this->form as $element): ?>
<?= $element ?>
<? if ($element->getName() == 'email'): ?>
<div id="swfupload-control">
    <p>Upload upto 5 image files(jpg, png, gif), each having maximum size of 1MB(Use Ctrl/Shift to select multiple files)</p>
    <input type="button" id="button" />
    <p id="queuestatus" ></p>
    <ol id="log"></ol>
</div>
<? endif ?>
<? endforeach ?>

</form>

Bu ne tüm unsurları yazdırır ve email alanına sonra sizi ne olursa olsun koyar. Eğer formda bir alan eklemek veya kaldırırsanız bu kodu (Eğer email alanı kaldırırsanız tabii ki başarısız olacak) çalışmaya devam edecektir.