かばの遊べるCGI ロゴ [トップ] [掲示板] [F.A.Q.] [コラム] [ひとりごと] [利用規約] [履歴]
複数日予約

■特徴

フレームを使って、フォーム部(上)と、予約状況を確認する予約表部(下)を同時に見られる予約システム。保管期限を過ぎた予約情報は自動的に削除されますので、一度CGIを設置するとその後のメンテナンスは必要ありません。
イントラネットでどうぞ。

※日付選択機能と一発キャンセル機能は、ブラウザ設定でJavaScriptオンにしておかないと動きません。

ruleご利用にあたって sample見本


■設置方法

(1) ダウンロード

まず、下のファイルをダウンロードして、解凍します。解凍すると、"resdays.cgi"と"kabalib.pl"の2つのテキスト・ファイルと、"key.gif"と"cancel.gif"の2つのGIFファイルができます。

※kabalib.plはVer.1.20以降を使ってください。

downloadファイルをダウンロード

cgi-lib.plを入手します。

http://cgi-lib.berkeley.edu/

jcode.plを入手します。

ftp://ftp.iij.ad.jp/pub/IIJ/dist/utashiro/perl/

(2) カスタマイズ

"resdays.cgi"をテキスト・エディタで編集します。
※"resdays.cgi"はEUCで書いてありますので、EUCが扱えるエディタでないと日本語部分が読めません。

最低限、次の個所を変更する必要があります。

#!/usr/local/bin/perl
perlへのパス
$htmpath = 'resdays.htm';
[もどる]ボタンでジャンプするパス。
use lib '../lib';
resdays.cgiから見て、cgi-lib.pl、jcode.pl、kabalib.plがあるパス。
@Names = ( '携帯電話1','携帯電話2','モバイル1','モバイル2','モバイル3');
予約アイテム。あまり多いと表が見にくくなるので8種類くらいが限度です。
@Cmt = ( 'i-mode','写メール','ザウルス','VAIO','メビウス');
各アイテムの説明。@Namesの順番と対応させます。

「予約アイテム」と「各アイテムの説明」は、CGI設置後も変更が可能です。アイテムの追加があった場合は、その時点から新しいアイテムの予約を受けつけます。削除があった場合は、予約表にそのアイテムを表示しなくなりますが、保管期限内にそのアイテムの予約記録がある限り過去ログには表示します。アイテムの名称を変更すると、変更前後のアイテムは別物として認識します。

(3) アップロード&設定

ftpソフトなどでサーバーのCGI用ディレクトリにアップロードしましょう。仮にcgi-bin/にアップロードしたら、次のようにディレクトリとパーミッションを設定します。
※kabalib.plはresdays/の下でもOKです。
※jcode.plとcgi-lib.plはCGIスクリプトではしょっちゅう参照される定番なので、lib/ディレクトリとして独立させておくと使いまわせて便利です。

cgi-bin/
    ├-- lib/
    |    ├-- jcode.pl
    |    ├-- cgi-lib.pl
    |    └-- kabalib.pl
    └-- resdays (755)/
          ├-- data (777)/
          ├-- resdays.cgi (755)
          └-- *.gif

(4) テスト

設定が終わったら、ブラウザからCGIを設置したURLを開いてみましょう。上の例のようなディレクトリ構成なら、次のようなURLになります。

http://xxx.yyy.zzz/cgi-bin/resdays/resdays.cgi


■もっとカスタマイズ

"resdays.cgi"の「設定、適当に変更してください」〜「設定はここまで」の間を適当に変更すると、見た目をカスタマイズできます。

色を変えよう

フォーム部・予約表部とも、色は好きなように変更できます。

#色指定
$clrCmt       = '#CCFFCC'; #説明(薄い紫)
$clrText      = '#003399'; #文字色(群青)
$clrSumi      = '#FFFFCC'; #予約済み(オレンジ)
$clrHeader    = '#CCFFFF'; #ヘッダーの色(薄い水色)
$clrSunday    = '#FFCCFF'; #日曜日の色(赤紫)
$clrSaturday  = '#66FFFF'; #土曜日の色(青)
$clrFormBG    = '#FFFFFF'; #予約状況表のセルの背景(白)
$clrTable     = '#FFFFFF'; #予約状況表のセルの背景(白)
$clrTableBG   = '#99CCFF'; #予約状況表の背景色(水色)

