- 締切済み
返信機能つき掲示板
返信機能なしの掲示板をつくりました。 そこでこれに返信機能をつけたいと思い、作成しなおしてるんですが、イマイチ仕組みがわかりません。 1.最初の書き込みにID,COUNTをつける。 2.返信をかいたら、同じID,COUNTには1を足した状態で新しいデータを追加。 動作としては上記のような方法であっているのでしょうか? CD-ROMがあるのですが、それをみてしまうと自分で書いたことにならないし、解読しようにも難しくて…
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- estea
- ベストアンサー率44% (39/87)
データの挿入についてでつ。 ファイル data.txt に[ID\tデータ\n] な形で保存されている場合を仮定します。 # 差し込みたい対象の ID が $target に入っているとします #差し込むデータは $newdata とします open(F,"data.txt"); @hoge = <F>; close(F>; $newid = @hoge + 1; # 全投稿数+1 してあたらしぃIDを決定 open(W,">data.txt"); foreach $popo( @hoge ){ ($id,$data)=split(/\t/,$popo); print W "$id\t$data"; if($id == $target){ print W "$newid\t$newdata\n"; } } close(W); 至極簡単に実現する方法です。実際に使うにはいろいろと足りないとは思いますが。動くとは思います。 (例のごとく動作未確認です
- estea
- ベストアンサー率44% (39/87)
返信ってか、ツリー関係が保存される掲示板ですか。 この場合は、普通それぞれの投稿に"一意"なIDを振る必要があります。ですので ID に 1 を足すってのは結構です。が、以下のような場合を考えてください。 ID 1 で新規投稿 ID 2 で新規投稿 ID 1 に対して 1 個返信があれば ID は 1+1 で 2。 なんと、 ID 2 の投稿が二つ・・・ お分かりかと思いますが足し算程度の簡易な方法だといずれIDがカブることになります。 ミソは、"一意に決まるID"です。 たとえば、返信しようとしている投稿にすでにある返信の数を保存し(COUNT ?)、それをIDに"くっつける"。 つまり ID 1 にたいして3個目の返信は 1.3 にする。とか。 でこの返信にさらに返信をつけるときは 1.3.1 とか。 あるいは、擬似乱数とかプロセスIDと実行時間などを用いて一意に番号をつけられるならそれでもいい。 はたまた、全投稿すうを見て順番に番号を振るなんてのも簡単ですが有用です。(投稿の数を数えるか、数を保存するファイルがあるということです) あとぉ、 表示の際に for や while でまわすのは効率的に良くないので、投稿時にキャッシュみたいな形でHTMLファイルを吐くとか、そもそも階層保存ファイルをHTMLで書き出すとか・・・いろいろあると思います。
- K5237
- ベストアンサー率56% (55/97)
自分は配布されている掲示板のソースを参考にして作ったことがあります。3年位前でしかも作りかけ(^^;) 他の方の書いたソースを参考にして書いてみるのも,立派な勉強だと思いますよ。 具体的な返信機能の実装方法ですが,KODAMARさんのでもできると思いますが,表示させるときに大変になると思います。for文でもwhile文でも。返信記事がいくつあるのかを取得するのが大変だと思います。 ですから,保存するときにIDとともに,どのIDの記事への返信かを分かるような情報を付け加えれば良いと思います。返信でない記事へはその値を空にするとか。 そうすれば,2つの値のIDが一致したときに表示してやれば,うまく親記事と変身記事が表示されると思います。 分かりにくい文章ですが,参考になれば幸いです。
お礼
回答ありがとうございます。 考え方自体は間違えてないみたいですね。よかったです。 ログファイルの書き込みの仕方を、単なる追加ではなく、日付順に並び替えて書き込みしなおす(新しいものが一番上に行くことによって、 ログファイルを開いた時に勝手に日付順に変わる)というような方法になおしました。 さらにやりたいことがあって、新規の時は今のままでいいのですが、返信の書き込みの時に、ログファイル中から、自分と同じIDを探し出して、 そのIDの下にログファイルを追加したいのです。 「挿入」のような形です。 これを実現させるためにはどのようにしたらいいと思いますか? 概念だけでも教えていただけると嬉しいです。
お礼
回答ありがとうございます。 考え方自体は間違えてないみたいですね。よかったです。 ログファイルの書き込みの仕方を、単なる追加ではなく、日付順に並び替えて書き込みしなおす(新しいものが一番上に行くことによって、 ログファイルを開いた時に勝手に日付順に変わる)というような方法になおしました。 さらにやりたいことがあって、新規の時は今のままでいいのですが、返信の書き込みの時に、ログファイル中から、自分と同じIDを探し出して、 そのIDの下にログファイルを追加したいのです。 「挿入」のような形です。 これを実現させるためにはどのようにしたらいいと思いますか? 概念だけでも教えていただけると嬉しいです。 それとIDですが、これは新規の場合は、ログファイル中のID番号の中から一番大きな数字を拾ってきて、それに1を足すという形にしました。 返信の場合は、親IDをそのまま引っ張っていくようにしてあります。 さらにCOUNTというのは、親記事の場合は0で、返信記事になると1になるような変数です。 これで親記事なのか返信記事なのか見分けようと思いまして。