このエントリーをはてなブックマークに追加

更新日: 2016年2月25日

実行時間: 0.0286

CI_Calendar

 カレンダーを描画するライブラリクラスです。
出力フォーマットはある程度カスタマイズ可能です。また、言語ファイルを設置することで多言語化対応も可能です。

CI_Calendarクラスのロード

 「CI_Loader」クラスの「library()」メソッドで「CI_Calendar」クラスをロードします。
第二引数には、「CI_Calendar」クラスを初期化するための設定情報を指定することができます。 指定しない場合はデフォルト設定値が適用されます。

  • デフォルトロード
  • $this->load->library('calendar');
  • 初期化設定項目
  • 設定項目 デフォルト 設定値 説明
    template (テンプレート説明参照のこと)
    local_time time() タイムスタンプ値 カレンダーの今日の日付を示すタイムスタンプ値
    start_day sunday sunday, monday, tuseday, wednesday, thursday, friday, saturday 週の開始曜日
    month_type long long, short 月を表わす文字列の形式
    day_type abr long, short, abr 曜日を表わす文字列の形式
    show_next_prev FALSE TRUE, FALSE 前月・次月のリンク表示設定
    next_prev_url N/A URI 前月・次月のリンクの基準パス
  • 初期化設定を指定
  • $config = array(
        'month_typ' => 'short'
    )
    $this->load->library('calendar', $config);

カレンダーの描画

 「CI_Calendar」クラスをロードすると、「$this->calendar」として「CI_Calendar」のインスタンスにアクセスすることができます。

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

     カレンダーを表わす文字列を返します。引数を指定しない場合は、現在の日付を基にカレンダーが生成されます。
     第一引数に「年」、第二引数に「月」を指定することができます。また、第三引数には日付にリンクを付けるためのデータを指定することができます。

    $cal = $this->calendar->generate();
    $data = array(
        10 => '/event/2012/4/10/',
        15 => '/event/2012/4/15/',
    );
    $cal = $this->calendar->generate(2012, 4, $data);

カレンダーのテンプレートカスタマイズ

 「CI_Calendar」ライブラリクラスのカレンダーテンプレートは特殊なフォーマットになっています。
{タグキー}」と「{/タグキー}」の間に対応するHTMLタグを記述します。また、「{previous_url}」と「{next_url}」は 前月・次月のリンクに置換され、「{colspan}」は前月・次月リンクがある場合は「7」、 無い場合は「5」に置換されます。 「{heading}」は月 年に置換され、「{week_day}」は曜日に、 「{day}」は日付、「{content}」は日付リンクに置換されます。

 以下が、デフォルトのテンプレートとなります。

{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_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_end}</td>{/cal_cell_end}
{cal_row_end}</tr>{/cal_row_end}

{table_close}</table>{/table_close}
                    

 上記テンプレートの黒文字のHTMLタグが自由にカスタマイズ可能です。

テンプレート適用

 テンプレートを適用するには、「CI_Calendar」クラスをロードする際に設定項目の一つとして引数に指定します。

    $config['template'] = '{table_open}・・省略・・{/table_close}';
    $this->load->library('calendar', $config);

 ソースコード内にテンプレートを記述すると見苦しいので、別ファイルに記述する方が良いかもしれません。

  • TEXTファイルでテンプレートを作成
  • application/views/calendar/my_calendar.txt
  • テンプレートファイル読込
  • $config['template'] = $this->load->file('calendar/my_calendar.txt');
    $this->load->library('calendar', $config);

カレンダーの多言語対応

 カレンダーの「月」と「曜日」の表記を多言語化することができます。多言語対応には「CI_Lang」クラスを利用することになります。

 多言語化するには、まず、「system/language/english/calendar_lang.php」言語ファイルを「application/language/言語/」ディレクトリにコピーし編集します。

    $ cp system/language/english/calendar_lang.php application/language/japanese/
    $ vim application/language/japanese/calendar_lang.php
  • application/language/japanese/calendar_lang.php
  •            :
    $lang['cal_sun'] = '';
    $lang['cal_mon'] = '';
    $lang['cal_tue'] = '';
    $lang['cal_wed'] = '';
    $lang['cal_thu'] = '';
    $lang['cal_fri'] = '';
    $lang['cal_sat'] = '';
               :
    

 静的に言語を設定するには、「application/config/config.php」設定ファイルの「$config['language'] 」で設定します。
 また、動的に言語を切り替えるには、コントローラなどから「generate()」メソッドを実行する前に「CI_Config」クラスの「set_item()」 メソッドで言語を指定します。

  • 動的に言語を指定
  • $this->config->set_item('language', 'japanese');
    $cal = $this->calendar->generate();