Dec 12

PHP5 日历 Calendar 不指定

shuguang , 16:21 , 代码片段 , 评论(0) , 引用(0) , 阅读(14390) , 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))) //开源OSPhP.COM.CN
            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;
//OsPHP.COM.CN

    }
    
// 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() { //PHP开源代码
        
$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); //PHP开源代码
        }
        
        
// 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); //PHP开源代码
        }

        
$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; //oSPHP.COM.CN
            
$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);                 //开源OSPhP.COM.CN
                        
            
// 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 打开表情 隐藏 记住我 [登录系统] [注册]