【ZendFramework】Zend_Formでテーブルでレイアウトしたい
Zend_Formを使って、テーブルでレイアウトする。
全部お任せするとこうなる
こんな風に、dl,dt,ddを使ったHTMLになる。
<form method="post" action=""> <dl> <dt>会社名</dt> <dd><input type="text" name="name" value="" /></dd> <dt>取引先コード</dt> <dd><input type="text" name="code" value="" /></dd> ...(いろいろ省略してます)
特別に事情がない場合は、このHTMLのままでも、見せ方はスタイルシートで何とかなる。
フォームの要素ごとに表示することもできる
フォームの各要素に対して、デフォルトではdtだったのをthで、デフォルトではddだったのをtdで、さらにそれをtrで囲んでもらうように設定。その周りのformタグは、自分で書いてもよいし、Zend_Formに書いてもらう方法もある。
フォームの設定はこう。フォームの定義にて、要素を追加した後で、要素のDecoratorを設定する。
class Application_Form_TestForm extends Zend_Form
{
public function init()
{
//(要素追加部分省略)
//(要素追加部分省略)
//(要素追加部分省略)
//要素を追加した後で
$this->setElementDecorators(array(
'ViewHelper',
'Errors',
array('decorator' => 'Description', 'options' => array('tag' => 'p', 'class' => 'description')),
array('decorator' => 'HtmlTag', 'options' => array('tag' => 'td')),
array('decorator' => 'Label', 'options' => array('tag' => 'th')),
array('decorator' => array('OuterHtmlTag' => 'HtmlTag'), 'options' => array('tag' => 'tr')),
));
}
}
Viewスクリプトでこうする(一例)
<form>
<table>
<?php echo $this->form->getElement('name'); ?>
<?php echo $this->form->getElement('code') ?>
<?php echo $this->form->getElement('email') ?>
<?php echo $this->form->getElement('tantosha') ?>
<?php echo $this->form->getElement('note') ?>
</table>
<p><input type="submit" value="登録する" /></p>
</form>
この場合、エラーの表示とボタンの表示に難あり。そのため「登録する」ボタンを自分で書いている。ボタンが困ったことになる現象と対策について、詳細はマニュアル参照。
セルを結合したりして、もっと自由にレイアウトしたいときどうするか?また次回。

【ZendFramework】Zend_Formを使う at softelメモ 2010年3月28日 22:58
[...] Zend_form デフォルトのレンダリング さてここで、dl,dt,ddタグではなくて、テーブルでレイアウトしたいときどうするか?また次回。 [...]
【ZendFramework】 Zend_Formでテーブルでもっと自由にレイアウトしたい(colspan、rowspanなど) at softelメモ 2010年3月29日 12:36
[...] Zend_Formに機械的にレイアウトをお願いするなら前回の方法でOK。 [...]