Как выделить несколько дат jQuery ui Datepicker
26.06.2013
Возникла необходимость сделать календарь на котором будут выделены на которые даты, при нажатии на которые, в свою очередь, будет выплывать окно с сообщением о событиях за эту дату.
За основу решения взял виджет jQuery ui - Datepicker
1 |
<?php // Плучаем данные из БД $database->setQuery( 'SELECT * FROM tbl_news WHERE published = 1 ORDER BY date' ); $rows = $database->loadObjectList(); // Формируем массив дат и массив событий $aDates = array(); $aEvents = array(); $sLastDate = ''; foreach($rows as $row) { // Приводим дату в "русский вид", для этого можно воспользоватся любой удобной библиотекой $sDate = c_date::mySQL2ru($row->date); if($sLastDate != $sDate) { $aDates[] = $sDate; $sLastDate = $sDate; } $aEvents[$sDate] = $row->id_event; } ?> <div class="calendar"> <script type="text/javascript"> // Функция аналогичная php функции inArray inArray = Array.prototype.indexOf ? function (arr, val) { return arr.indexOf(val) != -1 }: function (arr, val) { var i = arr.length while (i--) { if (arr[i] === val) return true } return false } // Приводим даты в "русский вид" ("15.04.2013")) function makeCalDate(date) { var d = date.getDate().toString(); var m = 1 + date.getMonth(); var y = date.getFullYear().toString(); if(d.length < 2) { d = "0" + d; } m = m.toString(); if(m.length < 2) { m = "0" + m; } var Date2 = d +"."+ m +"."+ y; return Date2; } var aDates = <?= json_encode($aDates);?>; var aCats = <?= json_encode($aCats);?>; $(document).ready(function(){ $( "#calendar_dialog" ).dialog({ autoOpen: false, show: { effect: "blind", duration: 1000 }, hide: { effect: "explode", duration: 1000 } }); $( "#datepicker" ).datepicker({ beforeShowDay: function(date) { // Если на данную дату есть новости - добавляем класс для подсветки if(inArray(aDates, makeCalDate(date))) { return[true, "calendar_actdate", "Нажми меня"]; } else { return[true, ""]; } }, onSelect: function(dateText, inst) { // Если есть событие, то открываем окно if(inArray(aDates, dateText)) { $( "#calendar_dialog" ).dialog( "open" ); } } }); }); </script> <div id="datepicker"></div> <div id="calendar_dialog" title="За эту дату есть:"> <p class="cld_lnk_news"> <a href="/news/">Новости</a> </p> </div> </div> |