*

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 プラグインを作る(1)

初心者が、あらためて WordPress のプラグインを一から作る経過報告。たぶん連載記事ですね。途

記事を読む

WordPressのオリジナルプラグインにショートコード機能を持たせる

ペンション・民宿・プチホテル用 宿泊予約 WordPress プラグインを作る連載で、ショートコード

記事を読む

ペンション・民宿・プチホテル用 宿泊予約 WordPress プラグインを作る(2)

前回の物を若干変更しながら、どんどん進んでいきたいと思います。今回は管理画面の表示内容について行って

記事を読む

ペンション・民宿・プチホテル用 宿泊予約 WordPress プラグインを作る(6)初期設定画面

ここまでで、ひと通りの仕組みというか流れは理解できたような気がします。まずは初期設定画面から制作して

記事を読む

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

Message

メールアドレスが公開されることはありません。

CAPTCHA


Optionally add an image (JPEG only)

Sponsored Link

気になる情報・新製品発見メモ

日頃ネットをウロウロしていて記事にするほどでもない情報、記事にするほど

【開封】SmallRig Drop-In Baseplate (Manfrotto 501PL QR Plate Compatible) 2006

引き続き SmallRig Universal Shoulder Pa

【開封】SmallRig Universal Shoulder Pad 2057

最初にお断りしておきますが、いわゆる「単なる開封」記事です。予めご了承

【雑談】URSA mini の設定確認とか安物時計を貰った話

寒くなってきましたがスッキリ晴れ渡る日曜日。久しぶりに予定もなくノビノ

URSA mini & Filmconvert アップデート祭り

いつものように雑談更新。今更お断りすることも無いとは思いますが、今回も

SONY α6300 24p 30p 60p 120pで画質比較

世間では黒金とか言うケシカラン状況になっています。 浮かれポンチ

→もっと見る




  •  

PAGE TOP ↑