m6uのエンジニアっぽい日記

PHP利用開発やFuelPHP利用開発、PostgreSQL利用開発、Androidアプリ開発、CentOS7サーバー構築など、テクニカルでエンジニアっぽい内容の日記

ViewFormでadd_date_select()を使うときのまとめ

 「9wick/fuel-viewform」に掲載されている9wickさんのViewFormパッケージで、年月日入力をラクに組み込む方法をまとめます。

$fieldset->add_date_select('hiduke', '日付入力', 2003, idate('Y'));

を一発呼ぶだけで、フォーム入力項目が4つ出来ます。

  • 'hiduke' - フォーム入力ラベル表示用に使う、入力欄としては使わないテキスト入力欄。
  • 'hiduke_year' - 年入力用に使う、プルダウンリスト入力欄。
  • 'hiduke_month' - 月入力用に使う、プルダウンリスト入力欄。
  • 'hiduke_day' - 日入力用に使う、プルダウンリスト入力欄。

 これらを駆使して、View側でこんな風に書きます。 (見やすさ重視。)

echo $fieldset->field('hiduke')->label_text(); 
echo $fieldset->field('hiduke_year')->field_text(); 
echo '年';
echo $fieldset->field('hiduke_month')->field_text(); 
echo '月';
echo $fieldset->field('hiduke_day')->field_text(); 
echo '日';

 すると、こんなhtmlに。

<label for="form_hiduke">日付入力</label><select id="form_hiduke_year" name="hiduke_year">
	<option value="2003">2003</option>
	<option value="2004">2004</option>
	<option value="2005">2005</option>
	<option value="2006">2006</option>
	<option value="2007">2007</option>
	<option value="2008">2008</option>
	<option value="2009">2009</option>
	<option value="2010">2010</option>
	<option value="2011">2011</option>
	<option value="2012">2012</option>
	<option value="2013">2013</option>
	<option value="2014">2014</option>
</select><select id="form_hiduke_month" name="hiduke_month">
	<option value="1">1</option>
	<option value="2">2</option>
	<option value="3">3</option>
	<option value="4">4</option>
	<option value="5">5</option>
	<option value="6">6</option>
	<option value="7">7</option>
	<option value="8">8</option>
	<option value="9">9</option>
	<option value="10">10</option>
	<option value="11">11</option>
	<option value="12">12</option>
</select><select id="form_hiduke_day" name="hiduke_day">
	<option value="1">1</option>
	<option value="2">2</option>
	<option value="3">3</option>
	<option value="4">4</option>
	<option value="5">5</option>
	<option value="6">6</option>
	<option value="7">7</option>
	<option value="8">8</option>
	<option value="9">9</option>
	<option value="10">10</option>
	<option value="11">11</option>
	<option value="12">12</option>
	<option value="13">13</option>
	<option value="14">14</option>
	<option value="15">15</option>
	<option value="16">16</option>
	<option value="17">17</option>
	<option value="18">18</option>
	<option value="19">19</option>
	<option value="20">20</option>
	<option value="21">21</option>
	<option value="22">22</option>
	<option value="23">23</option>
	<option value="24">24</option>
	<option value="25">25</option>
	<option value="26">26</option>
	<option value="27">27</option>
	<option value="28">28</option>
	<option value="29">29</option>
	<option value="30">30</option>
	<option value="31">31</option>
</select>

 そして、今日の日付を初期値にしておきたい場合は、たとえばこんな感じのをController側に書いておく。

if ( ($fieldset->validated('hiduke_year') == '') && ($fieldset->validated('hiduke_month') == '') && ($fieldset->validated('hiduke_day') == '') )
{
	$hiduke_date = new DateTime();
	$fieldset->field('hiduke_year')->set_value($hiduke_date->format('Y'));
	$fieldset->field('hiduke_month')->set_value($hiduke_date->format('n'));
	$fieldset->field('hiduke_day')->set_value($hiduke_date->format('j'));
}

 日付範囲を規制するには、date_startとdate_endのルールがある。 具体的には

$fieldset->field('hiduke')->add_rule('date_end', 'hiduke', strtotime(date('d M y')));

とすれば今日の日付までしか入力できなくなる。 第3引数にUnixタイムスタンプで与える必要が有ることに注意。