CodeIgniter 日歷類

2018-07-21 15:39 更新

日歷類

使用日歷類可以讓你動(dòng)態(tài)的創(chuàng)建日歷,并且可以使用日歷模板來(lái)格式化顯示你的日歷, 允許你 100% 的控制它設(shè)計(jì)的每個(gè)方面。另外,你還可以向日歷的單元格傳遞數(shù)據(jù)。

使用日歷類

初始化類

跟 CodeIgniter 中的其他類一樣,可以在你的控制器中使用 $this->load->library() 方法加載日歷類:

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

一旦加載,日歷類就可以像下面這樣使用:

$this->calendar

顯示一個(gè)日歷

這里是一個(gè)簡(jiǎn)單的例子,告訴你如何去顯示一個(gè)日歷:

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

上面的代碼將根據(jù)你服務(wù)器時(shí)間創(chuàng)建一個(gè)當(dāng)前月/年的日歷。要顯示一個(gè)指定月和年的日歷, 你要傳遞這些信息到日歷生成函數(shù):

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

上面的代碼將創(chuàng)建一個(gè)顯示 2006 年 6 月的日歷,第一個(gè)參數(shù)指定了年,第二個(gè)參數(shù)指定了月。

傳數(shù)據(jù)到單元格

如果需要添加數(shù)據(jù)到日歷的單元格中,就要?jiǎng)?chuàng)建一個(gè)關(guān)聯(lián)數(shù)組,這個(gè)數(shù)組中索引是想添加數(shù)據(jù)的日期, 數(shù)組對(duì)應(yīng)的值是想添加的數(shù)據(jù)。該數(shù)組通過(guò)日歷生成函數(shù)的第三個(gè)參數(shù)被傳入,參考下面這個(gè)例子:

$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);

使用上面的例子,天數(shù)為 3、7、13 和 26 將變成鏈接指向你提供的 URL 。

注解

默認(rèn)情況下,系統(tǒng)假定你的數(shù)組中包含了鏈接。在下面介紹日歷模板的部分, 你會(huì)看到你可以自定義處理傳入日歷單元格的數(shù)據(jù),所以你可以傳不同類型的信息。

設(shè)置顯示參數(shù)

有 8 種不同的參數(shù)可以讓你設(shè)置日歷的各個(gè)方面,你可以通過(guò)加載函數(shù)的第二個(gè)參數(shù)來(lái)設(shè)置參數(shù)。 例如:

$prefs = array(
    'start_day'    => 'saturday',
    'month_type'   => 'long',
    'day_type'     => 'short'
);

$this->load->library('calendar', $prefs);

echo $this->calendar->generate();

上面的代碼將顯示一個(gè)日歷從禮拜六開始,使用用完整的月份標(biāo)題和縮寫的天數(shù)格式。 更多參數(shù)信息請(qǐng)看下面。

參數(shù) 默認(rèn)值 選項(xiàng) 描述
template None None 字符串或數(shù)組,包含了你的日歷模板,見下面的模板部分。
local_time time() None 當(dāng)前時(shí)間的 Unix 時(shí)間戳。
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) 是否顯示 "上個(gè)月" 和 "下個(gè)月" 鏈接,見下文。
next_prev_url controller/method A URL 設(shè)置 "上個(gè)月" 和 "下個(gè)月" 的鏈接地址。
show_other_days FALSE TRUE/FALSE (boolean) 是否顯示第一周和最后一周相鄰月份的日期。

顯示下一月/上一月鏈接

要讓你的日歷通過(guò)下一月/上一月鏈接動(dòng)態(tài)的減少/增加,可以仿照下面的例子建立你的日歷:

$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));

在上面的例子中,你會(huì)注意到這幾點(diǎn):

  • "show_next_prev" 參數(shù)必須設(shè)置為 TRUE
  • "next_prev_url" 參數(shù)必須設(shè)置一個(gè) URL ,如果不設(shè)置,會(huì)默認(rèn)使用當(dāng)前的 控制器/方法
  • 通過(guò) URI 的段將 "年" 和 "月" 參數(shù)傳遞給日歷生成函數(shù)(日歷類會(huì)自動(dòng)添加 "年" 和 "月" 到你提供的 URL)

創(chuàng)建一個(gè)日歷模板

通過(guò)創(chuàng)建一個(gè)日歷模板你能夠 100% 的控制你的日歷的設(shè)計(jì)。當(dāng)使用字符串方式設(shè)置模板時(shí), 日歷的每一部分都要被放在一對(duì)偽變量中,像下面這樣:

$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();

當(dāng)使用數(shù)組方式設(shè)置模板時(shí),你需要傳遞 key => value 鍵值對(duì),你可以只設(shè)置你想設(shè)置的參數(shù), 其他沒(méi)有設(shè)置的參數(shù)會(huì)使用日歷類的默認(rèn)值代替。

例子:

$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

initialize([$config = array()])

參數(shù):

  • $config (array) -- Configuration parameters

返回: CI_Calendar instance (method chaining)

返回類型: CI_Calendar

初始化日歷類參數(shù),輸入?yún)?shù)為一個(gè)關(guān)聯(lián)數(shù)組,包含了日歷的顯示參數(shù)。

generate([$year = ''[, $month = ''[, $data = array()]]])

參數(shù):

  • $year (int) -- Year
  • $month (int) -- Month
  • $data (array) -- Data to be shown in the calendar cells

返回: HTML-formatted calendar

返回類型: string

生成日歷。

get_month_name($month)

參數(shù):

  • $month (int) -- Month

返回: Month name

返回類型: string

提供數(shù)字格式的月份,返回月份的名稱。

get_day_names($day_type = '')

參數(shù):

  • $day_type (string) -- 'long', 'short', or 'abr'

返回: Array of day names

返回類型: array

根據(jù)類型返回一個(gè)包含星期名稱(Sunday、Monday 等等)的數(shù)組,類型有:long、short 和 abr 。 如果沒(méi)有指定 $day_type 參數(shù)(或該參數(shù)無(wú)效),方法默認(rèn)使用 abr(縮寫) 格式。

adjust_date($month, $year)

參數(shù):

  • $month (int) -- Month
  • $year (int) -- Year

返回: An associative array containing month and year

返回類型: array

該方法調(diào)整日期確保日期有效。例如,如果你將月份設(shè)置為 13 ,年份將自動(dòng)加 1 ,并且月份變?yōu)橐辉?

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

輸出:

Array
(
    [month] => '01'
    [year] => '2015'
)

get_total_days($month, $year)

參數(shù):

  • $month (int) -- Month
  • $year (int) -- Year

返回: Count of days in the specified month

返回類型: int

獲取指定月的天數(shù):

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

注解

該方法是 日期輔助函數(shù) 的 days_in_month() 函數(shù)的別名。

default_template()

返回: An array of template values

返回類型: array

默認(rèn)的模板,當(dāng)你沒(méi)有使用你自己的模板時(shí)將會(huì)使用該方法。

parse_template()

返回: CI_Calendar instance (method chaining)

返回類型: CI_Calendar

解析模板中的偽變量 {pseudo-variables} 顯示日歷。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)