+ +
+

Calendaring Class

+

The Calendar class enables you to dynamically create calendars. Your +calendars can be formatted through the use of a calendar template, +allowing 100% control over every aspect of its design. In addition, you +can pass data to your calendar cells.

+ +
+

Using the Calendaring Class

+
+

Initializing the Class

+

Like most other classes in CodeIgniter, the Calendar class is +initialized in your controller using the $this->load->library function:

+
$this->load->library('calendar');
+
+
+

Once loaded, the Calendar object will be available using:

+
$this->calendar
+
+
+
+
+

Displaying a Calendar

+

Here is a very simple example showing how you can display a calendar:

+
$this->load->library('calendar');
+echo $this->calendar->generate();
+
+
+

The above code will generate a calendar for the current month/year based +on your server time. To show a calendar for a specific month and year +you will pass this information to the calendar generating function:

+
$this->load->library('calendar');
+echo $this->calendar->generate(2006, 6);
+
+
+

The above code will generate a calendar showing the month of June in +2006. The first parameter specifies the year, the second parameter +specifies the month.

+
+
+

Passing Data to your Calendar Cells

+

To add data to your calendar cells involves creating an associative +array in which the keys correspond to the days you wish to populate and +the array value contains the data. The array is passed to the third +parameter of the calendar generating function. Consider this example:

+
$this->load->library('calendar');
+
+$data = array(
+        3  => 'http://example.com/news/article/2006/06/03/',
+        7  => 'http://example.com/news/article/2006/06/07/',
+        13 => 'http://example.com/news/article/2006/06/13/',
+        26 => 'http://example.com/news/article/2006/06/26/'
+);
+
+echo $this->calendar->generate(2006, 6, $data);
+
+
+

Using the above example, day numbers 3, 7, 13, and 26 will become links +pointing to the URLs you’ve provided.

+
+

Note

+

By default it is assumed that your array will contain links. +In the section that explains the calendar template below you’ll see how +you can customize how data passed to your cells is handled so you can +pass different types of information.

+
+
+
+

Setting Display Preferences

+

There are seven preferences you can set to control various aspects of +the calendar. Preferences are set by passing an array of preferences in +the second parameter of the loading function. Here is an example:

+
$prefs = array(
+        'start_day'    => 'saturday',
+        'month_type'   => 'long',
+        'day_type'     => 'short'
+);
+
+$this->load->library('calendar', $prefs);
+
+echo $this->calendar->generate();
+
+
+

The above code would start the calendar on saturday, use the “long” +month heading, and the “short” day names. More information regarding +preferences below.

+ ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PreferenceDefaultOptionsDescription
templateNoneNone
+
A string or array containing your calendar template.
+
See the template section below.
+
+
local_timetime()NoneA Unix timestamp corresponding to the current time.
start_daysundayAny week day (sunday, monday, tuesday, etc.)Sets the day of the week the calendar should start on.
month_typelonglong, short
+
Determines what version of the month name to use in the header.
+
long = January, short = Jan.
+
+
day_typeabrlong, short, abr
+
Determines what version of the weekday names to use in
+
the column headers. long = Sunday, short = Sun, abr = Su.
+
+
show_next_prevFALSETRUE/FALSE (boolean)
+
Determines whether to display links allowing you to toggle
+
to next/previous months. See information on this feature below.
+
+
next_prev_urlcontroller/methodA URLSets the basepath used in the next/previous calendar links.
show_other_daysFALSETRUE/FALSE (boolean)
+
Determines whether to display days of other months that share the
+
first or last week of the calendar month.
+
+
+
+ +
+

Creating a Calendar Template

+

By creating a calendar template you have 100% control over the design of +your calendar. Using the string method, each component of your calendar +will be placed within a pair of pseudo-variables as shown here:

