A simple PHP calendar function

Recently I needed a calendar to display on a site. I looked around for something I could just cut and paste and drop in but I couldn’t find anything, but picked up something I had started about six months earlier and which had then fallen by the wayside. Now calendars aren’t actually very complicated, but they are a bit of a fiddle. The aim of this calendar function is therefore just to produce a skeleton calendar that I can drop into anything, you can stick anything you want in a calendar cell (day) – it doesn’t matter because all the code for content lives outside the calendar. There are css hooks for all the various cells, columns etc. so you can format it exactly how you want.

Calendar Screenshot

I wrote this as a CakePHP helper, but at the end of the day it is just a function and there is nothing Cake specific about it.


';
			
			$str .= '';
			
			$str .= 'prev' . ucfirst($month) . ' ' . $year . 'next';
			
			
			
			$str .= '';
				for($i = 0; $i < 7;$i++)
					{
						$str .= '' . $day_list[$i] . '';
					}
			$str .= '';
			
			$str .= '';
			
			// get the first day of the month
			
			
			$str .= '';
		
			
				
				while($day < $days_in_month)
					{
						$str .= '';
						
						
								
								for($i = 0; $i < 7; $i ++)
									{
									
										$cell = ' ';
										
										if(isset($data[$day]))
											{
												$cell = $data[$day];
											}
											
										$class = '';
										
										if($i > 4)
											{
												$class = ' class="cell-weekend" ';
											}
											
										
										if($day == $today)
											{
												$class = ' class="cell-today" ';
											}
									
										if(($first_day_in_month == $day_list[$i] || $day > 1) && ($day < $days_in_month))
											{
												$str .= '
' . $day . '
' . $cell . '
'; $day++; } else { $str .= ' '; } } $str .= ''; } $str .= ''; $str .= ''; return $str; } ?>

The function parameters are as follows:

  • $year – expects a year in 4 digit e.g. 2007
  • $month – expects a month in english e.g. january
  • $data – an array containing the data for each day of the month e.g.

    $data[2] = ‘This is an entry for the 2nd day of the month’;
    $data[24] = ‘A link for the 24th of the month‘;

    The data is any HTML you want – it is up to you to generate it yourself before you hand it to the calendar.

  • $base_url – the url to send the back / foward links on to i.e. the address of page (the calendar expects to be in a mod re-written situation e.g. www.flipflops.org/calendar/2008/june)

CSS


/* calendar CSS */

table.calendar {width: auto; border: 1px solid #cccccc; border-collapse: collapse; margin: 0px; padding: 0px; background-color: #ffffff;}
table.calendar th {background-color: #eeeeee; text-transform: none; color: #444444; padding: 4px; text-align: center; border: 1px solid #eeeeee;}

table.calendar th.cell-prev {text-align: left;}
table.calendar th.cell-next {text-align: right;}
table.calendar th.cell-header {width: 70px; border-bottom: 1px solid #cccccc;}
table.calendar td.cell-today {background-color: #e2e8f6;} /* today in the current month */
table.calendar td.cell-weekend {background-color: #F3F5EB;}
table.calendar td {border: 1px solid #cccccc;}
					
table.calendar td div.cell-number {text-align: right; font-size: 8px; color: #444444; display: block;}
table.calendar td div {display: block; font-size: 10px; text-align: left;}
table.calendar thead th {border: 1px solid #cccccc;}

I use this as a CakePHP helper – if anyone is interested I’ll put up the supporting code showing how it might be used in a view / controller situation.

Electricity

I saw two videos today both of them were disturbing in thier own ways the similarity – electricity.

The first one shows a guy with the worlds fastest electric drag bike – crashing it.

The second clip shows a student getting zapped with a tazer gun at a rally for US presidential candidate John Kerry.

Portfolio 2004 -2007

A few sites from my Portfolio 2004 – 2007. Working as Senior Developer for COSMIC. I developed a PHP CMS framework called Rocket which is as the core of most of these sites.

The projects include:

  • E-commerce
  • Content Management Systems
  • Custom Programming & Database Integration