Я использую Zend_Form
для формы заявки, используя этот код:
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)); } }
Я добавляю загрузчик флеш-файлов (swfupload) в эту форму, для которой требуется фрагмент HTML для работы, фрагмент выглядит следующим образом:
<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>
Каков наилучший способ вставить это, чтобы он находился где-то внутри <form>
который я вставляю в свой контроллер следующим образом:
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; }
Есть ли способ добавить местозаполнитель или подобное в Zend_Form
, или это должно быть сделано с помощью декоратора или что-то в этом роде?
Благодарю.
Вам нужно написать свой собственный элемент для этого, например My_Form_Element_SwfUpload
вместе с визуализатором. См. Следующие руководства:
Самый простой способ – сделать это в представлении:
Выбрав каждый элемент, вы можете распечатать его html. Вот один из способов сделать это:
<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>
Что он делает, так это то, что он печатает все элементы и помещает все, что вам нужно, после поля email
. Если вы добавите или удалите поле из формы, этот код будет продолжать работать (конечно, он не удастся, если вы удалите поле email
).