CakePHP: 誕生日とかをselectで選択させたいけど。

CakePHP にて(というかselectタグ全般?)日付をいじろうとすると

$form->dateTime とかが用意されてるんだけど、月が英語表記だったり、デフォルト順序がm-d-Yだったりと

いろいろ面倒が多いので、とりあえず作ってみた。西暦逆順+おまけで元号が入るよ!

出力されたselect
出力されたselect

でも、自分でタグ書くと、$this->data引っ張って選択状態にしてくれないので、ごにょごにょしてます。

※viewにロジック書いちゃってるなぁ、これヘルパーにまとめないと、あとで難儀するなぁ・・・

使い回しできないし、元号増えたら対処が大変だ!以下ソースは、現在6歳~80歳ぐらいの人が対象です。


$birthday =    $this->data['User']['birthday'];
$b_day['year'] = date('Y' , strtotime($birthday));
$b_day['month'] = date('n' , strtotime($birthday));
$b_day['day'] = date('j' , strtotime($birthday));

<select name="data[User][birthday][year]">
< ?php
for( $seireki = date('Y',time()) - 6 ; $seireki > date('Y',time()) - 80 ; $seireki--){

if($seireki == $b_day['year']){
e('<option value="'.$seireki.'" selected="selected">');
}else{
e('</option><option value="'.$seireki.'">');
}
if ($seireki< =1988){
e($seireki);
$tmp = $seireki - 1925;
e('(昭和'. $tmp .'年)');
}else{
$tmp = $seireki - 1988;
e($seireki);
e('(平成'. $tmp .'年)');
}
e('</option>');
}
?>
</option></select>

<select name="data[User][birthday][month]">
< ?php
for( $month = 1 ; $month <= 12 ; $month++){
if($month == $b_day['month']){
e('<option value="'.$month.'" selected="selected">');
}else{
e('<option value="'.$month.'">');
}
e($month. "月");
e('</option>');
}
?>
</select>

<select name="data[User][birthday][day]">
< ?php
for( $day= 1 ; $day<= 31 ; $day++){
if($day == $b_day['day']){
e('<option value="'.$day.'" selected="selected">');
}else{
e('<option value="'.$day.'">');
}
e($day. "日");
e('</option>');
}
?>
</select>

とりあえず動いているので、よしとするか・・・。

こうやって見通しの悪いソースが肥大化・・・支離滅裂。

[amazon]4774135038[/amazon]

コメントを残す

メールアドレスが公開されることはありません。