A PHP Calendar Class Based on Zend_Date
Posted on : 26-05-2009 | By : Derek | In : PHP, Posts, Zend
Tags: CSS, Zend Framework
14
A recent project required an event calendar in both a mini and full sized format. The project was based on Zend Framework, a highly scalable and feature-rich PHP MVC framework. The resulting Calendar class is admittedly quite basic, but I thought it might prove useful for other PHP/Zend coders who are trying to find a simple yet extensible Calendar solution for their own projects.
Localization
The benefit of using Zend_Date is that it relies on Zend_Locale for localization. To promote this, this custom Calendar class can be used to create a calendar in any language via the class constructor’s ‘locale’ parameter.
Features
- It can output HTML in the form of a table with the month, days of the week, and days visible.
- It can generate the calendar HTML header alone, or the calendar HTML table body alone.
- It can also be used to generate previous and next month links in the case you wanted to allow users to select the month themselves.
- There is control over the table css, select box css , and select box form name via the html methods parameters
- The class can also be used to generate Calendar data that you can access via more standard (get and set) methods to support your own unique Calendaring needs, i.e. without relying on HTML output.
Demo
Here is a link to a demo to get you started.
Downloads
- Download the code here: [download id="4"]
- Comment below and let me know if it met your needs!
Source/Contribute
A View Helper version is being developed:
Project source: zfcalendar project hosting


Hi
I had seen this calender this is amazing….
But i wanna three calender on one page some like
January — February — March On one page with next and previous link
Among other things, this class allows you to generate the entire Calendar HTML (getCalendarHtml), the calendar HTML header alone (getCalendarHeaderHtml ) or the calendar HTML body alone (getCalendarBodyHtml).
The simplest way would be to create your own method that would use three calendar objects (returning just the calendar body), coupled with your own implementation of the calendar header (using the non-html generating class methods alone). Of course, this isn’t the most elegant solution, but it would work in theory.
Thank you very much
You save me a lot of work.
I use it in my application with minimum of modifications.
hi this calander is good, but i see 32 days in a month?? please help
@Sandeep. I identified and fixed the extra day issue. Download the latest version.
Derek,
This is awesome. Thanks a lot for making it. First thing I added was a __toString overload
public function __toString()
{
return $this->getCalendarHtml();
}
so you can do
@Ben. Good idea! Should have done that myself!
Hi Derek,
First of all thanks for the effort
Second, I’m new to ZF and I want to use the calender.
where should I place the Calendar class and the demo code within the ZF project folders, in order to make it work on my website?
Many Thanks,
Oran
@Oran. You can put the Calendar class anywhere you like! Just make sure its part of your include path. Typically, zend framework components are stored in the ‘/library/Zend’ folder, with the include path set to ‘library’.
ex: set_include_path(get_include_path() . PATH_SEPARATOR . ‘/path/to/Zend’);
I would suggest you put the Calendar class inside the ‘library’ folder as well, either on its own, or in another folder called ‘Custom’. If you go the first route, include it in your php files using require_once ‘Calendar.php’; . In the second example use, require_once ‘Custom/Calendar.php’;
Nice job. However, there are some notices poping up. I found the issues, here are they:
1 – line 176. “$html .= “, just remove the “.”, as the $html is being created now.
2 – You call $this->localeStr, but did not declare it. Just add “private $localeStr;” at the beginning of the class together with the other properties.
3 – Do not use “onclick” for a select form element. Use “onchange” instead, or it will submit before the user is able to choose the option.
That’s all for now. Good work.
@Jaime Neto Thanks for your suggestions. I’ll look into it. Feel free to pass along the fixes if you’ve implemented them.
this as a view helper for ZF == AWESOME!
@Christian. I agree! That would be the best place for it. I’ll let you know when I get a chance to do just that. Thanks.
Very useful! With ZF i put this as “services”:
class Service_Calendar
and config Bootstrap for the prefix “Service” on a folder into the project, without touch Zend Library.