管理 | 差分 || 新規作成 || カテゴリ一覧 | ページ一覧 | 更新履歴 | 差分履歴 || アンテナ || PUT || more≫ ≫omit
shortcut: FrontPage || WikiLab | StoreRoom/最新 | 日々の泡 | むず痒いパソコン日記/最新 || HelpPage ||[edit]
category: WebsiteWork/CgiPerl/KoroboRoom

WebsiteWork/CgiPerl/KoroboRoom/1 - 変幻自在掲示板 korobo と遊ぶ日記。2002/11/11-2002/11/25

LastModified :
[管理]

変幻自在掲示板 korobo と遊ぶ日記。2002/11/11-2002/11/25

| むず痒いパソコン日記 | WebsiteWork | WebsiteWork/CgiPerl || 関連ページ:KoroboRoom |

2002/11/11(mon)

[TOP↑] [管理]

拾い物。

[TOP↑] [管理]

10/07 に Wiki を仕入れて、まだ遊びきっていない WikiLabというのに、また新しいCGIを拾う。

たまたま行ったサイトで使われてた掲示板がちょっと面白そうだったので、リンクを辿って[ できるCGI ]というところに出た。そこで [Korokorobod] を拾う。

スキンでいろいろカスタマイズできるというんだけど、単に「見た目」だけではなく、機能の取捨選択まで自由自在な感じで、チャットにまでなってしまうし、一つのCGIで複数の掲示板が設置できる。 しかもスキンのHTMLファイルに、直接 perl のスクリプトを書くことまでできてしまうらしい。

Perl が解らないので、意味はないが。

追記。

[TOP↑] [管理]

後で 2apes という、スキンでカスタマイズできる有名らしい掲示板があるのを知った。ちょっと試してみたかったけど、サンプルのスキンを眺めて、書き込みを後で編集する機能がないようだったのでやめた。何にしろ、あちこちあちこちウロウロしないで、少し落ち着きましょう。

2002/11/15(fri)

[TOP↑] [管理]

CGIディレクトリリストラ断行。

[TOP↑] [管理]

cgi のディレクトリの restructuring を決行。稼動中のスレッド式の掲示板と、1行掲示板2つ、それとチャットをこれ一つでまかなうことにして、取っ組み合う。

如何せん、カスタマイズするのに必要な情報がまとまったドキュメントになってないし(自由度が高い分、まとめようにもすごい量になるだろうけど)、Perl は解らないしで、あちこちで配布されてるスキンをもらってきては比較検討。もうちょっと賢かったらTips集でも作りたくなるような勢いで、面白い。

2002/11/18(mon)

[TOP↑] [管理]

スレッド式掲示板に、記事の「タイトル一覧」ページをつける試み。

[TOP↑] [管理]

スレッド式の掲示板。時々長いスレッドがいくつも続くことがあって、スクロールしているうちに終端を見落とし、新しい書き込みに気付かないことがあった。前に使っていた掲示板は新しい書き込みに [new] マークがつくようなこともなかったので、ページ内検索で探すことも出来なかった。今回は[New]マークもつくし、高速でスクロールしてもスレッドの終端を見落とさないようなデザインにはしたけど、「タイトルの一覧表示」の画面も作ろうと思い立つ。ちょっとした「ツリー式掲示板」のイメージ(階層は親と子の2階層だけだけど)。

最初は簡単に、<a href="$script?form=***#$num">$subject</a> というリンクで記事にジャンプしてみる。一見うまくいったように見えたんだけど、ページが複数あると後ろのページにはジャンプできない。…そりゃそうか。

ページあたりの親記事数からページの引数を計算して、変数で与えることは出来なくはないのかもしれないけど、私にそんな知恵はない。素直にスキンを配布しているサイトにいって、「ツリー式」と銘打たれているスキンをもらってくる。

サンプルでは、返信専用の画面に飛ぶらしい。個人的にはスレッド画面に飛んでくれるほうがいいんだけど、知恵のない者は贅沢は言えない。

