HOME -> ソフトウェア -> CMS , Blog -> MODx -> MODx 応用 1 -> スニペットを作る calender-1

スニペットを作る calender-1

 MODxではページ用のパーツとしてチャンクとスニペットが用意されています。 どちらがどう違うかというと、チャンクは静的にHTMLコードを吐き出すのに対して、 スニペットではPHPコードで記述するので動的なコードを出したい時に利用します。 ここでは、ブログ等によくあるカレンダーを表示するスニペットを作成してみたいと思います。
 単純なカレンダーであれば、PHP実践のカレンダーを参考にすれば簡単にできます。
 MODxの管理画面から、リソース -> リソース管理 - > スニペット でスニペットの作成を行います。 ここではスニペット名に「hm_calender」、説明に任意の文章、 スニペットコードの部分に以下を記述します。
include_once("assets/snippets/hm_calender.php");
return HMsm_calender_Main();
 スニペットコード部分に全コードを記述するのではなく、処理しやすいように「hm_calender.php」というファイルにコードを退避させておきます。 ここではファイルの置き場所は assets/snippets/ 内としました。
 以下が「hm_calender.php」に記述するコードになります。
function HMsm_calender_Main(){
	
	$calstr = "";
	$wday = array('日','月','火','水','木','金','土');

	$year_str =date('Y'); //指定年を取得
	$month_str =date('m'); //指定月を取得
	
	$nextmonth_str = $month_str + 1; //指定来月を取得
	if($nextmonth_str > 12){ //12月を超える場合は来年に持越し
		$nextmonth_str = 1; //1月にする
		$nextyear_str = $year_str +1; //年を持越す
	}else{ //12月を超えない場合は年は同年
		$nextyear_str = $year_str;
	}//END_if
	
	$daycount = cal_days_in_month(CAL_GREGORIAN,
			$month_str,$year_str);
	
	//指定月の1日目の曜日を番号で取得
	$week_v = date('w',strtotime("$year_str/$month_str/1"));

	$calstr .= "<br><b> $year_str 年 $month_str 月 </b><br>";
	$calstr .= "<table class=\"hmcalender\"><tr>";
	for($i=0;$i<=6;$i++){
		$calstr .= "<th>" . $wday[$i] . "</th>";
	}
	$calstr .= "</tr><tr align='right'>";
	$d = 0;
	for($i=0;$i<42;$i++){ //日数描画部分
		if($d >= $daycount){
			//空枠を取得
			$getspace = 7 - ($i % 7);
			while($getspace > 0){
				$calstr .= "<td> </td>"; //末端部分
				$getspace --;
			}//END_while
			break; //指定月の日数を越えたらループを抜ける
		}
		if($i < $week_v){
			$calstr .= "<td> </td>"; //1日以前はエスケープ
		}else{
			$d++;
			$calstr .= "<td>$d</td>"; //日付を表示
		}//END_else_if
		if(($i % 7)==6){
			$calstr .= "</tr><tr align='right'>";
		}
	}//END_for
	$calstr .= "</table>";
	
	return $calstr;

}//END_Function
 あとはページ内でhm_calenderスニペットをコールすれば、今月のカレンダーがhmcalenderクラスのTableフォーマットとして出力されるようになります。 テーブルの体裁はCSS側で制御してやる方がスマートでしょう。


2008年 10月 29日ドキュメント作成
2008年 11月 7日ドキュメント更新