Dec 12

PHP5 日历 Calendar 不指定

shuguang , 16:21 , 代码片段 , 评论(0) , 引用(0) , 阅读(14399) , Via 本站原创 | |
程序名称:PHP5 Calendar
开发/组织:galen
官方网站:http://www.galengrover.com/
文章来源:http://www.OSphp.com.cn
下载地址:
请下载附件中的源码,不要直接复制 (已下载 2549 次)

程序介绍:
This class can be used to display month calendars in HTML tables. //OSPHP.COm.CN

It takes a given month and year and generates an HTML table with the days of that month. The calendar start week day may be set to Sunday or Monday.

Special event days may exhibit the title of the event in the respective calendar table cell.

The class also shows links to pages that display the next and previous months.

The calendar presentation details can be configured with CSS styles.

The class generates XHTML compliant HTML.



<?php

class calendar {
    
    
// Events array
    
private $events = array(); //OsPHP.COM.CN
    
// Defaults for day and month names
    
private $dayNames = array ( 'Mon''Tue''Wed''Thu''Fri''Sat''Sun');
    private 
$monthNames = array ( 'January''February''March''April''May''June''July''August''September''October''November''December' );

//开源代码OSPhP.COm.CN


    
// Defaults for prev and next links
    
private $prevMonthNavTxt '&laquo';
    private 
$nextMonthNavTxt '&raquo';
    private 
$calendarName;

