日曆類別
日曆類可以讓你動態創建日曆。並且用日曆模板對建立的日曆格式化,100%的控制它的樣式。另外,你可以傳送資料到你的日曆單元格中。
初始化類別
和大多數其他CI中的類別一樣,在控制器中初始化日曆類用 $this->load->library 函數:
$this->load->library('calendar');
載入之後,日曆類別可以這樣使用: $this->calendar
顯示單一日曆
這是一個簡單的例子告訴你如何去顯示一個日曆:
$this->load->library('calendar');
echo $this->calendar->generate();
上面的代碼將根據您的伺服器時間建立一個當前月/年的日曆。要顯示一個指定月和年的日曆,你要傳送這些訊息到日曆生成函數:
$this->load->library('calendar');
echo $this->calendar->generate(2006,6);
上面的程式碼將建立一個顯示2006年6月的日曆。第一個參數指定了年,第二個參數指定了月。
傳遞資料到日曆單元格(Cell)
增加資料到日曆的單元格就要建立一個關聯陣列,在這個陣列中索引是你想設定的天數 value 值包含你要傳入的值。請傳送此關聯陣列到日曆產生函式第三個參數。 參考下面這個例子:
$this->load->library('calendar');
$data = array(
3 => 'http://example.com/news/article/2006/03/',
7 => 'http://example.com/news/article/2006/07/',
13 => 'http://example.com/news/article/2006/13/',
26 => 'http://example.com/news/article/2006/26/'
);
echo $this->calendar->generate(2006,6,$data);
使用上面的例子,天數3,7,13和26將變成連接指向您提供的 URLs。
注意:在默認情況,系統假定你的陣列中已經包含了連結。在下面解釋日曆模板部分您會看到可以自行定義資料如何被傳入日曆單元格以便可以傳不同類型的資訊。
設置偏好
有 7 種偏好可以讓你設置日曆的各個方面。偏好設定可以透過傳入陣列函數到第二個參數。下面是一個參考範例:
$prefs = array (
'start_day' => 'saturday',
'month_type' => 'long',
'day_type' => 'short'
);
$this->load->library('calendar',$prefs);
echo $this->calendar->generate();
上面的程式碼將從禮拜六開始,用"長"月標題和"短"天數格式。更多關於偏好的設定資訊請看下面。
Preference | Default Value | Options | Description |
---|---|---|---|
template | None | None | 字串包含您的日曆模板。參考底下模板章節。 |
local_time | time() | None | A Unix timestamp corresponding to the current time. |
start_day | sunday | 一週內的任一天(sunday,monday,ect.) | 指定每週的第一天。 |
month_type | long | long,short | 月份的顯示樣式.long = January, short = Jan。 |
day_type | abr | long,short,abr | 星期的顯示樣式long = Sunday, short = Sun, abr = Su. |
show_next_prev | FALSE | TRUE/FALSE (boolean) | 是否顯示"上個月"和"下個月"連結。 |
next_prev_url | None | A URL | 設定上個月/下個月連接位址。 |
顯示下一月/上一月連結
要讓你的日曆透過顯示下一月/上一月連結來動態的減少/增加,可以仿照下面的例子建立你的日曆:
$prefs = array (
'show_next_prev' => TRUE,
'next_prev_url' => 'http://example.com/index.php/calendar/show/'
);
$this->load->library('calendar',$prefs);
echo $this->calendar->generate($this->uri->segment(3),$this->uri->segment(4));
在上面的例子中,你會注意到這幾點:
- 您必須把 "show_next_prev" 設定為 TRUE。
- 您必須在 "next_prev_url" 偏好中提供 URL 給日曆類別。
- 您必須透過 URI segments 參數提供 "year" 合和 "month" 給日曆產生函式(注意: 日曆類別會自動新增 year/month 給您提供的 URL)。
建立一個日曆模板
藉由建立一個日曆模板你能夠100%的控制界面設計。日曆的每一部分都要被放在一對偽變數中,像底下這樣:
$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}"><<</a></th>{/heading_previous_cell}
{heading_title_cell}<th colspan="{colspan}">{heading}</th>{/heading_title_cell}
{heading_next_cell}<th><a href="{next_url}">>></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_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} {/cal_cell_blank}
{cal_cell_end}</td>{/cal_cell_end}
{cal_row_end}</tr>{/cal_row_end}
{table_close}</table>{/table_close}
';
$this->load->library('calendar',$prefs);
echo $this->calendar->generate();