HTML_QuickForm_Renderer_QuickHtml

HTML_QuickForm_Renderer_QuickHtml  -- 簡単で柔軟な方式を用いて、フォーム要素を HTML にレンダリングする

説明

このレンダラには 3 つの大きな特徴があります。独自のフォームを簡単に作成できること、 フォーム要素の作成とその見た目を分離できること、 そしてウィジェットベースのテンプレートシステムの中で QuickForm を使用できることです。

どんなレンダラでも、独自のフォームを作成することは可能です。 しかし、デフォルトのレンダラとは異なり、 QuickHtml は独自のフォームを作成することだけに重点を置いています。 そのため以下に説明するような利点があります。

フォーム要素や検証規則の作成を、実際の表示部分と分離したいことはよくあるでしょう。 例えば MVC デザインパターンでは、フォーム要素や検証規則の作成をモデルクラスに置き、 送信されたデータを保存する方法 (フィールドの長さ、使用できる文字など) を制御すると便利です。一方それらの要素のレンダリングはビュークラスに置き、 ここではページをどのように表示するかだけを管理させます。

ウィジェットとは html の一部を再利用可能なようにまとめたもので、 他のウィジェットと組み合わせることでウェブページを作成します。 ウィジェットをサポートしているテンプレートシステム (ほとんどすべてがそうです) なら何でも QuickHtml と一緒に使用できます。 例に示すウィジェットは、フォーム要素のための場所が予約済みのテーブルで構成されています。 フォーム要素はそこにレンダリングされ、さらにフォームタグ、残りのフォーム要素 (例えば hidden 要素など)、そして検証用の javascript などがテーブルウィジェットに含められます。

使用例

QuickHtml レンダラの使用例を以下に示します。ここで使用する 「テンプレート」システムは単なるシンプルな html ウィジェットで、 フォーム要素を配置するだけのものですが、 より複雑なテンプレートシステムに置き換えることもできます。 より複雑な使用例は、 docs/renderers/QuickHtml_example.php を参照ください。

例 47-1QuickHtml レンダラの例

<?php
require_once 'HTML/QuickForm.php';
require_once 'HTML/QuickForm/Renderer/QuickHtml.php';

// フォーム要素とレンダラを作成します。
$form =& new HTML_QuickForm('tmp_form','POST');
$renderer =& new HTML_QuickForm_Renderer_QuickHtml();
// hidden 要素を作成します。これを明示的にはレンダリングしないことに注意しましょう。
// QuickHtml レンダラは、フォームの先頭で自動的にレンダリングを行います。
$form->addElement('hidden','tmp_hidden');
// 2 つの radio 要素を作成します。それぞれに値を設定していることに注意しましょう。
// この値が、2 つの radio を識別するための唯一の方法となります。
$form->addElement('radio','tmp_radio',null,null,'Y');
$form->addElement('radio','tmp_radio',null,null,'N');
// グループと規則を作成します。
$text = array();
$text[] =& HTML_QuickForm::createElement('text','',null,array('size' => 3));
$text[] =& HTML_QuickForm::createElement('text','',null,array('size' => 4));
$text[] =& HTML_QuickForm::createElement('text','',null,array('size' => 3));
$form->addGroup($text, 'tmp_phone', null, '-');
$form->addRule('tmp_phone','電話番号は空欄にはできません。','required',null,'client');

// フォームを作成するおまじないです。注意: ここでは順序が重要です。
// この処理は、フォーム要素を作成した後、それをレンダリングする前に
// 実行しなければなりません。
$form->accept($renderer);

// フォーム用の非常に基本的なテンプレートを作成します。
$html_template = '
<div style="text-align: center; font-weight: bold;">QuickHtml - 基本的な例</div>
<div style="text-align: center; background-color: #ccc; margin: 1px;">電話番号: %phoneNumber%</div>
<div style="text-align: left; background-color: #ccc; margin: 1px;">Yes: %radioElementYes% No: %radioElementNo%</div>';

// テンプレートにフォーム要素を挿入します。
$html_template = str_replace('%phoneNumber%', $renderer->elementToHtml('tmp_phone'), $html_template);
$html_template = str_replace('%radioElementYes%', $renderer->elementToHtml('tmp_radio', 'Y'), $html_template);
$html_template = str_replace('%radioElementNo%', $renderer->elementToHtml('tmp_radio', 'N'), $html_template);

// form タグ、javascript そして hidden 要素は
// html テンプレートにラップされます。
echo $renderer->toHtml($html_template);
?>