<!-- CHOP -->
<!-- スレッド開始 No.$num -->
<KOROSCRIPT>
<!--
$num_view_message = 0; # レス記事のカウントをリセット(レス記事カウントするため)
-->
</KOROSCRIPT>
<a href="$script?res_num=$num&form=***&mode.thread=1">$subject</a>
<!-- CHOP -->
<!-- レス記事開始 No.$num -->
<KOROSCRIPT>
<!--
$num_res_message ++; # レス記事をカウント
-->
</KOROSCRIPT>
<a href="$script?res_num=$num&form=***&mode.thread=1#[$num]">$subject</a>

と、いうことらしい。

データの変換。

[TOP↑] [管理]

前に使っていたのは、KentWebという有名な CGI配布サイトの、[YY-BOARD]というとてもよく使われているスクリプトの、改造版だった。 親切なことに、korobo の配布元掲示板に[YY-BOARD]からの現行ログ変換スクリプトが置いてあったので、多分データの形式は改造版も同じだろうと思い(追加の項目などもなかったので)、使ってみることにする。

CGIのスクリプトなんだけど、いざ、使い方で0.5秒悩む。

「これは…このままサーバーに置いて、ブラウザからこのCGIにアクセスすればいいのよね…?」

やってみる。待つことコンマ0秒。ブラウザに[ログの変換が終了しました。]というメッセージが ポツネン と表示される。「え、すげ、はや、ほんとに?」。出来たファイルを開いてみる。 できてるできてる。う〜ん、すごい。

ただし過去ログは既にHTML変換されて保存されているので、変換は不可。 仕方がないので HTML に少し手を入れてそのまま置いた(そのうち検索用のCGIで検索できるようにする予定)。

さて、1行掲示板を移行するときの悩みもやっぱりログの扱い。大した量ではなかったので、これもブラウザで表示したのを HTML で保存して置いておけばいいかと思ったけど、スレッド掲示板は既にデータ形式が HTML になっていたので仕方がないが、こっちはちょっと加工すれば変換できるんじゃないかと思う。

最初は CSVエディタかなんか使って、手動でデータの並び順を変えようとも思ったけど、何か違う…。 こういう「機械的」な並べ替えこそ、機械にやらせるべきなのよ。 ここでやっと、先のスクリプトが「具体的に」何をやっていたのか解った。 そ…そうか、単に並べ替えていたのか。

中を覗いてみると、

@items = qw(num oya name email url pwd date host archive subject message icon color image opt1 opt2 opt3 rectime);

という行があって、これが korobo のデータの並び順らしい。下のほうに

