【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。 […]