'Week Range', 'pi_version' => '1.2.1', 'pi_author' => 'Brian Litzinger', 'pi_author_url' => 'http://www.brianlitzinger.com/ee/', 'pi_description' => 'Display a 1 week calendar', 'pi_usage' => Week_range::usage() ); class Week_range { var $return_data; var $week_start; var $week_end; var $current_date; var $format_month; var $format_day; var $format_day_of_week; var $format_year; var $separator; var $date; var $today_first; var $start_day = 'last sunday'; var $end_day = 'next saturday'; function Week_range() { global $TMPL; $this->increment = $TMPL->fetch_param('increment') ? $TMPL->fetch_param('increment') : 0; $this->date = $TMPL->fetch_param('date') ? $TMPL->fetch_param('date') : date('Y-m-d'); $this->format_month = $TMPL->fetch_param('format_month') ? $TMPL->fetch_param('format_month') : 'm'; $this->format_day = $TMPL->fetch_param('format_day') ? $TMPL->fetch_param('format_day') : 'd'; $this->format_day_of_week = $TMPL->fetch_param('format_day_of_week') ? $TMPL->fetch_param('format_day_of_week') : 'l'; $this->format_year = $TMPL->fetch_param('format_year') ? $TMPL->fetch_param('format_year') : 'Y'; $this->separator = $TMPL->fetch_param('separator') ? $TMPL->fetch_param('separator') : '–'; $this->today_first = $TMPL->fetch_param('today_first') ? $TMPL->fetch_param('today_first') : 'no'; if($this->today_first == 'yes') { $this->start_day = 'today'; $this->end_day = strtolower('next ' . date('l', strtotime($this->start_date . '+6 days'))); } list($this->start_date, $this->end_date) = $this->_get_range($this->date); } function days() { global $TMPL; for($i = 0; $i <= 6; $i++) { $tagdata = $TMPL->tagdata; foreach ($TMPL->var_single as $var) { if($var == 'count') { $tagdata = $TMPL->swap_var_single($var, $i, $tagdata); } else { $val = date($this->{'format_'.$var}, strtotime($this->start_date . '+' . $i .' days')); $tagdata = $TMPL->swap_var_single($var, $val, $tagdata); } } $this->return_data .= $tagdata; } return $this->return_data; } function day() { if($this->increment == '1') { $this->return_data = date($this->format_day, strtotime($this->start_date)); } else { $increment--; $this->return_data = date($this->format_day, strtotime($this->start_date . '+' . $this->increment .' days')); } return $this->return_data; } function month() { $this->return_data = date($this->format_month, strtotime($this->start_date)); return $this->return_data; } function year() { $this->return_data = date($this->format_year, strtotime($this->start_date)); return $this->return_data; } function day_of_week() { if($this->increment == '1') { $this->return_data = date($this->format_day_of_week, strtotime($this->start_date)); } else { $increment--; $this->return_data = date($this->format_day_of_week, strtotime($this->start_date . '+' . $this->increment .' days')); } return $this->return_data; } function full_date() { $month_start = date($this->format_month, strtotime($this->start_date)); $month_end = date($this->format_month, strtotime($this->end_date)); $day_start = date($this->format_day, strtotime($this->start_date)); $day_end = date($this->format_day, strtotime($this->end_date)); $year_start = date($this->format_year, strtotime($this->start_date)); $year_end = date($this->format_year, strtotime($this->end_date)); $week_title = $month_start . ' ' . $day_start; $week_title .= ($year_start != $year_end) ? ', ' . $year_start : ''; $week_title .= $this->separator; $week_title .= ($month_start != $month_end) ? $month_end . ' ' : ''; $week_title .= $day_end . ', '; $week_title .= ($year_start != $year_end) ? $year_end : $year_start; $this->return_data = $week_title; return $this->return_data; } function _get_range($date) { $ts = strtotime($date); $start = (date('w', $ts) == 0) ? $ts : strtotime($this->start_day, $ts); return array(date('Y-m-d', $start), date('Y-m-d', strtotime($this->end_day, $start))); } function usage() { ob_start(); ?> Print out a single week of a calendar, or get Month, Day, or Year values from a week range with a given date. Defaults to today's date. Loop through each day of the week, and print a calendar. {exp:week_range:days}
  • {day} {day_of_week} {embed="global/_calendar-day" year="{year}" month="{month}" day="{day}"}
  • {/exp:week_range:days} Find all events for each day. {exp:weblog:entries weblog="events" dynamic="off" show_future_entries="yes" year="{embed:year}" month="{embed:month}" day="{embed:day}"} {title} {/exp:weblog:entries} To print "September 27–October 3, 2009" {exp:week_range:full_date format_month="F" format_day="j" format_year="Y" date="2009-10-01"} Other available methods: {exp:week_range:day format_day="j"} {exp:week_range:month format_month="F"} {exp:week_range:year format_year="Y"} {exp:week_range:day_of_week} Parameters ------------------ date= (optional) Change the date you want to pass to it. Defaults to today. e.g. 2009-10-1 get= (optional default: false, options: day, month, year, day_of_week, full_date) Get various parts of a date increment= (optional default: 0) If you use some sort of other loop generator (e.g. Loop plugin) date= (optional default: date('Y-m-d')) Define another date to start from separator= (optional default: '–') If you want to separate dates with something else format_month= (optional default: 'm') Use any valid PHP date format character format_day= (optional default: 'd') Use any valid PHP date format character format_day_of_week= (optional default: 'l') Use any valid PHP date format character format_year= (optional default: 'Y') Use any valid PHP date format character today_first= (optional default: 'no') If 'yes', the 7 day calendar will start with today's date Variables ------------------ {year} {month} {day} {day_of_week} e.g. Monday, Tuesday etc