スニペットを作る calender-1
MODxではページ用のパーツとしてチャンクとスニペットが用意されています。
どちらがどう違うかというと、チャンクは静的にHTMLコードを吐き出すのに対して、
スニペットではPHPコードで記述するので動的なコードを出したい時に利用します。
ここでは、ブログ等によくあるカレンダーを表示するスニペットを作成してみたいと思います。
単純なカレンダーであれば、PHP実践のカレンダーを参考にすれば簡単にできます。
MODxの管理画面から、リソース -> リソース管理 - > スニペット でスニペットの作成を行います。 ここではスニペット名に「hm_calender」、説明に任意の文章、 スニペットコードの部分に以下を記述します。
以下が「hm_calender.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日ドキュメント更新