ソース
(ダウンロード後、ファイル名が"-cgi.txt"、"-html.txt"となってるものを".cgi"、".html"に変更してください)
【
全ファイルをまとめてダウンロード 〜 quiz200.lzh】
プログラム
データファイル
※ 空ファイルの作り方は、空ファイルの作り方を参照。
[目次へ]
インストール方法
インストール
- ソースから全てのファイルをダウンロードする。
※ ダウンロード方法はソースをダウンロードするを参照。
- 4つの.cgi ファイルの最上部のPerlのパスを正しく設定する。
※ 詳しくはPerlのパスを設定するを参照。
- tqlib.pl の以下の変数を編集する。(※ Ver.2.03以前はこれらの変数が各.cgiファイルに散在しています。)
- $basedir
..... データファイルを格納するディレクトリへのパス(※注1)
- $ext
..... CGIプログラムの拡張子
- $method
..... フォームの送信方法(※注2)
- $code
..... 日本語の文字コード(※注3)
- $email
..... 管理者のメールアドレス(※注4)
- $backurl
..... 「戻る」を押したときの移動先URL
※注1 データファイルを .cgiと同じ場所に置く場合は $basedir="."; と書いて下さい。
※注2 post が禁止されているサーバーでは get に変更して下さい。
※注3 sjis以外に変更する場合は、全てのプログラムをnkfなどでそのコードに変換してください。
※注4 @ の前に必ず \ を付けてください。(例) $email="nishida\@big.or.jp";
- tqadmin.cgi の以下の変数を編集する。
- .cgi、.plファイルをFTPのアスキーモードで転送する。パーミッションは、.cgiを705、.plを604に設定する。。
※ FTPについてはプログラムをFTPで送るを参照。
※ パーミッションについてはパーミッションを設定するを参照。
(telnetの場合)
% chmod 705 tqindex.cgi
% chmod 705 tqquiz.cgi
% chmod 705 tqscore.cgi
% chmod 705 tqadmin.cgi
% chmod 604 tqlib.pl
% chmod 604 jcode.pl
- $basedirで指定したディレクトリ ( $basedir="."; の場合は .cgi と同じディレクトリ)に以下の5つのデータファイルをFTPのアスキーモードで転送する。パーミッションは全て606に設定する。
(telnetの場合)
% chmod 606 tqtop.html
% chmod 606 tqquiz.html
% chmod 606 message.txt
% chmod 606 genre.txt
% chmod 606 tqlog.txt
- 上と同じディレクトリに、ディレクトリlog、data、lockdirを作る。パーミッションは全て707に設定する。
(telnetの場合)
% mkdir log
% mkdir data
% mkdir lockdir
% chmod 707 log
% chmod 707 data
% chmod 707 lockdir
- ディレクトリlogの下に、データファイルcount.txtをFTPでアスキー転送する。パーミッションを606に設定する。
(telnetの場合)
% chmod 606 count.txt
- ブラウザからtqindex.cgi、tqadmin.cgiの両方にアクセスしてみる
→ HTMLが表示されればOK。
※ 表示されない場合、ブラウザでアクセスするを参照して問題を解決してください。
ここまでできたら、次の「ジャンルを作ってみる」にお進み下さい。
[目次へ]
ジャンルをつくってみる
- ジャンルの名前を決める。名前に使える文字は以下の通り:
- 半角英語の大文字(A-Z)
- 半角英語の小文字(a-z)
- 半角数字(0-9)
- アンダーバー(_)
以下では例として quiz1 とします。
※ クイズの内容が分かるような名前を付けるとよいです。例えば、車に関するクイズなら「car」など。
- ディレクトリdataの下に quiz1 という名前のディレクトリを作成するパーミッションを707に設定する。
(telnetの場合)
% mkdir quiz1
% chmod 707 quiz1
- rate.txt, summery.txt, highscore.txt という名前の空ファイルを作り、quiz1の下にFTPする。パーミッションは606にする。
※ 空ファイルの作り方は、空ファイルの作り方を参照。
(telnetの場合)
% chmod 606 rate.txt
% chmod 606 summery.txt
% chmod 606 highscore.txt
- ブラウザからtqadmin.cgiにアクセスして、「ジャンル登録」を選び、先ほど作ったディレクトリの名前(quiz1)、パスワードを入力して作業実行を押す。
→ 作業状況の所に、「新ジャンル quiz1 を登録しました。細かい設定は "ジャンル修正" で行なってください。」と出てくればOK。
ここまでできたら、次の「ジャンルに問題を登録してみる」にお進み下さい。
[目次へ]
ジャンルに問題を登録してみる
- ブラウザからtqadmin.cgiにアクセスして、「問題登録、追加、削除」を選び、ディレクトリ名(quiz1)、パスワードを入力して作業実行を押す。
- 現れたフォームに問題を入力して、登録を押す。
→ 作業状況の所に、「問題No.〜を登録しました」と出てくればOK。
(これを何度か繰り返して、3問位登録してください。問題の追加は後からでもできます。)
- 問題を登録し終えたら[管理のトップへ戻る]をクリックして戻る。
- 「ジャンル修正、削除」を選び、ディレクトリ名(quiz1)、パスワードを入れて作業実行を押す。
- 現れたフォームの「出題数」を出題したい問題数に設定する。とりあえず問題数(*注)と同じ値(3問登録したら "3")を入力して「修正」を押してください。
(*注) 問題数...登録されている問題の数、出題数...実際に出題される問題数
- [クイズのトップへ戻る]をクリックして、出題数、問題数が設定した数字になっているかを確かめる。
- 挑戦をクリックして、問題出題、回答、結果、登録の流れが処理できるかテストしてみる。
ここまでできればインストール完了です。
[目次へ]
ディレクトリ構成
ここまで作業した結果のディレクトリ構成は以下のようになります。(
$basedir="."; の場合。)
カッコ内の数字はパーミッション、<〜> はディレクトリ
+ tqindex.cgi (705)
+ tqquiz.cgi (705)
+ tqscore.cgi (705)
+ tqadmin.cgi (705)
+ tqlib.pl (604)
+ jcode.pl (604)
+ genre.txt (606)
+ message.txt (606)
+ tqlog.txt (606)
+ tqtop.html (606)
+ tqquiz.html (606)
+ <lockdir> (707)
+ <log> (707)
+ count.txt (606)
+ <data> (707)
+ <quiz1> (707)
+ rate.txt (606)
+ summery.txt (606)
+ highscore.txt (606)
[目次へ]
使い方
新ジャンル登録
- ディレクトリdataの下に適当な名前の新しいディレクトリを作成する。既に作ってあるジャンルとは別の名前にすること。(ここではquiz2とする)。パーミッションを707に設定する。
(telnetの場合)
% mkdir quiz2
% chmod 707 quiz2
- ディレクトリdata/quiz2の下に、rate.txt, summery.txt, highscore.txt という名前の空ファイルを作る。パーミッションは606にする。
% chmod 606 rate.txt
% chmod 606 summery.txt
% chmod 606 highscore.txt
- ブラウザからtqadmin.cgiにアクセスして、ジャンル登録を選び、先ほど作ったディレクトリの名前(quiz2)、パスワードを入力して作業実行を押す。
→ 作業状況の所に、「新ジャンル quiz2 を登録しました。細かい設定は "ジャンル修正" で行なってください。」と出てくればOK。
管理のトップページの下の方にあるジャンル情報で、今登録したジャンルが入っているかどうか確認してください。
[目次へ]
ジャンル修正、削除
管理ページ(tqadmin.cgi)から「ジャンル修正、削除」を選択し、修正したいジャンルの名前を入力し、「作業実行」を押すと、ジャンル修正、削除用フォームが現れます。
フォームに指定したジャンルの情報が現れるので、変更したい部分を書き直して修正を押してください。そのジャンルを削除する場合は削除を押してください。
以下の項目を設定できます。( (〜)は値の範囲、[〜]はデフォルト値 )
- 名前 [ディレクトリ名と同じ]
...トップページその他に表示される、そのジャンルの名前。
- 出題数 [0]
...出題する問題の数。
- 難易度 [3]
...トップページに表示される、そのジャンルの難易度。(1〜7)
- 合格点 [80]
...何%以上取ったら名前を登録できるか。(0〜100)
- コメント [ディレクトリ名と同じ]
...トップページに表示される、そのジャンルの説明文。
- 答え直し [なし]
...一度間違えた後、Backで戻って再び答え直すのを認めるか。(あり,なし)
- 正答表示 [なし]
...正解or不正解の表示時に、「答えは〜でした」と正答を表示させるか。(あり,なし)
- 出題順 [ランダム]
...No.1 から順番に出題するか(固定)、バラバラに出題するか(ランダム)。
※ 「固定」にした場合全問題が出題されますので、「出題数」は自動的に問題数と同じ値に修正されます。
- 順番 [1]
...複数のジャンルが存在するとき、トップページで上から何番目に表示させるか。
[目次へ]
問題登録、修正、削除
管理ページ(tqadmin.cgi)から「問題登録、修正、削除」を選択し、問題を編集したいジャンルの名前を入力し、「作業実行」を押すと、問題編集用フォームが現れます。
※ 詳しい説明は管理ページに「ワンポイント」として書いてありますので、そちらを参照してください。
問題の登録
- フォーム変更の新規ボタンを押す。
- 現れた空のフォームに、見出し、問題文、正解メッセージ、正答、誤答を入力し、登録を押す。
→作業状況に、「問題No.〜を登録しました。」と出てくればOK。
問題の修正
- フォーム変更の問題No.の所に、修正したい問題の番号を入れて、表示ボタンを押す。
- 下のフォームにその問題が現れるので、直したいところを修正して登録を押す。
→作業状況に、「問題No.〜を修正しました。」と出てくればOK。
問題番号変更
- 問題番号の変更の所に、変更したい問題番号、何番に変えるか、を入力して「番号変更」を押す。
→作業状況に、「No.XX を No.XX に変更しました」と出てくればOK。
※問題番号は
ジャンル編集で「出題順」を「固定」にしたときのみに影響します。
問題の削除
- フォーム変更の問題No.の所に、修正したい問題の番号を入れて、表示ボタンを押す。
- 下のフォームにその問題が現れるので、確認してから削除を押す。
→作業状況に、「問題No.〜を削除しました。〜」と出てくればOK。
[目次へ]
成績修正
管理ページ(tqadmin.cgi)から「成績修正」を選択し、成績を編集したいジャンルの名前を入力し、「作業実行」を押すと、成績修正用フォームが現れます。
※ 詳しい説明は管理ページに「ワンポイント」として書いてありますので、そちらを参照してください。
- 挑戦者データ修正、リセット
.....得点別人数分布、挑戦者数、合格者数を調整、削除する
- 総正答率修正、リセット、再回収
.....総正答率を調整、リセットする。
(* 再回収...現在登録されている問題ファイル毎の出題数、正答数を全部足して、全体の出題数、正答数を再計算する。手動で問題を登録、移動したときに使います。
- 高得点者データ削除
.....合格者の名簿から、指定した人のデータを削除する。
[目次へ]
挑戦者ログ
tqlog.txt に全挑戦者のログが残るようになっています。見方は.....見ればわかるとおもうので省略。放っておくとどんどん大きくなっていくので、時々手動で同じ名前の空ファイルを上書きFTPしてしてやってください。
→ 挑戦者ログの例
[目次へ]
Note...
まとめて問題を登録する方法
いちいちフォームから入力して問題を登録するのは面倒だし、電話代がかかるからヤダ、という場合、
問題ファイルをまとめて作ってそれをFTPするという方法があります。手順は以下の通り。
(既に「ジャンル登録」でジャンルの作成は済んでいるものとします。ディレクトリ名を quiz3 とします。)
- 問題ファイルを作る。作り方は下記。
- そのファイルを、<通し番号>.q というファイル名で保存する。
例えばクイズが20問ある時は、1.q, 2.q, 3.q, ... ,19.q, 20.q と20個のファイルができます。番号は絶対に間を空けないでください。
- それらをすべて data/quiz3 の下にFTPでアスキー転送する。パーミッションを606にする。
トップページ (tqindex.cgi) で問題数が増えているかどうかを確認してください。
問題を登録したら、管理ページ (tqadmin.cgi) で出題数を増やすのを忘れずに。
後から問題を増やす場合は、通し番号は現在登録されているもので一番大きいものの後ろにつなげてください。例えば、既に 1.q 〜 30.q まである場合は、31.q から順に番号を振ってください。
[目次へ]
問題ファイルの作り方
普通のテキストエディタ(メモ帳など)を立ちあげて、次のように編集してください。
★注意★
[Tab]と書いてあるところはタブキー(キーボードの一番左の列の上の方の "Tab" と書いてあるやつ)を入力してください。
| 0[Tab]0[Tab]タコの足の数[Tab] |
(←出題回数[Tab]正解回数[Tab]見出し[Tab]) |
| タコの足は何本? |
(←問題文) |
| 本当に数が決まってるのでしょうか? |
(←正答時のメッセージ) |
| 8本 |
(←正答) |
| 6本 |
(←誤答1) |
| 4本 |
(←誤答2) |
| 10本 |
(←誤答3) |
| 決まっていない |
(←誤答4) |
|
(編集例は
こちら。)
※ 注意
- 出題回数、問題回数は、最初は両方とも 0 にしておいてください。
- 全ての項目にタグが使えます。例えば問題文と共に画像を表示させたい場合は、<img src="〜"> のように直接書き込んで下さい。パスは tqquiz.cgi の位置からの相対パス又は絶対パスで書いて下さい。
- データの区切りを改行で判断しているので、最後の行の改行を忘れずに。又、余計なところで改行を入れると空の選択肢が表示されてしまいます。
- 誤答は最低一つは作ってください。上限はありません。改行して下に続けて書いてください。
[目次へ]
表示のカスタマイズ
以下のファイルを変更することによって、表示をカスタマイズすることが可能です。
[目次へ]
トップページ:タイトルなど
tqtop.htmlを編集することによって、タイトルや見出し、背景色をかえることができます。書き方は普通のHTMLと全く同じです。書き換えてよい場所などは、tqtop.html の中にコメント行として書いてあります。
「絶対に変更しないでください」と書いてある部分には何もしないでください。
[目次へ]
トップページ:ジャンル一覧の配色
tqindex.cgiの
「以下は表示のカスタマイズ」の部分の変数
$bg1〜$bg4, $FONT1〜$FONT4を変更することによって、ジャンル表の背景色、文字色などをかえることができます。以下は変数と色の対応です。
|
背景色: $bg1、文字色: $FONT1
|
背景色:$bg2 文字色:$FONT2
|
背景色:$bg4、文字色:$FONT4
|
背景色:$bg3、文字色:$FONT3
|
[目次へ]
問題出題ページ:タイトルなど
tqquiz.htmlを編集することによって、タイトルや見出しをかえることができます。書き方は普通のHTMLと全く同じです。書き換えてよい場所などは、tqquiz.html の中にコメント行として書いてあります。
「絶対に変更しないでください」と書いてある部分には何もしないでください。
[目次へ]
問題出題ページ:正解時、不正解時の背景色、メッセージ
tqquiz.cgiの
「以下は表示のカスタマイズ」の部分の変数を変更することによって、以下の表示をかえる事ができます。
- $ataribody ... 正解の時 <body 〜> の 〜の部分にはいる文字 (*注)
- $hazurebody ... 不正解の時 <body 〜> の 〜の部分にはいる文字
- $atarimsg ... 正解の時に表示する文章
- $hazuremsg ... 不正解の時に表示する文章
(例)
- $ataribody="bgCOLOR=pink";
→正解の時、<body bgCOLOR=pink>となる。
- $hazurebody="background=\"img/hazure.jpg\"";
→不正解の時、<body background="img/hazure.jpg">となる。
( " を表示させたい場合は、上のように必ず前に \ をつけてください。)
[目次へ]
成績一覧の配色
tqscore.cgiの
「以下は表示のカスタマイズ」の部分の変数を変更することによって、成績表の背景色、文字色を変えることができます。以下は変数と色の対応です。
| 背景色:$tablebg1、文字色:black(固定) |
| 背景色:$tablebg2、文字色:black(固定) |
背景色:$scorebg1 文字色:$scoreFONT1
|
背景色:$scorebg2 文字色:$scoreFONT2、(名前の文字色:$nameFONT)
|
|
背景色:$scorebg3、文字色:$scoreFONT3
|
[目次へ]
得点別終了メッセージ
message.txtを編集することによって、得点によって表示するメッセージを変更することができます。書き方は以下の通り。(文章にタグが使えます)
| 100%です<BR>すごい! |
(←100%の時のメッセージ) |
| 90%です<BR>たいへんよくできました |
(←90%以上100%未満の時のメッセージ) |
| 80%です<BR>よくできました |
(←80%以上90%未満の時のメッセージ) |
: : |
: : |
| 0%です<BR>もっと勉強しましょう |
(←0%以上10%未満の時のメッセージ) |
|
編集例は
こちら。
普通は message.txt は tqindex.cgi と同じディレクトリに一つだけ置いておけばよいのですが、ジャンルによってメッセージを代えたい場合は、data/(genre)/message.txtに置いておくと、そのジャンルのときはその message.txt が使用されます。
例えば、ジャンルquiz1をやった時、まず先に$basedir/data/quiz1/message.txtを探して、存在したらそれを使い、無かったら$basedir/message.txtを使います。
[目次へ]
トップページを独自にデザインしたい場合
tqindex.cgi のデザインが気に食わない(;_;)場合、以下のリンクを使って、独自にトップページをデザインすることもできます。ただしその場合、
現在のトップ、正答率、挑戦者数、合格者数などを表示することはできません。(tqindex.cgi のHTML部分を修正すればこれらも表示できますが、サポート対象外とします。)
独自デザイン用のリンク
- tqquiz.cgi?genre=<dirname>
.....ジャンル<dirname>への挑戦
- tqscore.cgi?act=rank
.....高得点者一覧(トップ10)
- tqscore.cgi?act=rate
.....正答率一覧
- tqscore.cgi?act=rank&genre=<dirname>
.....ジャンル<dirname>の高得点者一覧
- tqscore.cgi?act=rate&genre=<dirname>
.....ジャンル<dirname>の正答率一覧
[目次へ]
隠し(?)オプション
.cgiを修正することによる
隠し変数と、URLにスイッチを付ける
隠しスイッチの二つを紹介します。
隠し変数
- tqquiz.cgi
- $maxplayer
... 同時に何人まで参加できるか。この数字より多い人数が同時に参加すると、データがおかしくなります。ただし、あまり大きくしすぎると容量を食います。10以上30以下位に設定してください。
- $answertype
... 選択肢の表示方法が変わります。(* 例1を参照)
- $atarimark, $hazuremark
... プレイ中、上部に表示される成績履歴。(* 例2を参照)
- tqscore.cgi
- $showno
... tqscore.cgi?act=rank にアクセスすると全てのジャンルの順位を表示するが、上位何人まで表示させるか。デフォルトでは 「$showno=10;」 つまり、ベスト10が表示される。
- $regbody
... 「登録ありがとうございました」の画面で、<body 〜> の 〜 の部分に入る文字。デフォルトでは 「$regbody="bgCOLOR=lightgreen";」、つまり、背景が lightgreen になる。
(* 例1)
$answertype の指定で選択肢の表示方法が次の様に変わります。
(* 例2)
例えば、atari.gif
と hazure.gif
を作っておいて、
$atarimark="<td><img src=\"atari.gif\"></td>";
$atarimark="<td><img src=\"hazure.gif\"></td>";
としておくと、
という具合に表示されます。
[目次へ]
隠しスイッチ
- tqscore.cgi?act=rank&tq=1
... 全てのジャンルの登録者を全てを表示させる。
- tqscore.cgi?act=rate&tq=1
... 全ての問題の正答率を表示させる。
[目次へ]
バージョン情報
バージョン履歴
- (00/1/1) Ver.2.05
2000年以降にスコア登録すると年の表示が「100/01/01」となってしまうバグを修正
- (99/3/29) Ver.2.04
変数編集部分を全て tqlib.pl に移動。ジャンル名の妥当性チェックの強化。機能的な変更は無し。
- (98/9/26) Ver.2.03
一部のサーバー(NT系?)で、正しいメールアドレスを入力しても「メールアドレスが不正です」と出てしまう不具合を修正。
- (98/7/7) Ver.2.02
細かいバグをまとめて修正、各種関数の改善、トップページの表示を少々変更など。特にファイルロック関連は大幅に改良され、「ロック中」がかかりっぱなしになることはほとんど無くなった(.....はず)。
- (97/12/4) Ver.2.01
いくつかの致命的なバグを修正。
- (97/12/4) Ver.2.00
新規登録
[目次へ]
1.XX → 2.XX への問題ファイルのバージョンアップ方法
現在 TakaQ Ver.1.XX をお使いの方で、Ver.2.XX に移行する場合、以下の問題コンバータを使用すれば、
同じ問題を Ver.2.XX で使うことができます。(成績データはコンバートできません。)
とりあえず上記の方法に従ってVer.2.XXをインストールした後、以下のプログラムをダウンロードしてください。(ダウンロード後、tqconv12.cgi と名前を変更してください。)
使い方は以下の通り:
- tqconv.cgi ファイルの最上部のPerlのパスを正しく設定する。
- tqconv.cgiファイルの以下の変数を編集してください。
- $basedir
..... データファイルを格納するディレクトリのパス
- $ext
..... CGIプログラムの拡張子
- $password
..... 管理用パスワード
- 他の .cgi ファイルがあるディレクトリと同じ場所にFTPでアスキー転送する。パーミッションを705にする。
% chmod 705 tqconv12.cgi
- tqconv12.cgi にブラウザからアクセスしてみて、HTMLが表示されればOK。
あとのやり方は表示されたページに書いてあります。(説明が分からなかったら掲示板で質問してください。)
[目次へ]
日付表示のバグの修正方法(2.04以前)
2.04以前において、2000年以降の日付表示がおかしくなるバグが発見されています。2.04 以下をお使いの方は、
tblib.plをテキストエディタ(メモ帳など)で開き、以下の修正してください。
・tqlib.pl 54行目付近
get_time関数:青い部分を赤い部分で置き換える。
■ 修正前
##### 現在時刻の取得
sub get_time{
local($param)=@_;
@times=localtime(time);
$times[4]++;
for(1..4){ if($times[$_]<10){ $times[$_]="0$times[$_]"; } }
"$times[5]/$times[4]/$times[3] $times[2]:$times[1]";
}
|
↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
■ 修正後
##### 現在時刻の取得
sub get_time{
local($tsec) = time();
local($sec, $min, $hour, $mday, $mon, $year)
= localtime($tsec);
$mon++;
$year += 1900;
return sprintf("%02d/%02d/%02d %02d:%02d",
$year, $mon, $mday, $hour, $min);
}
|
[目次へ]