レスが付くと一番上に来るには??

[上に] [前に] [次に]
レス太郎 1999/06/18(金) 23:13:30
レスが付くと記事が一番上にくるようにしたいです。
掲示板のトップはindex.shtmlで、
ログファイルをSSIで呼び出すようにしています。
こんなかんじです↓
<!--#include file="5.html"-->
<!--#include file="4.html"-->
<!--#include file="3.html"-->
<!--#include file="2.html"-->
<!--#include file="1.html"-->

たとえば3.htmlにレスが付いた場合、
上に追加書き込みすることで上に持ってくる事はできるんですが、

<!--#include file="3.html"-->
<!--#include file="5.html"-->
<!--#include file="4.html"-->
<!--#include file="3.html"-->
<!--#include file="2.html"-->
このように、3.htmlの表示が2つになってしまいます。
何とかして下の3.htmlのほうの行を消す方法はないでしょうか?

B-Cus 1999/06/19(土) 07:08:02
> 上に追加書き込みすることで上に持ってくる事はできるんですが、
という処理を行うCGIやSSIの中で、先頭に書いたものと同じものが出てきたら
スキップする、というのではダメでしょうか。

あるいは include fileの代わりに
 <!--#exec cmd="listup.pl"-->
などとして、その中で適当に順番を変えるとか。

レス太郎 1999/06/19(土) 09:57:25
スキップというのはどの関数を使用すれば良いのでしょうか・・・?
なるべく、読み込みの際には処理を少なくしたいです
お願いします。

B-Cus 1999/06/19(土) 16:13:28
処理を飛ばすようなアルゴリズムを考える、ということです。
そもそも
> 上に追加書き込みすることで上に持ってくる事はできるんですが、
というのは、手動でやろうとしているんですか? もちろんそうじゃなくて
自動処理させるつもりですよね?

方法はいろいろあると思いますが、一例として、最終更新時刻の順に
ファイルをソートして表示する例。

pendir(DIR,"./");
@files = grep(/^\d+\.html$/,readdir(DIR));
foreach (@files){
 $table{$_}= (stat("$_"))[9];
}
foreach ( reverse sort {$table{$a}<=>$table{$b}} keys %table){
 print "<!--#include file="$_-->\n";
}

レス太郎 1999/06/19(土) 17:40:20
お返事ありがとうございます。
すいません、状況の報告不足でした。

スレッド1つが1つのHTMLファイルになるようにしています。
ログが貯まると困るので、表示するのは20個にしたいです。
それで、レスが付くとレスの処理のときに、
そのHTMLが一番上でinclude fileで呼び出されるように
このように↓書きました。

$datafile = "./log.html";
$tempfile = "temp";

open(TMP,">$tempfile");
print TMP "<\!--\#include file=\"$html\"--\>\n";
open(DATA,$datafile);
@DATA=<DATA>;
for ($i=0; $i<19; $i++) {
print TMP $DATA[$i];
}

close(DATA);
close(TMP);

rename($tempfile,$datafile);

でもこれだと同じスレッドにレスが付き続けると、
<!--#include file="3.html"-->
<!--#include file="3.html"-->
<!--#include file="3.html"-->
<!--#include file="3.html"-->
というように同じHTMLファイルでページが埋まっちゃって困ってるんです・・。
書き込みのときに同じ記述がある場合はそれを消して、
それから上に追加書き込みする方法はないでしょうか・・?
よろしくお願いします。

B-Cus 1999/06/19(土) 18:39:58
for ($i=0; $i<19; $i++) {
 if ( "$i.html" eq "$html" ){ next; }
 print TMP $DATA[$i];
}
とか。

レス太郎 1999/06/19(土) 19:50:36
これだと、
行とファイル名が一致したときだけスキップするだけと
思うんですが・・・。

B-Cus 1999/06/20(日) 17:50:52
上のスクリプトを見る限り、「$html=書き込みがあったスレッド」と思えたので、
「書き込みがあったスレッドはスキップ」のつもりだったのですが、違うの?

[上に] [前に] [次に]