Zend_Formをテーブルタグで
Zend_Formの要素、Zend_Dojo_Formの要素にかかわらず、指定したグループをテーブルで表示するためのディスプレーグループを作ってみた。
<?php class Flower_Form_DisplayGroup_Table extends Flower_Form_DisplayGroup { /** * Load the default decorators * * @return void */ public function loadDefaultDecorators() { if ($this->loadDefaultDecoratorsIsDisabled()) { return; } $decorators = $this->getDecorators(); if (empty($decorators)) { $this->addDecorator('FormElements') ->addDecorator('HtmlTag', array('tag' => 'table')); } $this->affectElementDecorators( array( array('HtmlTag', array('tag' => 'td')), array('Label', array('tag' => 'th')), array('ViewScript', array( 'viewScript' => 'decorators/tr.php', 'placement' => '', )), ) ); } }
loadDefaultDecoratorsに間借りする形で、affectを入れているが、これは暫定実装。
コンストラクタを使用せずに追加されたエレメントにはtdラッパーがかからない。
が、実運用的には、フォームから追加済みのエレメントを投入するので、このフローが崩れることはほとんどないのだが、あとあと気持ち悪いので改修予定。
affectElementDecoratorsはZend_FormのsetElementDecoratorsのsetElementsをaddDecoratorsに変えたような感じの実装をしてある。
tr.phpはtrタグで囲むだけ