Zend_Formには様々な利点がありますが、そのままでは携帯サイトで使用しづらいです。いくつかのカスタマイズをすれば携帯サイトでも十分に使えますので、今回はそのうちのひとつを紹介します。といっても、マニュアルを読めばすぐにわかる様な簡単なものですが。。
DT-DD, DLタグが邪魔
Zend_Formでは出力にDecoratorを使っていますが、デフォルトだとDLタグを使ってHTMLを作成します。これが邪魔です。別のものを使う様にします。パスを通してファイルを作成すれば、そちらを優先して使用してくれます。今回は改行するだけのデコレーターを作成します。
# 独自のデコレーターを作成
class My_Form_Decorator_Br extends Zend_Form_Decorator_Abstract
{
/**
* Default placement: prepend
* @var string
*/
protected $_placement = 'APPEND';
/**
* doctypeを判別して改行タグを挿入
*
* @param string $content
* @return string
*/
public function render($content)
{
$placement = $this->getPlacement();
$element = $this->getElement();
$view = $element->getView();
// XHTML or HTML end tag?
$endTag = ' />';
if (($view instanceof Zend_View_Abstract) && !$view->doctype()->isXhtml()) {
$endTag= '>';
}
switch ($placement) {
case self::APPEND:
return $content . "<br" .$endTag. PHP_EOL;
case self::PREPEND:
return $content;
}
}
}
# フォーム要素を作成する時にsetDecoratorsで指定
$form = new Zend_Form();
// 独自ライブラリのパスを指定
$form->addElementPrefixPath('My_Form','My/Form/');
(省略)
$element = new Zend_Form_Element_[何か]('test');
(省略)
$element->setDecorators(array('ViewHelper', 'Errors', 'Br'));
$form->addElement($element);