+
$prefs['template'] = '
+
+        {table_open}<table border="0" cellpadding="0" cellspacing="0">{/table_open}
+
+        {heading_row_start}<tr>{/heading_row_start}
+
+        {heading_previous_cell}<th><a href="{previous_url}">&lt;&lt;</a></th>{/heading_previous_cell}
+        {heading_title_cell}<th colspan="{colspan}">{heading}</th>{/heading_title_cell}
+        {heading_next_cell}<th><a href="{next_url}">&gt;&gt;</a></th>{/heading_next_cell}
+
+        {heading_row_end}</tr>{/heading_row_end}
+
+        {week_row_start}<tr>{/week_row_start}
+        {week_day_cell}<td>{week_day}</td>{/week_day_cell}
+        {week_row_end}</tr>{/week_row_end}
+
+        {cal_row_start}<tr>{/cal_row_start}
+        {cal_cell_start}<td>{/cal_cell_start}
+        {cal_cell_start_today}<td>{/cal_cell_start_today}
+        {cal_cell_start_other}<td class="other-month">{/cal_cell_start_other}
+
+        {cal_cell_content}<a href="{content}">{day}</a>{/cal_cell_content}
+        {cal_cell_content_today}<div class="highlight"><a href="{content}">{day}</a></div>{/cal_cell_content_today}
+
+        {cal_cell_no_content}{day}{/cal_cell_no_content}
+        {cal_cell_no_content_today}<div class="highlight">{day}</div>{/cal_cell_no_content_today}
+
+        {cal_cell_blank}&nbsp;{/cal_cell_blank}
+
+        {cal_cell_other}{day}{/cal_cel_other}
+
+        {cal_cell_end}</td>{/cal_cell_end}
+        {cal_cell_end_today}</td>{/cal_cell_end_today}
+        {cal_cell_end_other}</td>{/cal_cell_end_other}
+        {cal_row_end}</tr>{/cal_row_end}
+
+        {table_close}</table>{/table_close}
+';
+
+$this->load->library('calendar', $prefs);
+
+echo $this->calendar->generate();
+
+
+

Using the array method, you will pass key => value pairs. You can pass as +many or as few values as you’d like. Omitted keys will use the default values +inherited in the calendar class.

+

Example:

+
$prefs['template'] = array(
+        'table_open'           => '<table class="calendar">',
+        'cal_cell_start'       => '<td class="day">',
+        'cal_cell_start_today' => '<td class="today">'
+);
+
+$this->load->library('calendar', $prefs);
+
+echo $this->calendar->generate();
+
+
+
+
+
+

Class Reference

+
+
+class CI_Calendar
+
+
+initialize([$config = array()])
+
+++ + + + + + + + +
Parameters:
    +
  • $config (array) – Configuration parameters
  • +
+
Returns:

CI_Calendar instance (method chaining)

+
Return type:

CI_Calendar

+
+

Initializes the Calendaring preferences. Accepts an associative array as input, containing display preferences.

+
+ +
+
+generate([$year = ''[, $month = ''[, $data = array()]]])
+
+++ + + + + + + + +
Parameters:
    +
  • $year (int) – Year
  • +
  • $month (int) – Month
  • +
  • $data (array) – Data to be shown in the calendar cells
  • +
+
Returns:

HTML-formatted calendar

+
Return type:

string

+
+

Generate the calendar.

+
+ +
+
+get_month_name($month)
+
+++ + + + + + + + +
Parameters:
    +
  • $month (int) – Month
  • +
+
Returns:

Month name

+
Return type:

string

+
+

Generates a textual month name based on the numeric month provided.

+
+ +
+
+get_day_names($day_type = '')
+
+++ + + + + + + + +
Parameters:
    +
  • $day_type (string) – ‘long’, ‘short’, or ‘abr’
  • +
+
Returns:

Array of day names

+
Return type:

array

+
+

Returns an array of day names (Sunday, Monday, etc.) based on the type +provided. Options: long, short, abr. If no $day_type is provided (or +if an invalid type is provided) this method will return the “abbreviated” +style.

+
+ +
+
+adjust_date($month, $year)
+
+++ + + + + + + + +
Parameters:
    +
  • $month (int) – Month
  • +
  • $year (int) – Year
  • +
+
Returns:

An associative array containing month and year

+
Return type:

array

+
+

This method makes sure that you have a valid month/year. For example, if +you submit 13 as the month, the year will increment and the month will +become January:

+
print_r($this->calendar->adjust_date(13, 2014));
+
+
+

outputs:

+
Array
+(
+        [month] => '01'
+        [year] => '2015'
+)
+
+
+
+ +
+
+get_total_days($month, $year)
+
+++ + + + + + + + +
Parameters:
    +
  • $month (int) – Month
  • +
  • $year (int) – Year
  • +
+
Returns:

Count of days in the specified month

+
Return type:

int

+
+

Total days in a given month:

+
echo $this->calendar->get_total_days(2, 2012);
+// 29
+
+
+
+

Note

+

This method is an alias for Date Helper function days_in_month().

+
+
+ +
+
+default_template()
+
+++ + + + + + +
Returns:An array of template values
Return type:array
+

Sets the default template. This method is used when you have not created +your own template.

+
+ +
+
+parse_template()
+
+++ + + + + + +
Returns:CI_Calendar instance (method chaining)
Return type:CI_Calendar
+

Harvests the data within the template {pseudo-variables} used to +display the calendar.

+
+ +
+ +
+
+ + +