Mar.24, 2015 - 14h54m07s
  • カレンダー(晒)
今迄、
何回か書いたけど俺にとっては
この形が一番使いやすいです。

みんなはどうかしら?

phpソース

$date6には
'201503'みたいな年月の値が入ります。
<?php
class Calendar{

    private $year;
    private $mon;

    function __construct(){
        $this->year  = 0;
        $this->mon  = 0;
    }
    private function chkCalendarDate($date6){
        //数値の判定
        if( !is_numeric($date6) ) return false;
        //正しい桁数の判定
        if( mb_strlen($date6)!=6 ) return false;
        //正しい日付の判定
        $chk_year = substr($date6, 0, 4);
        $chk_mon  = abs( substr($date6, 4, 2) ); //ゼロサプレス
        if( !checkdate($chk_mon, 1, $chk_year) ) return false;

        return true;
    }
    public function makeCalendar($date6){
        //受取の値が不正な場合は本日のカレンダーを作成
        if( !$this->chkCalendarDate($date6) ){
            $date6 = date('Ym');
        }
        $this->year = substr($date6, 0, 4);
        $this->mon  = abs( substr($date6, 4, 2) );
        //対象月の1日の曜日を取得
        $d = 1;
        $day  = date( 'w', mktime(0, 0, 0, $this->mon, $d, $this->year) );
        //月末の取得
        $last_day = date( 'j', mktime(0, 0, 0, $this->mon+1, 0, $this->year) );
        //ループの最大値を計算
        $loop_max = $day+$last_day;

        //カレンダーで表示する日にちを配列に格納
        $j = 0;
        for($i=0; $i<$loop_max; $i++){
            if($i<$day){ //1日が始まる曜日までNULLをセット
                $loop_cal[] = NULL;
            }else{
                $j++;
                $loop_cal[] = $j;
            }
        }
        return $loop_cal;
    } 
}
?>
後は記事が存在する日に
リンクを貼る処理を追加。

あれこれ考えて
classの外でやってます。

割愛したけど
コンストラクタで宣言してる
$yearと$monを使って前月と次月の
値を作るメソッドとかもあります。

HTMLソース

そして、
Smartyのforeachでくるりんぱ。
<html>
<ul>
{foreach from=$loop_cal key=key item=lp name=lp}
    <li {if $key is div by 7}class='both'{/if}>{$lp}</li>
{/foreach}
</ul>
</html>
HTMLソースが
これだけで済むのがSmartyの魅力だ…

…出来る子だ。

そしてそして、
cssで7日毎の日付の折り返しや
割愛してるけど本日の表示は
background-colorを変える処理を埋込。

この辺は
テンプレートでやってます。

Smartyは出来る子です。

では…。

// postscript on Jul.15, 2016 - 23h17m14s
カレンダーをアップデートしました。

07.15, 2016 カレンダーの色付け始めました(華)