Symfoware

Symfowareについての考察blog

CodeIgniter 3 カレンダークラスの使用方法(Library Reference - Calendaring Class)

CodeIgniter User Guide

Library ReferenceのCalendaring Classについて調べてみます。
Calendaring Class



Calendaring Class



カレンダークラスを使用すれば、簡単にカレンダーの表示を行うことができます。
カレンダーの表示は、テンプレートを修正することで全ての箇所を変更可能です。



Using the Calendaring Class



カレンダークラスの使い方を見ていきます。



Initializing the Class



カレンダークラスを初期化するには、calendarライブラリをロードします。


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




一度ロードしておけば、以下の形でカレンダークラスを使用することができます。


  1. $this->calendar





Displaying a Calendar



カレンダーを表示する簡単なサンプルです。


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




実行した日のカレンダーが表示されます。

544_01.png


任意の月のカレンダーを表示するには、引数に年と月を指定します。


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





2006年6月のカレンダーが表示されました。

544_02.png





Passing Data to your Calendar Cells



カレンダーの日付にリンクを設置したい場合、第三引数に日付とリンクの
連想配列を設定してやります。

こうすることで、自動的に対象の日付にリンクが設定されます。


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




3日,7日,13日そして26日にリンクが設定されました。

544_03.png


デフォルトではリンクが設定されますが、この動作はカスタマイズにより変更可能です。




Setting Display Preferences



ライブラリロード時に第二引数を与えることで、カレンダーの表示を変更することができます。


  1. $prefs = array(
  2.     'start_day'    => 'saturday',
  3.     'month_type' => 'long',
  4.     'day_type'     => 'short'
  5. );
  6. $this->load->library('calendar', $prefs);
  7. echo $this->calendar->generate();




544_04.png



設定できるパラメーターは以下のとおり。

PreferenceDefaultOptionsDescription
templateNoneNoneカレンダーを作成するときに使用するテンプレート(文字列 or array)
local_timetime()None現在時刻を取得するUnixタイムスタンプ
start_daysundayAny week day (sunday, monday, tuesday, etc.)カレンダーを開始する曜日
month_typelonglong, shortヘッダーに表示する月名称の表示方法。long = January, short = Jan.
day_typeabrlong, short, abr曜日名称の表示方法。the column headers. long = Sunday, short = Sun, abr = Su.
show_next_prevFALSETRUE/FALSE (boolean)次の月、前の月を表示するリンクを表示するか。
next_prev_urlcontroller/methodA URL前の月、次の月を表示するリンクがクリックされた時のリンク先
show_other_daysFALSETRUE/FALSE (boolean)他の月の日付も表示するか




Showing Next/Previous Month Links



次の月/前の月のリンクを表示するサンプルです。


  1. <?php
  2. class Sample extends CI_Controller {
  3.     
  4.     public function show() {
  5.         $prefs = array(
  6.             'show_next_prev' => TRUE,
  7.             'next_prev_url' => '/sample/show/'
  8.         );
  9.         $this->load->library('calendar', $prefs);
  10.         echo $this->calendar->generate($this->uri->segment(3), $this->uri->segment(4));
  11.         
  12.     }
  13.     
  14. }






引数なしでアクセスした場合は、当月が表示されます。

544_05.png


次へのリンクには/sample/show/2015/03、
前へのリンクには/sample/show/2015/01が自動的に設定されます。

次へをクリック時。

544_06.png


前へをクリック時。

544_07.png




Creating a Calendar Template



