WordPress用プラグインで使う宿泊予約用カレンダーをPHPで書くぜ
ペンション・民宿・プチホテル用 宿泊予約 WordPress プラグインを作るシリーズで使う、空き部屋状況の表示用カレンダーについて検討します。ただし祝祭日は考慮しません。複雑になるので今後の課題にしておきます。
フレームワークにはだいたいカレンダー用のクラスがあります。つまりカレンダーって全国共通で必要な機能ってことですね。というわけで、一から書くのは非効率!ここはありがたく検索し使わせてもらう方が利口ですよね。
PHP簡単カレンダー関数
http://shanabrian.com/web/php_calendar.php
見つけたなかで最もスッキリしていて分かりやすそうな物を使わせていただくことにします。ありがとうございます。
<?php
function calendar($year = "", $month = "") {
if(empty($year) && empty($month)) {
$year = date("Y");
$month = date("n");
}
//月末の取得
$l_day = date("j", mktime(0, 0, 0, $month + 1, 0, $year));
//初期出力
$tmp = <<<EOM
<table class="calendar">
<caption>{$year}年{$month}月</caption>
<tr>
<th class="sun">日</th>
<th>月</th>
<th>火</th>
<th>水</th>
<th>木</th>
<th>金</th>
<th class="sat">土</th>
</tr>\n
EOM;
$lc = 0;
//月末分繰り返す
for ($i = 1; $i < $l_day + 1;$i++) {
//曜日の取得
// 0=日曜日 1=月曜日 2=火曜日....6=土曜日
$week = date("w", mktime(0, 0, 0, $month, $i, $year));
//曜日が日曜日の場合
if ($week == 0) {
$tmp .= "\t<tr>\n";
$lc++;
}
//1日の場合
if ($i == 1) {
if($week != 0) { // 日曜日じゃない場合
$tmp .= "\t<tr>\n";
$lc++;
}
$tmp .= repeat($week);
// 空枠を$week個挿入する
// 例:火曜日は$week=2 なので日曜・月曜の分(2個)空き枠を入れる
}
if ($i == date("j") && $year == date("Y") && $month == date("n")) {
//現在の日付の場合 date("j")は今日の日付(頭にゼロなし)
$tmp .= "\t\t<td class=\"today\">{$i}</td>\n";
} else {
//現在の日付ではない場合
$tmp .= "\t\t<td>{$i}</td>\n";
}
//月末の場合
if ($i == $l_day) {
$tmp .= repeat(6 - $week);
}
//土曜日の場合 ここで次の行に移動する
if($week == 6) {
$tmp .= "\t</tr>\n";
}
}
if($lc < 6) {
// 仕上がりが6行無い場合は1行追加する
$tmp .= "\t<tr>\n";
$tmp .= repeat(7);
$tmp .= "\t</tr>\n";
}
if($lc == 4) {
// 仕上がりが4行だった場合は上と合わせて2行追加で合計6行
$tmp .= "\t<tr>\n";
$tmp .= repeat(7);
$tmp .= "\t</tr>\n";
}
$tmp .= "</table>\n";
return $tmp;
}
function repeat($n) {
return str_repeat("\t\t<td> </td>\n", $n);
}
?>
わかりやすいようにコメントを追記しました。
問題はこれに空き状況をDBから引っ張って組み込む必要があることです。たぶん日付を追加している部分でDBから空き状況を引っ張ってきてやれば大丈夫ような気がします。
上のプログラムだと「$tmp」にHTMLを追記しています。空き状況用に「$tmp2」を用意して「if($week == 6) {」の中で書き足す処理を行います。
空き部屋状況のデータはテーブルに入ります。テーブルはプラグインを有効化すると自動で作成されます。以下の構造になっています。
ペンション・民宿・プチホテル用 宿泊予約 WordPress プラグインを作る(4)データベース基礎
$this->table_name = $wpdb->prefix . 'rooms';
$sql = "CREATE TABLE " . $table_name . " (
plan_id varchar(2) NOT NULL,
s_date date NOT NULL,
r_count smallint,
r_season varchar(2),
tmp varchar(10)
データの読み出しは前の記事を参考にします。
ペンション・民宿・プチホテル用 宿泊予約 WordPress プラグインを作る(12)空室管理画面 C
function load_data($table_name) {
global $wpdb;
if ( is_admin() ) {
$yy = mb_substr($this->rdate,0,4); // 年の取り出し
$mm = mb_substr($this->rdate,5,2); // 月の取り出し
$startday = $yy . "-" . $mm . "-01";
$lastday= date('Y-m-t', mktime(0,0,0, $mm, 1, $yy));
$results = $wpdb->get_results($wpdb->prepare(
"SELECT * FROM $table_name WHERE r_season=%s AND (s_date>=%s AND s_date<=%s) ORDER BY s_date",
$this->rtype, $startday, $lastday ));
//var_dump($results);
foreach ($results as $row) {
$this->aki[] = $row->r_count;
}
}
}
組立と調整は次回に。
Sponsored Link
関連記事
-
-
ワードプレス用宿泊予約プラグイン開発「空室情報の表示」とか
久しぶりのワードプレスネタ。全然完成しませんわ。今回は最初にブラウザのキャッシュを切る作業をしました
-
-
ペンション・民宿・プチホテル用 宿泊予約 WordPress プラグインを作る(6)初期設定画面
ここまでで、ひと通りの仕組みというか流れは理解できたような気がします。まずは初期設定画面から制作して
-
-
WordPressのプラグインで独自のページを作る方法がわからない
Wordpressのプラグインを開発していて疑問がでてきました。プラグイン独自のページはどうすればい
-
-
ペンション・民宿・プチホテル用 宿泊予約 WordPress プラグインを作る(12)空室管理画面 C
空室情報のデータベース処理を一気に終えました。ごちゃごちゃしてきたので、もっとスッキリ書く方法が無い
-
-
ペンション・民宿・プチホテル用 宿泊予約 WordPress プラグインを作る(2)
前回の物を若干変更しながら、どんどん進んでいきたいと思います。今回は管理画面の表示内容について行って





ご質問は掲示板へお願いいたします。