子クラスで実装する抽象メソッドを定義します。
QuickForm のレンダラは、Visitor デザインパターンを実装しています。 つまり、各フォーム要素が accept() メソッドを保持しており、 レンダラのインスタンスをパラメータに指定してこのメソッドがコールされるということです。 このメソッドが行う内容は、以下のとおりです。
その要素が他の要素を含んでいる場合 (HTML_QuickForm_group および HTML_QuickForm それ自身) は、含まれている各要素の accept() メソッドを順にコールし、コンテナのレンダリングのためのメソッド (例: startForm() および finishForm()) をコールします。
その要素が単純なものである場合は、レンダラのメソッド (例: renderHeader()) をコールしてレンダリングを行います。
レンダラオブジェクトは、本来なら各 HTML_QuickForm_concreteElement に対して renderConcreteElement() メソッドを保持すべきです。しかし、 幸いにもほとんどの要素が要求するレンダリングは似通っています。そのため、 renderTextarea() や renderCheckbox() などのように分割するかわりに、一般化した renderElement() メソッドを使用しています。
レンダラは、メソッドに渡された情報を "蓄積" し、 それに基づいて何らかの形式の出力を行わなければなりません。 内部の実装方法は、レンダラの型に依存します。
まず最初に、どうやって情報を蓄積するかを決める必要があります。 おそらく、そのためには何らかのデータ構造を作成する必要があるでしょう (テンプレートオブジェクトなどに情報を一度に渡そうとしているのでない限り)。
次に、HTML_QuickForm_Renderer で定義されている全ての抽象メソッドに、具体的な処理を実装しなければなりません。 注意すべき例外は renderHtml() メソッドで、これはデフォルトのレンダラのみで実装されます。
それ以外にも、出力をカスタマイズしてその結果を得るためのパブリックメソッドを 追加したいと思われるかもしれません。しかし、これはレンダラの型に大きく依存します。
あなたが作成したレンダラを QuickForm に寄贈したいとお考えなら、以下の点に気をつけてください。
そのコードが他人にとっても有用でなければなりません (例えば、個人的に使用している 無名なテンプレートエンジンのためのレンダラなどは不向きです)。
レンダラには、ある程度の量の使用例が必要です。
最後に、特に注意すべき点として、 PEAR コーディング規約に従ったコードでなければなりません。
ティップ 既存のレンダラに関して、更なる使用例を提供してくださることも歓迎します。