保管期限と予約受付期間を設定しよう

予約受付期間(今日から何日後まで)と、情報の保管期限(何日前から昨日まで)を指定できます。両方ともむやみに大きくする事は推奨しません。サーバーの能力や混雑具合にもよりますが、Perlの処理速度はあまり速くありませんので、ファイル・サイズが大きくなり過ぎるとブラウザ側がタイムアップしてしまうかも知れません。100や200なら問題ないと思いますが、例えば保管期限を9999なんて書くと何年か後に恐ろしいことになるでしょう。

$maxdays = 50 ;      #何日先まで予約できるか?
$remdays = 50 ;      #過去の記録を残す日数。不要なら0。多すぎると応答が遅くなります。

■ちょこっとセキュア

データ・ファイルを保存するディレクトリは、初期値では"data"になっていますが、このディレクトリはパーミッション777のセキュリティー的に弱い部分なので、他の人に推測されにくい名前にすることをお勧めします。何かとんでもない名前を考えて一人で楽しんではどうでしょうか?
データ・ファイル用ディレクトリ名を変更するには、"resdays.cgi"の$dirの部分と、実際のディレクトリ名を変更してください。下は、"data"を"monooki"に変更した例です。

[resdays.cgiファイル]

$dir = 'monooki';
データ・ファイル用ディレクトリ名

[ディレクトリ構成]

cgi-bin/
    ├-- lib/
    |    ├-- jcode.pl
    |    ├-- cgi-lib.pl
    |    └-- kabalib.pl
    └-- resdays (755)/
          ├-- monooki (777)/
          ├-- resdays.cgi (755)
          └-- *.gif

■つけたり

[もどる]とリロードされない!

先約があって予約できなかったり、名前や所属が違ってキャンセルできなかったとき、当初の仕様ではフレームの下側にメッセージと[もどる]を表示していました。[もどる]を指定すると、元のCGIを呼び出して予約表部分を表示するのですが、どうしてもフォーム送信前の表を表示してしまいます。予約やキャンセルがうまく行って更新された日の情報が反映されないのです。どうもフレームを使っている場合のみの現象のようです。
仕方なくVer.1.00ではメッセージは別の小さなウィンドウに表示するようにしましたが、このためにJavaScriptを使ってしまいました。JavaScriptは、ブラウザによってうまく動かなかったりするので、最低限度にしておきたいんですけどね。

JavaScriptどっぷり...

Ver,1,20から、カレンダーをクリックすれば予約開始・終了日を選択できる「日付選択機能」を付けました。我ながら「考えたもんで賞」ものの機能だと思いますが、これにはビシバシJavaScriptを使ってしまったので、極度にJavaScript依存を高めることになりました。JavaScriptを使った、シンプルにして大迷惑のクライアント攻撃方法があるので、JavaScriptの実行を抑止している人もいるでしょうし、NetscapeやIEじゃないブラウザもあるのに...。 ユーザー・インターフェースを追求すると、何か他が犠牲になってしまうのかな?
まあ、この「複数日予約」はイントラネットか何か特定のLANで使われることが多いでしょう。それならブラウザもある程度限定できるでしょう。だからIEかNetscapeをJavaScriptオンで使っていただけることを期待します。でもそのブラウザ設定のまま、インターネットの無限の彼方へ旅立った結果は保証できませんよ。お気を付けて。


■履歴

2003/1/28 Ver.1.21p kabalib.plの重大なバグを修正。(Ver.1.20)
2002/10/3 Ver.1.21 日付選択を起動する度に初期状態に戻るようにJavaScriptを訂正。
2002/10/1 Ver.1.20 日付選択機能、一発キャンセル機能、キーロック機能を追加。
2002/6/10 Ver.1.10 過去ログ機能を追加。ついでにフォームの引数チェックを強化。
2002/4/13 Ver.1.00 つくりました。

[トップへ] [掲示板] [F.A.Q.] [コラム] [ひとりごと] [利用規約] [履歴]