*

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 プラグインを作る(11)空室管理画面 B

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

記事を読む

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

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

記事を読む

ペンション・民宿・プチホテル用 宿泊予約 WordPress プラグインを作る(7)セキュリティ対策

ここでセキュリティ対策についてまとめて復習してみます。ネットを検索すると、さまざまな対策が紹介されて

記事を読む

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

空室情報のデータベース処理を一気に終えました。ごちゃごちゃしてきたので、もっとスッキリ書く方法が無い

記事を読む

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

Message

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

CAPTCHA


Optionally add an image (JPEG only)

Sponsored Link

DJI Osmo Mobile 2 を少し使ってみた感想など

BlackMagicDesign URSA mini 4.

DJI Osmo Mobile 2 の少しディープなレビュー

DJI Osmo Mobile 2 を選んだのは「アクティブトラック」

スマホ用ジンバル比較=DJI OSMO mobile2 vs ZHIYUN Smooth 4 vs MOZA mini-mi

さて! 聞いて気になる見て欲しくなる。うれし恥ずかしスマホ用ジンバルの

【実験】Neewer 37mmクリップオンND 2-400 NDフィルタークリップ付きの性能を確認

前回の記事「FiLMiC pro 〜 iPhoneで動画撮影本気モード

FiLMiC pro 〜 iPhoneで動画撮影本気モード

俄然! iPhoneの有効活用が気になり始めました。 前回プレビ

→もっと見る




  •  

PAGE TOP ↑