さてさて、カレンダーのヘッダ部分が出ました。少しカレンダーでかいなぁ、などと思いつつ、調整していたら、結局こんなコードになってしまいました。

calendar/index.phpです。

<div class=”row”>
    <div class=”col-md-3″></div>
    <div class=”col-md-6″>
<h1><?php echo $month;?></h1>
<label>Today:
    <?php echo $today; ?>
</label>
<div class=”table-responsive”>
    <table class=”table table-bordered”>
    <tr>
        <?php echo $cal_head;?>
    </tr>
    </table>
</div>
</div>
    <div class=”col-md-3″></div>
</div>

結果、

こんな感じ。。結局自分の書き方になってしまいました。カレンダーの左右になにか装飾を施すといいですかねぇ。。そこまではやりません。すいません。

カレンダー本体を表示させましょうね。これもコントローラ内で作って、indexはそれを受け取るだけにしようと思います。

index.phpにとりあえず受け取り口だけ設けて置き

<div class=”row”>
    <div class=”col-md-3″></div>
    <div class=”col-md-6″>
<h1><?php echo $month;?></h1>
<label>Today:
    <?php echo $today; ?>
</label>
<div class=”table-responsive”>
    <table class=”table table-bordered text-center”>
        <?php echo $cal_head;?>
        <?php echo $cal_body;?>
    </table>
</div>
</div>
    <div class=”col-md-3″></div>
</div>
</div>
    <div class=”col-md-3″></div>
</div>

index.phpからは<tr>タグも取りました。<tr>タグすなわち改行も含めてcontrollerで頑張りましょう。その方が良さそうです。

class Controller_Calendar extends Controller_Template
{

    public function action_index()
    {
        //$data[“subnav”] = array(‘index’=> ‘active’ );
        $data[“month”] = date(“F”);
        $data[“today”] = date(“Y/m/d”);
        $this->template->title = ‘祝!フロイデさん31期!’;
        $this->template->content = View::forge(‘calendar/index’, $data);
        $this->template->content->set_safe(‘cal_head’,$this->cal_header());
        $this->template->content->set_safe(‘cal_body’,$this->cal_body());
    }

    private function cal_header(){
         $arrayweek = array(“Sun”,”Mon”,”Tue”,”Wed”,”Thu”,”Fri”,”Sat”);
         $cal_h = “<tr>”;
         foreach ($arrayweek as $value){
             $cal_h .= “<th>” . $value . “</th>”;
         }
         $cal_h .= “<tr>”;

         return $cal_h;
    }

    private function cal_body(){
        $cal_body = “”;
        for($i = 0 ; $i < date(“t”); $i++){
            $week_number = date(“w”,mktime(0,0,0,date(“n”),$i+1,date(“Y”)));
            if($week_number == 0 && $i != 0){
                $cal_body .= “<tr>”;
            } else if($i == 0){
                $cal_body .= $this->spacecell($week_number);
            }
            $cal_body .= “<td>” . ($i + 1) . “</td>”;
            if($week_number == 6){
                $cal_body .= “</tr>”;
            }
            if(($i + 1) == date(“t”)){
                $cal_body .= $this->spacecell(6 – $week_number);
            }
        }
        return $cal_body;
    }

    private function spacecell($count){
        $tmp_cell = “”;
        for($i = 0 ; $i < $count ; $i++){
            $tmp_cell .= “<td></td>”;
        }
        return $tmp_cell;        
    }

}

とりあえず出来ました。

ほんの少しですが、妙だな、と思う部分があります。

日付は中央に来ているでしょう。これは

<table class=”table table-bordered text-center”>

のtext-centerが効いているんです。ところが<th>タグで表示している曜日の部分だけ左寄せになってますよね。つまり、<table>タグでのクラスの設定が<th>タグには及んでいないということです。bootstrapの仕様なんですかね。<th>に自由度を持たせるために影響を及ぼさないようにしているのかも知れませんね。

ここでは中央にしたいので、コントローラで作っているタグに手を入れてみました。

    private function cal_header(){
         $arrayweek = array(“Sun”,”Mon”,”Tue”,”Wed”,”Thu”,”Fri”,”Sat”);
         $cal_h = “<tr>”;
         foreach ($arrayweek as $value){
             $cal_h .= “<th class=’text-center’>” . $value . “</th>”;
         }
         $cal_h .= “<tr>”;

         return $cal_h;
    }

<th>タグにclassを足してみました。これが良いやりかたかどうか、分かりません。ダサいかも。とりあえず結果は

求めていたものになりました。

実はここがスタートです。ここに部品を足して、指定した年月のカレンダーを表示させてみたいです。

たったこれだけのことをやろうとしても考えることは多く出てきます。年月の指定は、年月?年と月を別?手書き?select?カレンダーを更新するタイミングは?年月を変えたとき?あるいは更新用ボタン置く?更に初期表示はどうする?

ここでは年月は分けて入力としましょう。

年は手入力、月はselectにしましょう。

では次回より、手を入れていきます。