セレクトボックスの先頭を空にしたい

symfonyのテンプレートではFormHelperを使うことでinputタグ・textareaタグなどをテンプレートで使わなくなりました。 その中でも、セレクトボックスを作成する場合はselect_tagとoptions_for_selectの2つの関数を扱います。 2つの関数の使い方を実装例を交えながら説明したいと思います。

select_tagとoptions_for_selectの2つのヘルパー関数を使ってコードを書いてみましょう。

<?php echo select_tag("drink",options_for_select(array(1 => 'コーラ', 2 => 'お茶', 3 => '水'))) ?>

以下のように表示されます。

 

select_tagを使えば簡単にセレクトボックス作ることができますが、問題はセレクトボックスの先頭を空にしたいという要件はないでしょうか?

以下のようなケースです。

先頭を空にしたいのでoptions_for_selectの引数のarrayに空の配列を加えてみました。

<?php echo select_tag("drink",options_for_select(array('' => '', 1 => 'コーラ', 2 => 'お茶', 3 => '水'))) ?>

しかし、先頭にわざわざ空の配列を作るのはコードの見栄えが悪いです。 これをoptions_for_selectの特殊なオプションで回避したいと思います。

まずは基本的なセレクトボックスの作り方です。

function select_tag($name, $option_tags = null, $options = array())

この第二引数$option_tagsがセレクトボックスの内容になります。 $option_tagsはFormHelperのoptions_for_selectに配列を与えることで作成できます。 テンプレートに実装するコードは以下のようになります。

<?php echo select_tag("drink",options_for_select(array(1 => 'コーラ', 2 => 'お茶', 3 => '水'))) ?>

出力されるHTMLです。

<select name="drink" id="drink">
<option value="1">コーラ</option>
<option value="2">お茶</option>
<option value="3">水</option>
</select>

select_tagの引数となるoptions_for_selectの定義です。

function options_for_select($options = array(), $selected = '', $html_options = array())

$selectedに値をセットすることでoptionタグのselectedを指定することができます。 $html_optionsの特殊な値をセットすることでセレクトボックスの先頭を空にすることができます。 百聞は一見にしかずということで実装例を見てください。

<?php 
	$option_tags = options_for_select(array(1 => 'コーラ', 2 => 'お茶', 3 => '水'),2,array('include_custom' => '選択してください'));
	echo select_tag("drink",$option_tags);
?>

出力されるHTMLです。

<select name="drink" id="drink">
<option value="">選択してください</option>
<option value="1">コーラ</option>
<option value="2" selected="selected">お茶</option>
<option value="3">水</option>
</select>

以下のように表示されます。

先頭をただの空にしたい時はoptions_for_selectの第三引数をarray(’include_blank’ => true)としてください。 ちなみにですがinclude_blankとinclude_customを同時に扱うとinclude_customが優先されます。

options_for_selectが持つ特殊なオプション、include_blankとinclude_customを使えば後からでもセレクトボックスの先頭をカスタムすることができます。 他にもselect_tagのオプションに’multiple’を追加すれば複数選択ができるセレクトボックスも作れます。 ヘルパーのオプションには便利な機能が用意してあるので実際に使う前に一度確認してみることをオススメします。

Leave a Reply

Name (required)
Mail (will not be published) (required)

Your Comments:

Spam Protection by WP-SpamFree