Autor wpisu: Marek, dodany: 01.03.2012 19:58, tagi: zend_framework
Wygenerowany formularz z mojego poprzedniego wpisu wygląda tak:
<form enctype="multipart/form-data" method="post" action="/zf/test/public/index/rename">
<dl class="zend_form">
<dt id="newname-label"><label for="newname" class="optional">Zmień nazwę pliku:</label></dt>
<dd id="newname-element"><input type="text" name="newname" id="newname" value=""></dd>
<dt id="filename-label"><label for="filename" class="required">Plik:</label></dt>
<dd>
<input type="hidden" name="MAX_FILE_SIZE" value="8388608" id="MAX_FILE_SIZE">
<input type="file" name="filename" id="filename">
</dd>
<dt id="submit-label"> </dt>
<dd id="submit-element">
<input type="submit" name="submit" id="submit" value="Wyślij"></dd>
</dl>
</form>
Zend Framework podczas generowania formularzy stosuje domyślnie tagi dl, dd, dt. Ja jednak wolę przechowywać elementy formularza w tabeli. Poniżej przedstawiam kod, który chciałbym uzyskać:
<form enctype="multipart/form-data" method="post" action="/zf/test/public/index/rename">
<table>
<tr>
<th colspan="2">Wyślij plik</th>
</tr>
<tr>
<td id="newname-label"><label for="newname">Zmień nazwę pliku:</label></td>
<td><input type="text" name="newname" id="newname" value=""></td>
</tr>
<tr>
<td id="filename-label"><label for="filename">Plik:</label></td>
<td>
<input type="hidden" name="MAX_FILE_SIZE" value="8388608" id="MAX_FILE_SIZE" />
<input type="file" name="filename" id="filename" />
</td>
</tr>
<tr>
<td colspan="2"><input type="submit" name="submit" id="submit" value="Wyślij"></td>
</tr>
</table>
</form>
Jak zatem wygenerować formularz w Zend Framework, tak aby jego elementy były zawarte w tabeli? Do tego oczywiście służą dekoratory.
Zmodyfikuję jeszcze tylko formularz dodając do niego opis:
$this->setDescription('Wyślij plik');
Po dodaniu elementów do formularza:
$this->addElements(array($newName, $file, $submit));
Ustawmy mu dekoratory:
// dekoratory formularza
$this->setDecorators(array(
array('Description', array('tag' => 'th', 'colspan' => 2)),
array(array('tr' => 'HtmlTag'), array('tag' => 'tr')),
'FormElements',
array('HtmlTag', array('tag' => 'table')),
'Form'
));
Nasz opis będzie znajdował się wewnątrz znaczników th. Po opisie zostaną wygenerowane elementy formularza, które razem z opisem zostaną zawarte w znaczniku table, a ten zostanie otoczony znacznikiem form.
Tutaj jedna uwaga. Dekoratory dodawane są do zmiennej tablicowej _decorators klasy formularza. A więc skoro raz używamy HtmlTag, będzie on użyty jako klucz w tablicy __decorators. Jeśli ponownie chcemy użyć tego samego dekoratora, musimy podać unikalny klucz (tutaj: array(‘tr’ => ‘HtmlTag’) )
Dalej ustawmy dekoratory kontrolek:
Kanał ATOM

