Calendar Class
To create a navigable calendar which can be easily hooked into a database.
AI
KI-Zusammenfassung: This codebase represents a historical implementation of the logic described in the metadata. Our preservation engine analyzes the structure to provide context for modern developers.
Quellcode
<?
class calendar {
//Sets up some class vars
var $month;
var $year;
var $firstdayofmonth;
var $lastdayofmonth;
var $numdays;
var $days;
var $monthname;
//The constructor class gets pertinent dates and set them to the class vars
function calendar() {
global $month, $year;
//If the month isn't set set it top the current month
if ($month == "") $month = DATE("m");
$this->month = $month;
//If the year isn't set set it top the current month
if ($year == "") $year = DATE("Y");
$this->year = $year;
//This gets the number of days in the current month
$this->numdays = date("t", mktime(0,0,0,$this->month, DATE("d"), $this->year));
//This gets the month name for current month
$this->monthname = date("F", mktime(0,0,0,$this->month, DATE("d"), $this->year));
//This gets the first day of the month
$this->firstdayofmonth = DATE("D", mktime(0,0,0,$this->month, 1, $this->year));
//This gets the last day of the month
$this->lastdayofmonth = DATE("D", mktime(0,0,0,$this->month, $this->numdays, $this->year));
//This assigns the daynames to an array for use later
$this->days = array("Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat");
}
//This sets some user defined cosmetic vars
function set_attributes($colsize, $daycolor, $linkcolor, $bgcolor, $linksize, $daysize,
$headersize, $headercolor, $headerweight, $dayheight, $fontface) {
$this->daycolor = $daycolor;
$this->linkcolor = $linkcolor;
$this->bgcolor = $bgcolor;
$this->linksize = $linksize;
$this->daysize = $daysize;
$this->headersize = $headersize;
$this->headercolor = $headercolor;
$this->headerweight = $headerweight;
$this->colsize = $colsize / 7;
$this->fontface = $fontface;
$this->dayheight = $dayheight;
}
//Get the number of the firstday of the month like 1 for Sunday, 2 for Monday, etc....
function getfirst() {
//Reset the $days array
reset($this->days);
//Loop through the $days array and look for a match for the
//firstdayofmonth and then assign the key to var $colspan
while(list($key,$val) = each ($this->days)) {
if ($this->firstdayofmonth == $val) {
$colspan = $key;
}
}
return $colspan;
}
function getlast() {
//Reset the $days array
reset($this->days);
//Loop through the $days array and look for a match
//for the lastdayofmonth and then assign the key to var $remainder
while(list($key,$val) = each ($this->days)) {
if ($this->lastdayofmonth == $val) {
$remainder = 6 - $key;
}
}
return $remainder;
}
//This function creates the link for the previous year
function prev_year() {
global $PHP_SELF;
return sprintf('<a href="%s?month=%s&year=%s"
style="font-family:%s;text-decoration:none;
color:%s; font-size:%spx">%s</a>', $PHP_SELF,
$this->month, $this->year - 1, $this->fontface,
$this->linkcolor, $this->linksize,
$this->year - 1);
}
//This function creates the link for the next year
function next_year() {
global $PHP_SELF;
return sprintf('<a href="%s?month=%s&year=%s"
style="font-family:%s;text-decoration:none;
color:%s; font-size:%spx">%s</a>', $PHP_SELF, $this->month,
$this->year + 1, $this->fontface, $this->linkcolor,
$this->linksize, $this->year + 1);
}
//This function creates the link for the previous month
function prev_month() {
global $PHP_SELF;
//Check to see if the month is not January
if ($this->month > 1) {
$prevm = sprintf('<a href="%s?month=%s&year=%s"
style="font-family:%s;text-decoration:none;
color:%s; font-size:%spx"><<</a> ',
$PHP_SELF, $this->month - 1, $this->year, $this->fontface,
$this->linkcolor, $this->linksize);
}
//If it is January our prev link will be December of the previous year
else {
$prevm = sprintf('<a href="%s?month=%s&year=%s"
style="font-family:%s;text-decoration:none;
color:%s; font-size:%spx"><<</a> ',
$PHP_SELF, 12, $this->year - 1, $this->fontface,
$this->linkcolor, $this->linksize);
}
return $prevm;
}
//This function creates the link for the next month
function next_month() {
global $PHP_SELF;
//Check to see if the month is not December
if ($this->month < 12) {
$nextm = sprintf(' <a href="%s?month=%s&year=%s"
style="font-family:%s;text-decoration:none;
color:%s; font-size:%spx">>></a>',
$PHP_SELF, $this->month + 1, $this->year,
$this->fontface, $this->linkcolor, $this->linksize);
}
//If it is December our next link will be January of the next year
else {
$nextm = sprintf(' <a href="%s?month=%s&year=%s"
style="font-family:%s;text-decoration:none;
color:%s; font-size:%spx">>></a>',
$PHP_SELF, 1, $this->year + 1, $this->fontface,
$this->linkcolor, $this->linksize);
}
return $nextm;
}
//This is the main function and the one that generates the html for the calendar
function make_calendar() {
$result .= sprintf('<table bgcolor="%s" width=%s border=0
cellspacing="0"cellpadding="4">', $this->bgcolor,
$this->colsize * 7);
$result .= sprintf('<tr><td width="%s">%s</td><td colspan=5
align=center width="%s">%s<span style="font-family:%s;
font-size:%s;color:%s;font-weight:%s">%s
</span>%s</td><td width="%s">%s</td></tr>%s',
$this->colsize, $this->prev_year(), $this->colsize * 5,
$this->prev_month(), $this->fontface, $this->headersize,
$this->headercolor, $this->headerweight, $this->monthname,
$this->next_month(), $this->colsize, $this->next_year(), "\n");
$result .= '<tr align="center">';
//Reset the $days array
reset($this->days);
//Loop through the days array and create a cell for each day
for($i=0;$i<count($this->days);$i++) {
$result .= sprintf('<td width="%s"><span style="
font-family:%s;font-size:%s;color:%s;
font-weight:%s">%s</span></td>', $this->colsize,
$this->fontface, $this->headersize, $this->headercolor,
$this->headerweight, $this->days[$i]);
}
$result .= '</tr><tr align="center">'."\n";
//This sets the offset for the first day of the onth in the calendar
if ($this->getfirst() > 0) {
$result .= sprintf('<td colspan=%s height="%s">
</td>', $this->getfirst(),
$this->dayheight);
}
//This is the day counter
$count = $this->getfirst() + 1;
//This loops runs through the number fo days in the month
for($j=1;$j<=$this->numdays;$j++) {
//Create the cells for the indivdual days
//Divide the current count by 7 if there is no remainder we no we need
//to end the row and start a new one
if (is_int($count/7)) {
$result .= sprintf('<td height="%s"><span style="
font-family:%s;font-size:%s;color:%s">%s</span>
</td></tr><tr align="center">%s', $this->dayheight,
$this->fontface, $this->daysize, $this->daycolor,
$j, "\n");
}
//Or elese we just print a row
else {
$result .= sprintf('<td height="%s"><span style="
font-family:%s;font-size:%s;color:%s">%s</span>
</td>', $this->dayheight, $this->fontface,
$this->daysize, $this->daycolor, $j);
}
//INcrement the day counter
$count++;
}
//Check to see if there are left over spaces to fill up the week if so make
//a cell with colspan set to that number of spaces
if ($this->getlast() > 0) {
$result .= sprintf('<td colspan=%s height="%s"> </td>%s
', $this->getlast(), $this->dayheight, "\n");
}
//End the cell
$result .= sprintf('</tr></table>');
return $result;
}
}
//Sample
//Instaniate the calendar class
$cal = new calendar;
//This will set look and feel for the calendar
/*
1st argument is the width of the calendar and should be divisble by 7
2nd argument is the font color for the numbered days in the calendar
3rd argument is the link color
4th argument is the background color for the calendar
5th argument is the font size for the link in pixels
6th argument is the font size for the numbered days in pixels
7th argument is the font size for the day header and month name in pixels
8th argument is the font color for the day header and month name
9th argument is the font weight for the day header and month name
10th argument is the height of the cells that contain the days
11th argument is the font face for the calendar
*/
$cal->set_attributes(210, "#000000", "#ff0000", "#cccccc",
11, 11, 12, "navy", "bold",
20, "Arial, Helvetica, Sans-Serif");
//Print the calendar
print $cal->make_calendar();
?>
Please plug your Aceess database path to test my codes. It is simple and easy. Copy and paste the codes in your text editor and save as aspx file.
Originalkommentare (3)
Wiederhergestellt von der Wayback Machine