SOFTELメモ Developer's blog

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

【ZendFramework】 Zend_Formでテーブルでもっと自由にレイアウトしたい(colspan、rowspanなど)

「テーブルで」というより、もうほぼ好きなようにレイアウトする方法のひとつ。

こうしたいんです!

Zend_Formでこうしたいんです

Zend_Formでこうしたいんです

フォームの要素の要素ごとに表示することができる

要素の要素とは、ラベル、入力欄、エラーメッセージなど、フォームの要素のさらに中のいろいろのこと。

Zend_Formにお願いして、フォームの要素ごとに機械的にレイアウトするなら前回の方法でOK

今回はZend_Formに機械的なレイアウトをお願いしないので、フォームの定義側には特に設定は不要。定義のみ書けばよいのである意味すっきり。

Viewスクリプトでこうする。

<form>
	<?php echo $this->form->getElement('name')->renderErrors(); ?>
	<?php echo $this->form->getElement('code')->renderErrors(); ?>
	<?php echo $this->form->getElement('email')->renderErrors(); ?>
	<?php echo $this->form->getElement('tantosha')->renderErrors(); ?>
	<?php echo $this->form->getElement('note')->renderErrors(); ?>

	<table border="1" cellpadding="5" width="600">
		<tr>
			<th><?php echo $this->form->getElement('name')->renderLabel(); ?></th>
			<td><?php echo $this->form->getElement('name')->renderViewHelper(); ?></td>
			<th><?php echo $this->form->getElement('code')->renderLabel(); ?></th>
			<td><?php echo $this->form->getElement('code')->renderViewHelper(); ?></td>
		</tr>
		<tr>
			<th><?php echo $this->form->getElement('email')->renderLabel(); ?></th>
			<td><?php echo $this->form->getElement('email')->renderViewHelper(); ?></td>
			<th><?php echo $this->form->getElement('tantosha')->renderLabel(); ?></th>
			<td><?php echo $this->form->getElement('tantosha')->renderViewHelper(); ?></td>
		</tr>
		<tr>
			<th><?php echo $this->form->getElement('note')->renderLabel(); ?></th>
			<td colspan="3"><?php echo $this->form->getElement('note')->renderViewHelper(); ?></td>
		</tr>
	</table>
	<p style="width:600px; text-align:center;">
		<input type="submit" value="登録する" />
	</p>
</form>

ラベルと入力欄を、それぞれゴリゴリと書いていますが、テーブルでレイアウトしたくて、しかもcolspanやrowspanがあるような場合、もうこうするしかないのでは。

エラーの出力方法は改善の余地あり。

一応、ラベルなどもフォームの定義に従って出力するので、翻訳機能などはデフォルトのレンダリングと同様に使うことができる。

他には、Zend_Form_DisplayGroupを使うとか、colspanやrowspanにも対応したDecoratorを自分で書くという手も考えられる。まだそこまでは試していない。

ここまでやってみて気がついた。デフォルトのレンダリングでは、項目名のそばにエラーメッセージが表示されることで、どの項目がエラーなのかがわかったのだが、このレイアウトだとどの項目がエラーなのかわからない。そしてエラーメッセージは日本語化したい。

Errorsデコレーターのオプション指定かカスタマイズと、エラーメッセージの翻訳が必要。やることがまだありますね…

Zend_Formレンダリング結果例

Zend_Formレンダリング結果例

関連するメモ

コメント