CakePHPでDatepickerの続き
CakePHPでjQueryのDatePickerを使う - yokkongの日記
先日の記事の続き。
とりあえずDatepickerヘルパーを作成して日付のカレンダー表示ができるようになったわけだけれども、一つのHTMLで複数のDatepickerヘルパーを使用した場合(例えば検索画面で日付の範囲指定など)、次のようなコードが出力されていた。
<link rel="stylesheet" type="text/css" href="/wendy/css/jquery-ui-1.10.3.custom.css" /> <link rel="stylesheet" type="text/css" href="/wendy/css/jquery-ui-1.10.3.custom.css" /> <script type="text/javascript" src="/wendy/js/jquery-1.9.1.js"></script> <script type="text/javascript" src="/wendy/js/jquery-ui-1.10.3.custom.js"></script> <script type="text/javascript" src="/wendy/js/jquery.ui.datepicker-ja.js"></script> <script type="text/javascript"> //<![CDATA[ jQuery(function($){$("#fromdate").datepicker({changeMonth: true,changeYear: true, yearRange:"1900:2023"});}); //]]> </script> <script type="text/javascript"> //<![CDATA[ jQuery(function($){$("#todate").datepicker({changeMonth: true,changeYear: true, yearRange:"1900:2023"});}); //]]> </script>
なぜかJavascriptは一つしか出ていないのにCSSは重複してしまう。
これでも問題無いのだろうが、とりあえずjQueryの読み込みはヘルパーでなくビュー側で行うようにした。
個別のビューに書くかレイアウトに書くかは使用頻度に寄るのかな?
個別のビューに書く場合は、
$this->Html->script('jquery-1.9.1', array('inline' => false)); $this->Html->script('jquery-ui-1.10.3.custom', array('inline' => false)); $this->Html->script('jquery.ui.datepicker-ja', array('inline' => false)); $this->Html->css('jquery-ui-1.10.3.custom', null, array('inline' => false));
レイアウトに書く場合は
内にecho $this->Html->script('jquery-1.9.1'); echo $this->Html->script('jquery-ui-1.10.3.custom'); echo $this->Html->script('jquery.ui.datepicker-ja'); echo $this->Html->css('jquery-ui-1.10.3.custom');
注意点としては、
内の『echo $this->fetch('script');』よりも前に書くこと。あとはdatepickerを参照している部分、例えば上記の場合だと
<script type="text/javascript"> //<![CDATA[ jQuery(function($){$("#fromdate").datepicker({changeMonth: true,changeYear: true, yearRange:"1900:2023"});}); //]]> </script> <script type="text/javascript"> //<![CDATA[ jQuery(function($){$("#todate").datepicker({changeMonth: true,changeYear: true, yearRange:"1900:2023"});}); //]]> </script>
この部分も
<script type="text/javascript"> //<![CDATA[ jQuery(function($){$("#fromdate, #todate").datepicker({changeMonth: true,changeYear: true, yearRange:"1900:2023"});}); //]]> </script>
と書くこともできるのだが、それをCakePHPで実装できるのかどうかは分からないのでとりあえずはこのまま。