SOFTELメモ Developer's blog

会社概要 ブログ 調査依頼 採用情報 ...
技術者募集中

【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>
Zend_Form テーブルレイアウト例

Zend_Form テーブルレイアウト例

この場合、エラーの表示とボタンの表示に難あり。そのため「登録する」ボタンを自分で書いている。ボタンが困ったことになる現象と対策について、詳細はマニュアル参照

セルを結合したりして、もっと自由にレイアウトしたいときどうするか?また次回。

関連するメモ

コメント(2)

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