*

WordPress用プラグインで使う宿泊予約用カレンダーをPHPで書くぜ

公開日: : 最終更新日:2013/12/30 WordPress ,

ペンション・民宿・プチホテル用 宿泊予約 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のプラグインで独自のページを作る方法がわからない

Wordpressのプラグインを開発していて疑問がでてきました。プラグイン独自のページはどうすればい

記事を読む

ペンション・民宿・プチホテル用 宿泊予約 WordPress プラグインを作る(10)空室管理画面 A

さっそく空室管理画面を作っていきます。今回は画面設計中心です。部屋タイプの選択と、空き情報を更新する

記事を読む

ペンション・民宿・プチホテル用 宿泊予約 WordPress プラグインを作る(11)空室管理画面 B

空室管理画面の2回目。今回は空室状況の入力欄と月が変わった時の処理を加えてみます。今回は一覧表示なの

記事を読む

ワードプレス用宿泊予約プラグイン開発「空室情報の表示」とか

久しぶりのワードプレスネタ。全然完成しませんわ。今回は最初にブラウザのキャッシュを切る作業をしました

記事を読む

ワードプレス用宿泊予約プラグイン開発「空室カレンダー表示」

前回ネットで検索して見つけた calendar($year = "", $month = "") 関

記事を読む

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

Message

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


Optionally add an image (JPEG only)

Sponsored Link

エレコム GRAPH GEAR NEO カメラバッグDGB-P01BKにジンバルを入れる

やっぱり高いけどEndurance (エンデュランス) カメラバッグの

エレコム GRAPH GEAR NEO カメラバッグDGB-P01BKが北の国から

一年中GWの美少女です。 Lowepro カメラリュック フリッ

MOZA Mini-S スマホ用スタビライザーが届いた!

1万円弱で買えるスマホ用ブラシレスジンバルの新型 MOZA Mini-

GoPro Hero7 Black用 保護ケース アルミ合金保護フレームがいいよって話

別に大した話ではありません。 最近書くことが少ないのでたまには書

期待の新製品 MOZA Mini-S スマホ用スタビライザーが発売されたみたい

教えてもらった新製品のホームページで MOZA Mini-Sが紹介され

→もっと見る




  •  

PAGE TOP ↑