while (<IN>) {
chomp;
($num,$oya,$date,$name,$email,$subject,$message,$url,$host,$pwd,$color,$icon) = split /<>/;

というのがあって、ここに [YY-BOARD] のデータの順番が書いてあるのだろう。 問題の1行掲示板のデータを開いて並び順を検討する。

$name,$color,$date,$message,$host

と、いうことらしい。最初このまま書いたらデータの格納場所が一つずれてしまった。どうやら最初に[$num]に相当する番号がなかったのが敗因らしい。ついでに、日付も4桁の西暦がなかったため、なんかおかしい(どうおかしかったのかは忘れた)。多分スクリプトのほうを修正すればうまく行くのだろうが、知恵のない者は労力を惜しむまい。日付をエディタで一括置換し、CSV エディタで連番のセルを作り、それをデータの先頭に貼り付け $num に相当するデータのトコロを作る。スクリプトを [$num,$name,$color,$date,$message,$host]に修正する。 うまく行った。ニシシ。

あとからスクリプトを見ると、

$oya or $oya = $num;
($year, $month) = (split m[/], $date)[0,1];
$archive = $year.$month;
$url and $url = "http://".$url;
$message =~ s/(<a href=.*target='_top'?>)(.*)(<\/a?>)/$2/ig;

となっていて、この辺で corobor のログとして不整合が出ないように調整しているのでしょう。 korobo は月ごとに過去ログを生成するので、判定の基準になる日付の入り方がマチマチでは困るのだろうし (個人的には過去ログは件数ごとのほうがいいんだけど)。

2002/11/25(mon)(深夜)

[TOP↑] [管理]

マルチログ。

[TOP↑] [管理]

前に一度やって巧く行かなかった、「一つのスキンで複数の掲示板を設置」の試み。

[TOP↑] [管理]

配布元の掲示板に

今までは掲示板一つに、一つのスキンが必要でしたが、マルチログ対応版では一つのスキンだけでいくつも掲示板が作れるようにしてあります。

― 中略 ―

ログは、id=xxx で指定します。 opt.cgi の中に以下のような記述を追加するだけでいくつも掲示板を増やすことが出来ますが、わかりますでしょうか?

$data_dir = "./data/$log_id"; # データディレクトリ

$temp_dir = "./data/$log_id"; # 一時&ロックディレクトリ

2002/05/06(Mon) 21:15

とあったのでやってみたんだけど、巧く行かなかった。 データ用のディレクトリは下のようになっていて、b〜d のデータを呼び出すことは出来るんだけど、書込みしてもデータが追加されない。 書き込まれないのではなく、書き込みが a の dat ファイルに追加されてしまう。

data ┬ korobbs.dat(a)
     ├ data1 ― korobbs.dat(b)
     ├ data2 ― korobbs.dat(c)
     └ data3 ― korobbs.dat(d)

さらには[返信]しようとすると Internal Server Error が出る…。

$location らしい(配布元掲示板のログ)。

[TOP↑] [管理]

やってみようと思っただけで、別に必要はなかったので放っておいたんだけど、その後、配布元の掲示板のログを漁っていて、同様の現象で巧く行かないというご相談とその答えを見つけておいた。

スキンファイルには、 <INPUT TYPE="hidden" NAME="id" VALUE="$log_id"> を追加すると書き込めるようです。

2002/07/25(Thu) 12:44

idで指定した korobbs.dat に書き込めるようになりました。
しかし、書き込みボタンを押した後、form=koro を表示してしまいます。
>form=koro&data01 を表示しないといけないはずなんですが・・・
>オプションファイルに $location = を指定しないとダメなんでしょうか?

2002/07/25(Thu) 14:45

ミスキタさんが「オプションファイルの中で、$log_id を参照して切り替えます。」とおっしゃっていたので、
オプションファイルで $location="http://www.hogehoge.com/$log_id.html" と指定して、
idと飛ばしたいhtmlを同じ名前にしたら、表示できました。
これで良いのかどうか不安ですが。

2002/07/25(Thu) 16:44

ぜんぜん試してもないのに・・なんですが^^;

<input type="hidden" name="location" value="$script?form=$form_name&id=$log_id">

というのはないんですかね?超ぷち風表示じゃこれはダメですよね^^;

2002/07/25(Thu) 21:36

<input type="hidden" name="location" value="$script?form=$form_name&id=$log_id">

↑これでうまくいきました。

さらにこれ。

■通常表示で

なんでこれで出来てしまうのか?変な感じなのですが?

opt.cgi に

$data_dir = "./data/$log_id"; # データディレクトリ

$temp_dir = "./data/$log_id"; # 一時&ロックディレクトリ

view.html res.html のFORMタグ中に

<INPUT TYPE="hidden" NAME="form" VALUE="$form_name&id=$log_id">

<INPUT TYPE="hidden" NAME="id" VALUE="$log_id">

これで

http://to-san.cside.tv/korobbs/korobbs.cgi

http://to-san.cside.tv/korobbs/korobbs.cgi?id=new

どちらも書き込めて、書き込んだあともそのページを表示しました。

追).返信や修正のFORMタグ中にも

<INPUT TYPE="hidden" NAME="id" VALUE="$log_id">が必要。

■超ぷち風表示で(以下、view.html、opt.cgi等は、当ページ超ぷち風スキンの名称に準じる)

petit.view.html のFORMタグ中に

<INPUT TYPE="hidden" NAME="id" VALUE="$log_id">

petit.opt.cgi pkoro.opt.cgiに

$data_dir = "./data/$log_id"; # データディレクトリ

$temp_dir = "./data/$log_id"; # 一時&ロックディレクトリ

petit.opt.cgi に

# 一覧表示用のコロボーURL

$script_v = "http://to-san.cside.tv/korobbs/korobbs.cgi?form=pkoro&id=$log_id";

