PR

[CakePHP] 日付入力をJavascriptで(protocalendar.js編)

前回の記事の、入力側をJavascriptで実装した。

pc.casey.jp » CakePHP独自バリデーション-日付期間 :
https://pc.casey.jp/archives/2277

#Datepickerが使いたかったけどなぜかFormHelperが見つからないとか言う。なぜだ?Helperはextendsできるのに。1.3から挙動が少し変わったらしいけど関係あるのかな。

スプーキーズラボさんが公開されている、prototype.jsベースのjavascriptのカレンダーライブラリprotocalendar.jsがとても便利です。

ハマりながらもなぜか動作させることができたので採用~。寝る前まで動作しなかったのに、さてもう一度調査してみようかと思ったら何事も無く動作していた。妖精さんが仕事してくれたんだろうね。。。


ということで、入力側。日付範囲がバリデートされるんだから、こちら側もそれに合わせておきたいところ。

スポンサードリンク

contorollerに以下追加してsetしておく

#usage: $this->set(‘calOptions’, $this->_getCalOptions(array(‘minDays’=>60)));

 function _getCalOptions($options = array()){
  return array(
    'startYear' => $this->_getStartYear(),
    'endYear' => date("Y"),
    'maxDate' => date("Ymd"),
    'minDate' => $this->_getMinDate($options['minDays']),
  );
 }
 function _getStartYear(){
  return date("m") < 2 ? date("Y") - 1 : date("Y");
 } 
 function _getMinDate($days){
  $day = 86400;
  $now = date("Ymd");
  $min = date("Ymd", strtotime($now) - ($day * $days));
  return $min;
 }

viewで呼び出す

今までのコード

echo $this->Form->input('salesDate', array(
   'type'=>'date',
   'dateFormat'=>'YMD',
   'minYear' => date("Y") - 1,
   'maxYear' => date("Y") + 1,
  ));

Javascriptに対応したヤツに変更

echo $sp->dateInput('salesDate', array(
    'type' => 'text',
    'value'=> date("Y/m/d"),
    //'id' => 'SaleSalesDate',
   ),
   $calOptions
  );

参考文献

コメント