CakePHPã§ã«ã¬ã³ãã¼ãã«ãã¼ãä½ã£ã¦ã¿ã
http://cakephp.jp/modules/newbb/viewtopic.php?topic_id=1786&forum=9&post_id=4263ãããè¶ãã®æ¹ãç¥æ¥å¤å®ä»ãã§ã¯ããã¾ããã®ã§ãã注æãã ããã
CakePHPã®helperããã¹ãçã«ä½ããã¨ã«ãã¾ãããã¨ããããç¾å®çã«å©ç¨æ©ä¼ããããããªCalandarHelperã«ãã¾ããã
æ¬å½ã¯ç¥æ¥å¤å®ã¨ãããã¹ããªãã§ããããã©ãæ¥åã®æ¥ãç§åã®æ¥ã®ç¢ºå®ãé¢åãªä¸ã«ãç¥æ¥æ å ±ã¯ã¡ã³ããã³ã¹ãèããã¨ãã¼ã¿ãã¼ã¹ã§ä¿æããæ¹ããããããªã®ã§ãç¹ã«ãã£ã¦ãã¾ããã(æ°ãåãããããããããã¾ãã)
ã£ã¦ãã¨ã§åç´ã«ã«ã¬ã³ãã¼ã表示ããã ãã«ãªã£ã¡ããã¾ããã(CSSãå¥éè¨è¿°ããå¿ è¦ãããã¾ã)
CalendarHelperã¯ãapp/views/helpers/calendar.phpã«ä½æãã¾ãã
<?php /** * ã«ã¬ã³ãã¼ãã«ãã¼. * */ class CalendarHelper extends AppHelper { var $_defaultLang = 'en'; var $_week = array( 'en' => array('Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'), 'ja' => array('æ¥', 'æ', 'ç«', 'æ°´', 'æ¨', 'é', 'å') ); /** * ã«ã¬ã³ãã¼ãçæãã. * * @param string $lang è¨èª * @param integer $date æ¥ä» * @return ã«ã¬ã³ãã¼ */ function makeCalendar($lang = null, $date = null) { if (is_null($date)) { $date = date('Ymd'); } if (is_null($lang)) { $lang = $this->_defaultLang; } $year = substr($date, 0, 4); $month = substr($date, 4, 2); $day = substr($date, 6, 2); if (!checkdate($month, $day, $year)) { $this->log('Invalid date format!'); } return $this->output( "<div id=\"calendar\"><div id=\"calendar-header\">".$year."å¹´".$month."æ</div><table id=\"calendar-content\">". $this->_makeWeekHeader($lang).$this->_makeCalendarContent($year, $month, $date)."</table></div>" ); } /** * é±ãããã¼ãçæãã. * * @param string $lang è¨èª * @return é±ãããã¼ */ function _makeWeekHeader($lang = null) { if (is_null($lang)) { $lang = $this->_defaultLang; } $cell = array(); foreach ($this->_week[$lang] as $weekId => $week) { array_push($cell, "<td class=\"week_".strtolower($this->_week[$this->_defaultLang][$weekId])."\">".$week."</td>"); } return "<tr id=\"week_header\">".implode("", $cell)."</tr>"; } /** * ã«ã¬ã³ãã¼ã³ã³ãã³ããçæãã. * * @param integer $year å¹´ * @param integer $month æ * @param integer $selecteday é¸ææ¥ * @return ã«ã¬ã³ãã¼ã³ã³ãã³ã */ function _makeCalendarContent($year, $month, $selectedDay) { if (!is_numeric($year) || !is_numeric($month) || !is_numeric($selectedDay)) { throw new Exception("Invalid parameters!"); } $calendar = array(); $weekNo = 1; // æå ã§ã®é±çªå·(第âé±) $last = substr($this->_getLastDay($year, $month), 6, 2); for ($day = 1; $day <= $last; $day++) { $date = $year.$month.sprintf("%02d", $day); // Ymdå½¢å¼ $weekId = $this->_getWeekIdOfDay($year, $month, $day, $this->_defaultLang); $attr = array(); if ($this->_getToday() == $date) { array_push($attr, 'today'); } if ($selectedDay == $date) { array_push($attr, 'selected'); } // TODO ç¥æ¥å¤å® if (false) { array_push($attr, 'holiday'); } $calendar[$weekNo][$weekId] = array('day' => $day, 'attribute' => $attr); // ç¿é±ã¸ if ($weekId == count($this->_week[$this->_defaultLang]) - 1) { $weekNo++; } } // debug($calendar); $default = array('day' => '', 'attribute' => array()); $c = array(); for ($rowIdx = 1; $rowIdx <= count($calendar); $rowIdx++) { $elements = array(); for ($colIdx = 0; $colIdx < count($this->_week[$this->_defaultLang]); $colIdx++) { $day = $default; if (array_key_exists($colIdx, $calendar[$rowIdx])) { $day = $calendar[$rowIdx][$colIdx]; } // debug($day); array_push( $elements, "<td class=\"week_".strtolower($this->_week[$this->_defaultLang][$colIdx])." ".implode(" ", $day['attribute'])."\">".$day['day']."</td>" ); } array_push($c, "<tr class=\"week\">".implode("", $elements)."</tr>"); } return implode("", $c); } /** * æåã®æ¥ä»ãè¿ã. * * @param integer $year å¹´ * @param integer $month æ * @param unknown_type $format ãã©ã¼ããã * @return æåã®æ¥ä» */ function _getFirstDay($year, $month, $format = 'Ymd') { return date($format, mktime(0, 0, 0, $month, 1, $year)); } /** * ææ«ã®æ¥ä»ãè¿ã. * * @param integer $year å¹´ * @param integer $month æ * @param string $format ãã©ã¼ããã * @return ææ«ã®æ¥ä» */ function _getLastDay($year, $month, $format = 'Ymd') { return date($format, mktime(0, 0, 0, $month + 1, 0, $year)); } /** * æ¥ä»ãè¿ã. * * @param integer $year å¹´ * @param integer $month æ * @param integer $day æ¥ * @param string $format ãã©ã¼ããã * @return ææ«ã®æ¥ä» */ function _getDay($year, $month, $day, $format = 'Ymd') { return date($format, mktime(0, 0, 0, $month, $day, $year)); } /** * ä»æ¥ã®æ¥ä»ãè¿ã. * * @param string $format ãã©ã¼ããã * @return ä»æ¥ã®æ¥ä» */ function _getToday($format = 'Ymd') { return date($format); } /** * ææ¥IDãè¿ã. * * @param integer $year å¹´ * @param integer $month æ * @param integer $day æ¥ * @param string $lang è¨èª * @return ææ¥ID */ function _getWeekIdOfDay($year, $month, $day, $lang = null) { if (is_null($lang)) { $lang = $this->_defaultLang; } return $this->_getDay($year, $month, $day, 'w'); } /** * ææ¥ãè¿ã. * * @param integer $year å¹´ * @param integer $month æ * @param integer $day æ¥ * @param string $lang è¨èª * @return ææ¥ */ function _getWeekOfDay($year, $month, $day, $lang = null) { if (is_null($lang)) { $lang = $this->_defaultLang; } return $this->_week[$lang][$this->_getDay($year, $month, $day, 'w')]; } } ?>
viewå´ã§ã¯ã以ä¸ã®ããã«è¨è¿°ãã¾ãã
- æ¥ä»ãæå®ããå ´å
<?php echo $calendar->makeCalendar('ja', '20090101'); ?>
- ä»æ¥ã®æ¥ä»ã®å ´å
<?php echo $calendar->makeCalendar('ja'); ?>
æ¥ä»ã®æå®ãããªãã£ãå ´åã®åºåã¯ä»¥ä¸ã®ããã«ãªãã¾ãã(1è¡ãé·ããªã£ã¦ãã¾ãã®ã§é©å®æ¹è¡ãå ¥ãã¦ãã¾ã)
<div id="calendar"> <div id="calendar-header">2009å¹´2æ</div> <table id="calendar-content"> <tr id="week_header"> <td class="week_sun">æ¥</td> <td class="week_mon">æ</td> <td class="week_tue">ç«</td> <td class="week_wed">æ°´</td> <td class="week_thu">æ¨</td> <td class="week_fri">é</td> <td class="week_sat">å</td> </tr> <tr class="week"> <td class="week_sun ">1</td> <td class="week_mon ">2</td> <td class="week_tue ">3</td> <td class="week_wed ">4</td> <td class="week_thu ">5</td> <td class="week_fri ">6</td> <td class="week_sat ">7</td> </tr> <tr class="week"> <td class="week_sun ">1</td> <td class="week_mon ">2</td> <td class="week_tue ">3</td> <td class="week_wed ">4</td> <td class="week_thu ">5</td> <td class="week_fri ">6</td> <td class="week_sat ">7</td> </tr> <tr class="week"> <td class="week_sun ">8</td> <td class="week_mon ">9</td> <td class="week_tue ">10</td> <td class="week_wed ">11</td> <td class="week_thu ">12</td> <td class="week_fri ">13</td> <td class="week_sat ">14</td> </tr> <tr class="week"> <td class="week_sun ">15</td> <td class="week_mon ">16</td> <td class="week_tue ">17</td> <td class="week_wed ">18</td> <td class="week_thu ">19</td> <td class="week_fri ">20</td> <td class="week_sat ">21</td> </tr> <tr class="week"> <td class="week_sun ">22</td> <td class="week_mon ">23</td> <td class="week_tue ">24</td> <td class="week_wed ">25</td> <td class="week_thu ">26</td> <td class="week_fri today selected">27</td> <td class="week_sat ">28</td> </tr> </table> </div>