これで http://to-san.cside.tv/petit.html ↑に dataディレクトリに置いたnewディレクトリのkorobbs.datに 書き込めて書き込んだあとも このログを表示します。「見」ボタンで一覧も見れます。

2002/08/25(Sun) 09:02

以上のことを踏まえて、再チャレンジ。

[TOP↑] [管理]
<INPUT TYPE="hidden" NAME="form" VALUE="$form_name">
<INPUT TYPE="hidden" NAME="id" VALUE="$log_id">

返信は可能。送信後、引数のidが落ちて別ページへ移動してしまう。

<INPUT TYPE="hidden" NAME="form" VALUE="$form_name&id=$log_id">
<INPUT TYPE="hidden" NAME="id" VALUE="$log_id">

data(a)にデータの記録。意図しないページの移動はなし。

<input type="hidden" name="location" value="$script?form=$form_name&id=$log_id">
<input type="hidden" name="id" value="$log_id">

で成功。[修正のFORM]には修正の必要がなかった。

再チャレンジ中のムダな遠回り。

[TOP↑] [管理]

最初、なぜか id で指定したデータファイルが開けなかった。空のデータファイルを上げたつもりで、別なスキンを作るときに使った、テスト書き込みのゴミデータが入ったファイルを置いてしまったんだけど、あるはずのゴミデータが表示されない。

試しにデータファイルを削除すると、「データが開けない」というエラーメッセージが出るので、データファイルへのパスを間違えているわけではないらしい。とにかく、あるはずのデータが表示されない。全くのナゾ。どこをチェックしていいのかもわからないので、ディレクトリ指定の opt ファイルは放っておいてテンプレートのスキンをいじてみたり。

データが開けないのに、書き込めるはずはない。あちこちいじりまわし、ふと空のファイルを上げてみる。さて、期待もせずに書き込む。 …なぜか、書き込めている(まだ、「書き込み後引数の id が落ちてページが移動してしまう」バージョンだったけど、戻ってリロードすると、書き込んだデータが見えた)。

やっぱりデータファイルがおかしかったのか? と思いながら、もう一つ全く同じゴミデータを入れて作ってあったディレクトリをidで指定。何故かこちらは開ける。なぜ今まで開けなかったの?

ただ、書き込めるんだけど一つ変な現象。返信の表示位置がおかしい。 親記事A の下に2つ、親記事B への返信がくっついていて、そのthreadに書き込もうとすると、余計な返信の上に挿入される。つまり、

親記事 A
   返信 A-a
   返信 A-b
   返信 A-c
   返信 B-a <親記事 B への返信
   返信 B-b <親記事 B への返信
親記事 B
   返信 B-c
   返信 B-d

こんな状態で表示されていて、親記事A に返信すると、

親記事 A
   返信 A-a
   返信 A-b
   返信 A-c
   返信 A-d <ここに追加される
   返信 B-a
   返信 B-b
親記事 B
   返信 B-c
   返信 B-d

こんな感じになってしまう。

試しに、別のディレクトリで稼動中の掲示板に、問題の「ゴミデータファイル」を置いてみたら、やっぱり内容が読み込まれなかった。エディタで開いた限り、特にデータ構造が変なようには見えないんだけど。文字コードや改行コードも他の読めるファイルと変わらないし。

…まあ、「おかしくないのに、おかしなことが起きた」と言ってみても仕方がない。 「おかしなことが起きた」からには、データファイルのどこかに不整合があったのでしょうね。 で、そんなことのために延々小一時間もこんがらかってしまった不運と片付けるしかないのでしょう。

| むず痒いパソコン日記 | WebsiteWork | WebsiteWork/CgiPerl || KoroboRoom2へ |

shortcut: FrontPage || WikiLab | StoreRoom/最新 | 日々の泡 | むず痒いパソコン日記/最新 || HelpPage || [edit]
select css: default | sakura | mono | greenheck | snow | NN4.x用(多分) || LinuZau!! | VikiWiki!? || others |

管理 | 差分 || 新規作成 || カテゴリ一覧 | ページ一覧 | 更新履歴 | 差分履歴 || PUT