    public function 
__construct($name='cal') {
//OSPHP.COm.CN

        
// Assign name to calendar
        
if (strpos($name' ') || strpos($name'_') || is_numeric(substr($name01))) //PHP开源代码
            throw new 
exception('Calendar name must be a valid CSS name');
        
$this->calendarName $name;

        
// Names for special cases
        
$this->markup = array('current_day' => 'current-day', //开源OSPhP.COM.CN
                                    
'last_day_of_week' =>'last-day-of-week',
                                    
'prev_month' => 'prev-month-day',
                                    
'next_month' => 'next-month-day',

//oSPHP.COM.CN


                                    
'event' => 'event',
                                    
'header' => 'header',
                                    
'nav' => 'nav', //oSPHP.COM.CN
                                    
'days_of_week' => 'days-of-week'
                                    
);
    }
    
    
// Get calendar name
    
public function getCalendarName(){
        return 
$this->calendarName;
//OSPHP.com.CN

    }

    
// Set text for previous and next calendar links
    
public function setNavigationText($prev$next) {
        
$this->prevMonthNavTxt $prev;
        
$this->nextMonthNavTxt $next;

//PHP开源代码


    }
    
// Get text for previous and next calendar links
    
public function getNavigationText() {
        return array(    
'prev' => $this->prevMonthNavTxt,
                        
'next' => $this->nextMonthNavTxt

//开源OSPhP.COM.CN


                    
);
    }

    
// Set inner border width. Would be too annoying to do this with CSS
    
public function setInnerBorder($size) {
        
$this->innerBorder intval($size);

//OSPHP.COm.CN


    }
    
// Set inner border width. Would be too annoying to do this with CSS
    
public function getInnerBorder($size) {
        return 
$this->innerBorder;
    }

    
// Set the names of the days
    
public function setDayNames($array) {
//开源OSPhP.COM.CN

        if (
count($array) == 7)
            
$this->dayNames $array;
        else
            throw new 
exception ('Invalid value for setDayNames()');
    }

//开源代码OSPHP.COM.Cn


    
// Get the names of the days
    
public function getDayNames($array) {
        return 
$this->dayNames;
    }

    
// Set the names of the months
    
public function setMonthNames($array) { //OSPHP.COM.Cn开源
        if (
count($array) == 12)
            
$this->monthNames $array;
        else
            throw new 
exception ('Invalid value for setMonthNames()');
    }

//OSPHP.COM.Cn开源


    
// Set the names of the months
    
public function getMonthNames($array) {
        return 
$this->monthNames;
    }

    
// Sets the calendar start day 0=monday, 1=sunday, 2=saturday etc...
    
public function setStartDay($day) { //OsPHP.COM.CN
        if (
is_int($day) && $day >= && $day <=6) {
            
$this->startDay=$day;
            for (
$i=0;$i<$day;$i++) //OSPHP.COm.CN
            
array_unshift($this->dayNamesarray_pop($this->dayNames));
        }
        else
            throw new 
exception('Invalid value for setStartDay()');
    }
//开源代码OSPHP.COM.Cn

    
// Gets the calendar start day
    
public function getStartDay($day) {
        return 
$this->startDay=$day;
    }

    
// Enables prev and next month links
    
public function enableNavigation() { //OsPHP.COM.CN
        
$this->enableNav true;
    }
    
// Disables prev and next month links
    
public function disableNavigation() {
        
$this->enableNav false;
    }

    
// Gets the long name of the current month //OSPHP.COM.Cn开源
    
private function getMonthName() {
        return 
ucwords($this->monthNames[$this->month-1]);
    }
    
// Get calendars month 1-12
    
private function getMonth() { //oSPHP.COM.CN
        return 
$this->month;
    }
    
// Get calendar year ####
    
private function getYear() {
        return 
$this->year;
    }

    
// Enables nicely formatted html instead of just one big line
    
public function enablePrettyHTML() {

//OSPHP.com.CN


        
$this->prettyHTML true;
    }
    
// Disables nicely formatted html instead of just one big line
    
public function disablePrettyHTML() {
        
$this->prettyHTML false;
    }
//OSPHP.COM.Cn开源


    
// Display the year along side the month
    
public function enableYear() {
        
$this->displayYear true;
    }
    
// Do not display year near the month
    
public function disableYear() {
        
$this->displayYear false;

//OsPHP.COM.CN


    }

    
// Enables the displaying of prev and next month's days on the calendar
    
public function enableNonMonthDays() {
        
$this->displayNonMonthDays true;
    }
    
// Disables the displaying of previous and next month's days on the calendar
    
public function disableNonMonthDays() { //开源OSPhP.COM.CN
        
$this->displayNonMonthDays false;
    }
    
    
// get an event on a given date
    
public function getEventByDate($year$month$day) {
        if (isset(
$this->events[$year][$month][$day])) //开源OSPhP.COM.CN
            return 
$this->events[$year][$month][$day];
        return 
FALSE;
    }

    
// Add an event
    
public function addEvent($eventTitle$eventYear$eventMonth$eventDay$eventLink) { //开源代码OSPhP.COm.CN
        
$this->events[$eventYear][$eventMonth][$eventDay] = array(    'event_title' => $eventTitle'event_link' => $eventLink);
    }
    public function 
removeEvent($eventYear$eventMonth$eventDay) {
//OSPHP.COM.Cn开源

        unset(
$this->events[$eventYear][$eventMonth][$eventDay]);
    }

    
// Offsets timestamp according to offset and returns the day month or year
    
private function timeTravel($offset$dmy$timeStamp) { //开源代码OSPhP.COm.CN
        
$dateVals = array (    'd' => 'j',
                            
'm' => 'n',
                            
'y' => 'Y'
                            
);

//开源OSPhP.COM.CN


        return 
date($dateVals[$dmy], strtotime($offset$timeSTamp));
    }

    
// Display calendar.true Supply month and year to override default value of current month
    
public function display($month=''$year='') { //OSPHP.com.CN
    
        
// Remove whitespaces
        
$year trim($year);
        
$month trim($month);

        
// Set day, month and year of calendar
        
$this->day 1;
//开源代码OSPhP.COm.CN

        
$this->month = ($month == '') ?    date('n') : $month;
        
$this->year = ($year == '') ? date('Y') : $year;

//OSPHP.COm.CN



        
// Check for valid input    
        
if (!preg_match('~[0-9]{4}~'$this->year))
            throw new 
exception('Invalid value for year');
        if (!
is_numeric($this->month) || $this->month || $this->month 13)
//开源OSPhP.COM.CN

            throw new 
exception('Invalid value for month');

        
// Set the current timestamp
        
$this->timeStamp mktime(1,1,1,$this->month$this->day$this->year); //OSPHP.COm.CN
        
// Set the number of days in teh current month
        
$this->daysInMonth date('t',$this->timeStamp);

        
// Start table
        
$calHTML sprintf("<table id=\"%s\" cellpadding=\"0\" cellspacing=\"%d\"><thead><tr>"$this->calendarName$this->innerBorder); //OSPHP.com.CN
    
        
// Display previous month navigation
        
if ($this->enableNav) {
            
$pM explode('-'date('n-Y'strtotime('-1 month'$this->timeStamp))); //开源代码OSPhP.COm.CN
            
$calHTML .= sprintf("<td class=\"%s-%s\"><a href=\"?%smonth=%d&amp;year=%d\">%s</a></td>"$this->calendarName$this->markup['nav'], $this->queryString$pM[0], $pM[1],$this->prevMonthNavTxt);

//OSPHP.com.CN


        }
        
        
// Month name and optional year
        
$calHTML .= sprintf("<td colspan=\"%d\" id=\"%s-%s\">%s%s</td>", ($this->enableNav 7), $this->calendarName$this->markup['header'], $this->getMonthName(), ($this->displayYear ' ' .$this->year '')); //开源OSPhP.COM.CN

        
// Display next month navigation
        
if ($this->enableNav) {
            
$nM explode('-'date('n-Y'strtotime('+1 month'$this->timeStamp)));
//OSPHP.COm.CN

            
$calHTML .= sprintf("<td class=\"%s-%s\"><a href=\"?%smonth=%d&amp;year=%d\">%s</a></td>"$this->calendarName$this->markup['nav'], $this->queryString$nM[0], $nM[1],$this->nextMonthNavTxt); //oSPHP.COM.CN
        }

        
$calHTML .= sprintf("</tr></thead><tbody><tr id=\"%s\">"$this->markup['days_of_week']);

        
// Display day headers
        
foreach($this->dayNames as $k => $dayName) //OSPHP.COm.CN
            
$calHTML .= sprintf("<td>%s</td>"$dayName);

        
$calHTML .= "</tr><tr>";
        
        
/// What the heck is this
        
$sDay date('N'$this->timeStamp) + $this->startDay 1; //OSPHP.com.CN
        
        
// Print previous months days
            
for ($e=1;$e<=$sDay;$e++)
                
$calHTML .= sprintf("<td class=\"%s-%s\">%s</td>"$this->calendarName$this->markup['prev_month'],  (($this->displayNonMonthDays) ? $this->timeTravel("-" . ($sDay -$e) . " days"'d'$this->timeStamp) : '')); //OSPHP.com.CN
    
        
// Print days
        
for ($i=1;$i<=$this->daysInMonth;$i++) {
            
// Set current day and timestamp
            
$this->day $i; //PHP开源代码
            
$this->timeStamp mktime(1,1,1,$this->month$this->day$this->year);

//OSPHP.com.CN


            
            
// Set day as either plain text or event link
            
if (isset($this->events[$this->year][$this->month][$this->day])) //OSPHP.COM.Cn开源
                
$this->htmlDay sprintf("<a href=\"%s\" title=\"%s\">%s</a>"$this->events[$this->year][$this->month][$this->day]['event_link'], $this->events[$this->year][$this->month][$this->day]['event_title'], $this->day);

//oSPHP.COM.CN


            else
                
$this->htmlDay $this->day;            
    
            
// Display calendar cell
            
$calHTML .= sprintf("<td %s%s>%s</td>", ($this->timeStamp == mktime(1,1,1,date('n'),date('j'),date('Y')) ? 'id="' $this->calendarName '-' $this->markup['current_day'] . '" ' ''), ((($sDay $this->day) % == 0) ? 'class="' $this->calendarName '-' $this->markup['last_day_of_week'] . '"' ''), $this->htmlDay);                

//PHP开源代码


                        
            
// End row if necessary            
            
if (($sDay $this->day) % == 0)
                
$calHTML .= "</tr><tr>"; //开源代码OSPHP.COM.Cn
        }
        
        
// Print next months days
        
for ($e2=1;$e2 < (- (($sDay $this->daysInMonth -1) % 7)); $e2++) //开源OSPhP.COM.CN
            
$calHTML .= sprintf("<td class=\"%s-next-month-day%s\">%s</td>"$this->calendarName, ((($sDay $this->day $e2) % == 0) ? ' ' $this->calendarName '-' $this->markup['last_day_of_week'] : ''), (($this->displayNonMonthDays) ? $this->timeTravel("+$e2 days"'d'$this->timeStamp) : ''));

//OSPHP.COm.CN


        
        
$calHTML .= "</tr></tbody></table>";
    
        
// Tidy up html
        
if ($this->prettyHTML) {
            
$replaceWhat = array('<tr''<td''</tr>''</table>''<thead>''</thead>''<tbody>''</tbody>');
//oSPHP.COM.CN

            
$replaceWith = array("\n\t\t<tr""\n\t\t\t<td""\n\t\t</tr>""\n</table>""\n\t<thead>""\n\t</thead>""\n\t<tbody>""\n\t</tbody>");
            
$calHTML str_replace($replaceWhat$replaceWith$calHTML);
//OSPHP.COM.Cn开源

        }
        
        
// Print calendar
        
echo $calHTML;
    }
    
}
?>
收藏本文到网摘: 添加到“Google书签” 添加到“Yahoo收藏” 添加到“QQ书签” 搜狐网摘 添加到“百度搜藏” 添加到“新浪ViVi收藏夹” 添加到“Del.icio.us” 添加到“365天天网摘” 添加到“天极网摘” 我摘·网摘·网络书签 添加到“POCO网摘” YouNote网摘 添加到“和讯网摘” 添加到“Bolaa博客收录中心” 添加到“igooi网摘” 添加到“天下图摘”
  • 中查看更多“PHP5 日历 Calendar ”相关内容
  • 中查看更多“PHP5 日历 Calendar ”相关内容
  • 中查看更多“PHP5 日历 Calendar ”相关内容
  • 中查看更多“PHP5 日历 Calendar ”相关内容
  • 中查看更多“PHP5 日历 Calendar ”相关内容
  • 中查看更多“PHP5 日历 Calendar ”相关内容
  • 中查看更多“PHP5 日历 Calendar ”相关内容
  • 中查看更多“PHP5 日历 Calendar ”相关内容

  • 最后编辑: shuguang 编辑于2007/12/12 16:23
    Tags: , ,
    发表评论

    昵称

    网址

    电邮

    打开HTML 打开UBB 打开表情 隐藏 记住我 [登录系统] [注册]