Sep 7
逆引きrhaco52: CRUDテンプレートで良く使うタグ、メソッドまとめ(フォーム編)
CRUD系のテンプレートを作成する場合はrhaco本体のresources/templates/generic/views以下を参考にすると良いです。ここにはテンプレートを作成する際に便利なメソッドが多数使われています。今回から何回かに分けてここで使われている手法について解説します。これらのテンプレートはgeneric.Viewsの各メソッドでテンプレートの指定が無い場合に呼び出されるテンプレートです。
form.htmlは入力フォームを生成します(generic.Viewsのcreate, update, confirmedCreate, confirmedUpdateで指定されます)
<rt:extends href="./main.html" />
<rt:block name="content">
<form method="post" name="views_form">
<table>
<rt:loop param="{$object.models('views','form_display')}" var="column">
<rt:if param="{$column.isSerial()}">
{$viewutil.columnString($object,$column)}
<rt:else />
<tr>
<th>{$object.label($column)}</th>
<td>
{$viewutil.columnString($object,$column,true,true,'views')}
</td>
</tr>
</rt:if>
</rt:loop>
</table>
<input type="submit" name="save_create" value="{$generic_button}" />
</form>
<rt:invalid />
</rt:block>
タグの説明は次回行います。
ここで$objectは各メソッドで指定されるテーブルモデルが自動で割り当てられます。$viewutilは各メソッドでgeneric.util.ViewsUtilオブジェクトが割り当てられます。Viewsを使わない場合は自力でそれぞれを指定します。
$object.models('views','form_display')
はdatabase.TableObjectBaseのメソッドでテーブルモデルにviewsというメソッドがある場合にそれを呼び出します。返り値は下で指定したカラムの配列になります。viewsメソッドは逆引き21で説明しています。よって$columnは$object内の各カラムオブジェクトとなります。
function views(){
return array('form_display'=>'id,name,category');
}
ちなみに
$object.models('hoge','fuga')
と変更するとテーブルモデルに書くメソッドをhogeメソッドに変えることが出来ます。
function hoge(){
return array('hoge'=>'id,name,category');
}
$column.isSerial()
は$columnがシリアル値を持つカラムかどうかをチェックするメソッドです。
$viewutil.columnString($object,$column) $viewutil.columnString($object,$column,true,true,'views')
は指定した$columnのタイプに対応した「フォームとしての」HTML表現を返します。具体的に言うと
・serialの場合はhidden
・booleanまたはchoices, referenceがある場合はselect
・textの場合はtextarea
・その他の場合はtext(tel,zipの場合はmaxlengthが付きます)
となります。第3引数はchoicesとreferenceの場合にselect表示するかどうかのフラグ(true,false)、第4引数は値をタイプに応じたフォーマットにするかどうかのフラグ(true,false)、第5引数は表示するカラムかどうかをチェックするメソッドを指定します。この場合は上のviewsメソッドが指定されてます。
$object.label($column)
はproject.xmlでlabelが指定されている場合はその値を、指定されていない場合はname値を表示します。