掲示板で上から3,2,1と逆順で記事表示されるのを、ひっくり返してストレートに上から1,2,3と表示するには?
[上に]
[前に]
[次に]
すらいむ
[E-Mail]
2000/03/06(月) 16:01:02
フリーで配布されてる、KENTさんのG-LIGHTの掲示板なんですが、
これには、過去ログの自動作成機能がついています。
ただ、この自動作成される過去ログの記事は、
下から順番に記事を読んでいかなくては成りません。
(上から、3、2、1といった具合に表示される)
これってちょっと読みづらいような気がするんですよ。
だから、自動作成される、過去ログのトコロだけを、
普通のストレートな順番(上から1、2、3といった具合)に
表示できないだろうか?と思っています。
それで、私なりに、本を調べて、
ログを記録する際、一列ごとに逆転を計ってみては?と勝手に思い、
$pst_line = reverse($pst_line);
という、のを、それらしい場所に組み込んだのですが、
エラーは出ない変わりに、何も起こりません・・・・
やはり、付け焼き刃で、Parlが出来るワキャない・・・・
ということで・・・・・(ーー;)
済みません、誰か分かる方、教えていただけませんでしょうか?
多分、以下↓の部分に何らかのソースを組み込めば、
ストレートな順番で表示できると思うのですが・・・・・
## --- 過去ログ生成
sub pastlog {
$new_flag = 0;
open(NUM,"$pastno") || &error("Can't open $pastno");
$count = <NUM>;
close(NUM);
# 過去ログのファイル名を定義
$pastfile = "$past_dir\/$count\.html";
# 過去ログがない場合、新規に自動生成する
unless(-e $pastfile) { &new_log; }
if ($new_flag == 0) {
open (DB,"$pastfile") || &error("Can't open $pastfile");
@past = <DB>;
close(DB);
}
# 規定の行数をオーバーすると、次ファイルを自動生成する
if ($#past > $log_line) { &next_log; }
$pst_line = $lines[$max-1];
$pst_line =~ s/\n//g;
($pnum,$pdate,$pname,$pemail,$plocal,$picon,$pad_icon,
$pcom,$pres,$purl,$phost,$ppw,$psub) = split(/<>/, $pst_line);
if ($subject && $psub eq "") { $psub = "無題"; }
if ($pemail) { $pname = "<a href=\"mailto\:$pemail\">$pname</a>"; }
if ($purl) { $purl = "<a href=http://$purl target=_top>http://$purl</a>"; }
# 自動リンク
if ($autolink) { &auto_link($pcom); }
$html = <<"HTML";
[$pnum] <font color=$sbj_color><b>$psub</b></font><!--T--> 投稿者:<font color=$link><b>$pname</b></font> <small> <font color=$sbj_color>[$plocal]</font> 投稿日:$pdate</small><br><blockquote>$pcom<P>$purl<P><blockquote><font color=$man_color>$pres</font></blockquote></blockquote><!--$phost--><hr>
HTML
@news = ();
foreach $line (@past) {
if ($line =~ /<!--OWARI-->/i) { last; }
push (@news,$line);
if ($line =~ /<!--HAJIME-->/i) { push (@news,"$html"); }
}
push (@news,"<!--OWARI-->\n</body></html>\n");
open(DB,">$pastfile") || &error("Can't write $pastfile");
print DB @news;
close(DB);
}## --- 過去ログ完了 --- ##
ユニオン
2000/03/06(月) 22:18:42
テストはしていないので、間違ってるかもしれませんが、
最後の部分で次のようにしてみてはどうでしょうか?
@news = ();
foreach $line (@past) {
if ($line =~ /<!--OWARI-->/i) { last; }
@news = ($line,@news); #この行を変更
if ($line =~ /<!--HAJIME-->/i) { push (@news,"$html"); }
}
さだひろ
2000/03/07(火) 00:07:05
ユニオンさんのではまずいです.
@past[0] は "<html><head><title>過去ログ</title></head>\n" となっています.
ローカル化されていないサブルーチンだけ見たところで,変数がどこで
どう定義されていたものやら,データファイルはどういう構造になっているのか,
その他もろもろ,わかるわけがありません.
結局KENTさんのサイトでソースを拾ってこなくてはなりませんでした.
だから,フリーツールならそのソースが得られるところ
(許可されている範囲で,できるだけ近い所)にリンクを張るように.
変更箇所は,最少限にするとして,
sub pastlogの43行目if ($line =~ /<!--OWARI-->/i)に続く
{ last; } を { push (@news,"$html"); last;} にする.
sub pastlogの45行目
if ($line =~ /<!--HAJIME-->/i) { push (@news,"$html"); } は削除する.
ですね.
# 単に push (@news,"$html"); を移動するだけでよいともいう;
#
# if ($line =~ /<!--OWARI-->/i) { push (@news,"$html"); last;}
# push (@news,$line);
# if ($line =~ /<!--HAJIME-->/i) { }
#
# こうすると if ($line =~ /<!--HAJIME-->/i) の判定が無意味になる.
# こういうのはよくないから if ($line =~ /<!--HAJIME-->/i) { } は削除.
>やはり、付け焼き刃で、Parlが出来るワキャない・・・・
Perlですね.いや皮肉ではなく.
>$pst_line = reverse($pst_line);
>エラーは出ない変わりに、何も起こりません・・・・
マトモな所に置いたら過去ログがめちゃくちゃになるはずですよ.
きっと,$pst_lineが用済みになった後に置いたのですね.
# @past = reverse(@past) よりはましかも>HTMLが体をなさなくなるぅ.
すらいむ
2000/03/07(火) 14:05:41
[[解決]]
皆さん、どうもありがごうございました m(_ _)m。
お陰様で希望どおりの動作をする様に成りました。
3通り試してみて、
以下のもので、成功いたしました。
># 単に push (@news,"$html"); を移動するだけでよいともいう;
>#
># if ($line =~ /<!--OWARI-->/i) { push (@news,"$html"); last;}
># push (@news,$line);
># if ($line =~ /<!--HAJIME-->/i) { }
>#
># こうすると if ($line =~ /<!--HAJIME-->/i) の判定が無意味になる.
># こういうのはよくないから if ($line =~ /<!--HAJIME-->/i) { } は削除.
>>やはり、付け焼き刃で、Parlが出来るワキャない・・・・
>Perlですね.いや皮肉ではなく.
そうですね、こんな初歩的段階で間違えてしまうとは・・・・^^;
これじゃ、殆どコントかギャグに成ってます(笑)。
>ローカル化されていないサブルーチンだけ見たところで,変数がどこで
>どう定義されていたものやら,データファイルはどういう構造になっているのか,
>その他もろもろ,わかるわけがありません.
>結局KENTさんのサイトでソースを拾ってこなくてはなりませんでした.
>だから,フリーツールならそのソースが得られるところ
>(許可されている範囲で,できるだけ近い所)にリンクを張るように.
これは、次回から、気を付けるようにします。
それでは、お世話になりました。
[上に]
[前に]
[次に]