# 日歷類
使用日歷類可以讓你動態的創建日歷,并且可以使用日歷模板來格式化顯示你的日歷, 允許你 100% 的控制它設計的每個方面。另外,你還可以向日歷的單元格傳遞數據。
[TOC=2,3]
## 使用日歷類
### 初始化類
跟 CodeIgniter 中的其他類一樣,可以在你的控制器中使用?$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 月的日歷,第一個參數指定了年,第二個參數指定了月。
### 傳數據到單元格
如果需要添加數據到日歷的單元格中,就要創建一個關聯數組,這個數組中索引是想添加數據的日期, 數組對應的值是想添加的數據。該數組通過日歷生成函數的第三個參數被傳入,參考下面這個例子:
~~~
$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 將變成鏈接指向你提供的 URL 。
> 注解
> 默認情況下,系統假定你的數組中包含了鏈接。在下面介紹日歷模板的部分, 你會看到你可以自定義處理傳入日歷單元格的數據,所以你可以傳不同類型的信息。
### 設置顯示參數
有 8 種不同的參數可以讓你設置日歷的各個方面,你可以通過加載函數的第二個參數來設置參數。 例如:
~~~
$prefs = array(
'start_day' => 'saturday',
'month_type' => 'long',
'day_type' => 'short'
);
$this->load->library('calendar', $prefs);
echo $this->calendar->generate();
~~~
上面的代碼將顯示一個日歷從禮拜六開始,使用用完整的月份標題和縮寫的天數格式。 更多參數信息請看下面。
| 參數 | 默認值 | 選項 | 描述 |
| --- | --- | --- | --- |
| **template** | None | None | 字符串或數組,包含了你的日歷模板,見下面的模板部分。 |
| **local_time** | time() | None | 當前時間的 Unix 時間戳。 |
| **start_day** | sunday | Any week day (sunday, monday, tuesday, etc.) | 指定每周的第一天是周幾。 |
| **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** | controller/method | A URL | 設置 "上個月" 和 "下個月" 的鏈接地址。 |
| **show_other_days** | FALSE | TRUE/FALSE (boolean) | 是否顯示第一周和最后一周相鄰月份的日期。 |
### 顯示下一月/上一月鏈接
要讓你的日歷通過下一月/上一月鏈接動態的減少/增加,可以仿照下面的例子建立你的日歷:
~~~
$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 的段將 "年" 和 "月" 參數傳遞給日歷生成函數(日歷類會自動添加 "年" 和 "月" 到你提供的 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_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} {/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();
~~~
當使用數組方式設置模板時,你需要傳遞?key => value?鍵值對,你可以只設置你想設置的參數, 其他沒有設置的參數會使用日歷類的默認值代替。
例子:
~~~
$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();
~~~
## 類參考
classCI_Calendar
>[info] ### initialize([$config = array()])
參數:
* **$config**?(array) -- Configuration parameters
返回: CI_Calendar instance (method chaining)
返回類型: CI_Calendar
初始化日歷類參數,輸入參數為一個關聯數組,包含了日歷的顯示參數。
>[info] ### generate([$year = ''[,?$month = ''[,?$data = array()]]])
參數:
* **$year**?(int) -- Year
* **$month**?(int) -- Month
* **$data**?(array) -- Data to be shown in the calendar cells
返回: HTML-formatted calendar
返回類型: string
生成日歷。
>[info] ### get_month_name($month)
參數:
* **$month**?(int) -- Month
返回: Month name
返回類型: string
提供數字格式的月份,返回月份的名稱。
>[info] ### get_day_names($day_type = '')
參數:
* **$day_type**?(string) -- 'long', 'short', or 'abr'
返回: Array of day names
返回類型: array
根據類型返回一個包含星期名稱(Sunday、Monday 等等)的數組,類型有:long、short 和 abr 。 如果沒有指定?$day_type?參數(或該參數無效),方法默認使用 abr(縮寫) 格式。
>[info] ### adjust_date($month,?$year)
參數:
* **$month**?(int) -- Month
* **$year**?(int) -- Year
返回: An associative array containing month and year
返回類型: array
該方法調整日期確保日期有效。例如,如果你將月份設置為 13 ,年份將自動加 1 ,并且月份變為一月:
~~~
print_r($this->calendar->adjust_date(13, 2014));
~~~
輸出:
~~~
Array
(
[month] => '01'
[year] => '2015'
)
~~~
>[info] ### get_total_days($month,?$year)
參數:
* **$month**?(int) -- Month
* **$year**?(int) -- Year
返回: Count of days in the specified month
返回類型: int
獲取指定月的天數:
~~~
echo $this->calendar->get_total_days(2, 2012);
// 29
~~~
> 注解
> 該方法是?[日期輔助函數](http://codeigniter.org.cn/user_guide/helpers/date_helper.html)?的?[days_in_month()](http://codeigniter.org.cn/user_guide/helpers/date_helper.html#days_in_month "days_in_month")?函數的別名。
>[info] ### default_template()
返回: An array of template values
返回類型: array
默認的模板,當你沒有使用你自己的模板時將會使用該方法。
>[info] ### parse_template()
返回: CI_Calendar instance (method chaining)
返回類型: CI_Calendar
解析模板中的偽變量?{pseudo-variables}?顯示日歷。
- 歡迎使用 CodeIgniter
- 安裝說明
- 下載 CodeIgniter
- 安裝說明
- 從老版本升級
- 疑難解答
- CodeIgniter 概覽
- CodeIgniter 將從這里開始
- CodeIgniter 是什么?
- 支持特性
- 應用程序流程圖
- 模型-視圖-控制器
- 設計與架構目標
- 教程 - 內容提要
- 加載靜態內容
- 讀取新聞條目
- 創建新聞條目
- 結束語
- 常規主題
- CodeIgniter URL
- 控制器
- 保留名稱
- 視圖
- 模型
- 輔助函數
- 使用 CodeIgniter 類庫
- 創建類庫
- 使用 CodeIgniter 驅動器
- 創建驅動器
- 創建核心系統類
- 創建附屬類
- 鉤子 - 擴展框架核心
- 自動加載資源
- 公共函數
- 兼容性函數
- URI 路由
- 錯誤處理
- 網頁緩存
- 程序分析
- 以 CLI 方式運行
- 管理你的應用程序
- 處理多環境
- 在視圖文件中使用 PHP 替代語法
- 安全
- PHP 開發規范
- 類庫參考
- 基準測試類
- 緩存驅動器
- 日歷類
- 購物車類
- 配置類
- Email 類
- 加密類
- 加密類(新版)
- 文件上傳類
- 表單驗證類
- FTP 類
- 圖像處理類
- 輸入類
- Javascript 類
- 語言類
- 加載器類
- 遷移類
- 輸出類
- 分頁類
- 模板解析類
- 安全類
- Session 類
- HTML 表格類
- 引用通告類
- 排版類
- 單元測試類
- URI 類
- 用戶代理類
- XML-RPC 與 XML-RPC 服務器類
- Zip 編碼類
- 數據庫參考
- 數據庫快速入門: 示例代碼
- 數據庫配置
- 連接你的數據庫
- 查詢
- 生成查詢結果
- 查詢輔助函數
- 查詢構造器類
- 事務
- 數據庫元數據
- 自定義函數調用
- 數據庫緩存類
- 數據庫工廠類
- 數據庫工具類
- 數據庫驅動器參考
- 輔助函數參考
- 數組輔助函數
- 驗證碼輔助函數
- Cookie 輔助函數
- 日期輔助函數
- 目錄輔助函數
- 下載輔助函數
- 郵件輔助函數
- 文件輔助函數
- 表單輔助函數
- HTML 輔助函數
- 語言輔助函數
- Inflector 輔助函數
- 數字輔助函數
- 路徑輔助函數
- 安全輔助函數
- 表情輔助函數
- 字符串輔助函數
- 文本輔助函數
- 排版輔助函數
- URL 輔助函數
- XML 輔助函數
- 向 CodeIgniter 貢獻你的力量