2016-11-26 3 views
0

カレンダー表を使用してカレンダー表を作成するメソッドを作成しました。この表は、カレンダークラスを使用してすべての月を表示します。カスタマイズカレンダー[今月のハイライト表示]

コントローラー:

<?php 

class Calendar extends CI_Controller { 

    public function this_year() { 
     $data['title'] = 'Calendar: ' . date('Y'); 
     $this->load->library('calendar'); 
     $prefs = array(
      'local_time' => 'none', 
      'start_day' => 'sunday', 
      'month_type' => 'long', 
      'day_type' => 'short', 
      'show_next_prev' => FALSE, 
      'show_other_days' => TRUE, 
      'template' => ' 
     {table_open}<table class="table table-condensed">{/table_open} 
     {heading_row_start}<tr class="info">{/heading_row_start} 
     {cal_cell_start_today}<td class="today">{/cal_cell_start_today} 
     {cal_cell_start_other}<td class="other-day">{/cal_cell_start_other} 
    ' 
     ); 
     $this->load->library('calendar', $prefs); 
     $data['calendar'] = '<table class="table-calendar"><tr>'; 
     for ($i = 1; $i <= 12; $i++) { 
      if ($i % 3 == 0) { 
       $data['calendar'].= "<td>{$this->calendar->generate(date('Y'), $i)}</td>"; 
       $data['calendar'].= '</tr><tr>'; 
      } 
      else { 
       $data['calendar'].= "<td>{$this->calendar->generate(date('Y'), $i)}</td>"; 
      } 
     } 
     $data['calendar'].= '</tr></table>'; 
     $this->template->load('template/index', __CLASS__ . "/" . __FUNCTION__, $data); 
    } 

} 

* VIEWで、ちょうどそれは同様に動作し、thisを返す '$カレンダー'

をエコー。

しかし、カレンダーのクラスのテンプレートを使用して現在の月のみを強調表示する方法が見つかりませんでした。私はデフォルトのテンプレートを修正しようとしましたが、それは{heading_title_cell}<th colspan="{colspan}">{heading}</th>{/heading_title_cell}のクラスを変更すると、thisのようなすべての月のラベルが変更されるため動作しません。

私は、基本クラスのチュートリアルのデフォルトのメソッド(同じコード)を使用しています。なにか提案を?

+0

いくつかのコードを追加します...あなたはおそらく、条件クラスを追加するには、いくつかのPHPを実行する必要があります。たとえば、 1月の場合: '<?php if(date( 'n')== 1){$ cssClass = 'active'; }?> ' そして' .heading_row_start.active'にスタイリングを適用してください – reinder

+0

ちょっと@reinder、注目に感謝します。コントローラのソースコードを追加しました。このようなことをするには、CodeIgniterのコアを修正する必要があると私は考えています。私はネイティブメソッドを使用するか、ネイティブクラス/メソッドをアプリケーションコンテキストで独自のコードで拡張する方が好きです。助けになる意見はありますか? :) – ShutUpMagda

答えて

0

それはparse_template()方法に彼の$month変数を渡すgenerate()方法を強制するextendCI_Calendarすることが可能です。 {heading_row_start}<tr>{/heading_row_start}に宣言されたテンプレートを解析しながら、parse_template($month)は例外を適用することができるようになります:

CI_Calendar::parse_template($month), 483

if($val == 'heading_row_start'){ 
    if($month == date('m')){ 
    $this->replacements[$val] = '<tr class="info">'; 
    } 
} 
else{ 
    $this->replacements[$val] = $match[1]; 
}