カレンダーの表示内容は、全て指定可能です。
サンプルはこのようになります。


  1. $prefs['template'] = '
  2.     {table_open}<table border="0" cellpadding="0" cellspacing="0">{/table_open}
  3.     {heading_row_start}<tr>{/heading_row_start}
  4.     {heading_previous_cell}<th><a href="{previous_url}"><<</a></th>{/heading_previous_cell}
  5.     {heading_title_cell}<th colspan="{colspan}">{heading}</th>{/heading_title_cell}
  6.     {heading_next_cell}<th><a href="{next_url}">>></a></th>{/heading_next_cell}
  7.     {heading_row_end}</tr>{/heading_row_end}
  8.     {week_row_start}<tr>{/week_row_start}
  9.     {week_day_cell}<td>{week_day}</td>{/week_day_cell}
  10.     {week_row_end}</tr>{/week_row_end}
  11.     {cal_row_start}<tr>{/cal_row_start}
  12.     {cal_cell_start}<td>{/cal_cell_start}
  13.     {cal_cell_start_today}<td>{/cal_cell_start_today}
  14.     {cal_cell_start_other}<td class="other-month">{/cal_cell_start_other}
  15.     {cal_cell_content}<a href="{content}">{day}</a>{/cal_cell_content}
  16.     {cal_cell_content_today}<div class="highlight"><a href="{content}">{day}</a></div>{/cal_cell_content_today}
  17.     {cal_cell_no_content}{day}{/cal_cell_no_content}
  18.     {cal_cell_no_content_today}<div class="highlight">{day}</div>{/cal_cell_no_content_today}
  19.     {cal_cell_blank} {/cal_cell_blank}
  20.     {cal_cell_other}{day}{cal_cel_other}
  21.     {cal_cell_end}</td>{/cal_cell_end}
  22.     {cal_cell_end_today}</td>{/cal_cell_end_today}
  23.     {cal_cell_end_other}</td>{/cal_cell_end_other}
  24.     {cal_row_end}</tr>{/cal_row_end}
  25.     {table_close}</table>{/table_close}
  26. ';
  27. $this->load->library('calendar', $prefs);
  28. echo $this->calendar->generate();




544_08.png



arrayを用いて、変更したい箇所だけの指定も可能です。


  1. $prefs['template'] = array(
  2.     'table_open'         => '<table class="calendar">',
  3.     'cal_cell_start'     => '<td class="day">',
  4.     'cal_cell_start_today' => '<td class="today">'
  5. );
  6. $this->load->library('calendar', $prefs);
  7. echo $this->calendar->generate();







Class Reference



カレンダークラスのメソッド一覧です。
カレンダークラスには、カレンダー生成以外にも便利なメソッドが用意されています。


initialize([$config = array()])



カレンダークラスの初期化を行います。


Parameters:
$config (array) – Configuration parameters

Returns:
CI_Calendar instance (method chaining)

Return type:
CI_Calendar







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






get_month_name($month)



表示する月の名前を文字列で取得します。


Parameters:
$month (int) – Month

Returns:
Month name

Return type:
string





get_day_names($day_type = '')



表示する曜日の名前の文字列を配列で取得します。


Parameters:
$day_type (string) – ‘long’, ‘short’, or ‘abr’

Returns:
Array of day names

Return type:
array





adjust_date($month, $year)



指定された年月を存在する年月に調整します。


Parameters:    
$month (int) – Month
$year (int) – Year

Returns:    
An associative array containing month and year

Return type:    
array




翌月を求めるとき、今の月に1加えることがよくあると思います。
12の時は13にせずに年に1加えて、月は1に戻して・・・という処理を肩代わりしてくれます。


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




表示内容はこうなります。


  1. Array
  2. (
  3.     [month] => '01'
  4.     [year] => '2015'
  5. )






get_total_days($month, $year)



指定された月が何日あるか。
うるう年の2月の処理に使えそうです。


Parameters:    
$month (int) – Month
$year (int) – Year

Returns:    
Count of days in the specified month

Return type:    
int




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




このメソッドは、内部的にはDateヘルパーのdays_in_month()関数を呼び出すようです。



default_template()



カレンダー表示に使用するテンプレートを取得します。


Returns:
An array of template values

Return type:
array






parse_template()



テンプレートの解析を行います。


Returns:
CI_Calendar instance (method chaining)

Return type:
CI_Calendar







カレンダー表示の日本語化



カレンダーの月や曜日を日本語で表示させようと調べてみたのですが、
どうやら言語ファイルで対応するようです。

日本語化は多言語化対応の項目で調べてみようと思います。




CodeIgniter 3のユーザーガイド(User Guide)まとめ

関連記事

テーマ:プログラミング - ジャンル:コンピュータ

  1. 2015/02/01(日) 11:57:50|
  2. PHP
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集
<<CodeIgniter 3 設定ファイルの読み込み(Library Reference - Config Class) | ホーム | CodeIgniter 3 キャッシュドライバーの使用方法(Library Reference - Caching Driver)>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://symfoware.blog68.fc2.com/tb.php/1622-e93f3ce2
この記事にトラックバックする(FC2ブログユーザー)