「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タイムスタンプで与える必要が有ることに注意。