セレクト (<SELECT>) 要素内のオプションリストを直接テンプレートデータ内に記述することができますが、 プログラムからこのリスト内容を設定することもできます。 これにより動的にセレクト要素内のオプションリストを簡単に変化させることができるようになります。
プログラムからオプションリストを設定する際のテンプレート側データもいたってシンプルです。 ただ単純に name 属性を持ったセレクト要素を準備しておきます。 そのセレクト要素内にオプションリストを記述しておく必要はありません。
<form name="form1"> <select name="items"> </select> </form>
オプションリストの設定には、setOption メソッドを使用します。 第一パラメータには設定したいセレクト要素の名称 (name 属性の値)、 第二パラメータには設定したいリスト内容を連想配列として作成したものをセットします。
$master = new Rune_Master('/path/to/templateDirectory');
$items = array('1' => '杖', '2' => '書物', '3' => 'ストーン');
$master->setOption('items', $items);
$master->cast('example');
以上のコードを実行すると、次のような結果を得ることができます。
<form name="form1">
<select name="items">
<option value="1">杖</option>
<option value="2">書物</option>
<option value="3">ストーン</option>
</select>
</form>
setOption とあわせて、そのセレクト要素の値を setFormValue を使って設定することで、 プログラムから設定されたオプションリストをもつセレクト要素を選択状態にすることができます。
例 4.2. 動的リストをもつセレクト要素を選択状態にする
$formValue = new stdClass();
$formValue->items = 2;
$items = array('1' => '杖', '2' => '書物', '3' => 'ストーン');
$master->setFormValue('form1', $formValue);
$master->setOption('items', $items);
$master->cast('example');
<form name="form1">
<select name="items">
<option value="1">杖</option>
<option value="2" selected="selected">書物</option>
<option value="3">ストーン</option>
</select>
</form>