- ベストアンサー
日記CGIの改造(ログを逆順に表示)
日記CGIをちょっと改造してイベント告知CGIとして利用したいと考えています。配布サイトに掲示板などのサポートが無かったのでこちらで質問させてください。 元となるCGIはOlive Designさんの「Simple Olive Diary2」です。 http://www.olive-design.com/~cgi/simple_diary2.html 日記の場合、新しいものが一番上に来ますが、イベント告知の場合、先に書き込んだもの(今あっているもの)が一番上のほうが良いですよね。 で、それをどうにかしようと少ない知識を絞って考えたのですが、うまくいきません。 表示する方ではソートしている感じではないので、ログを逆順に保存しようかと考えました。 サブルーチン「regist」の下から3行目 unshift (@log,"$newdata"); を push (@log,"$newdata"); としてみましたが、変化無しです。 他にも何か変える必要があるのでしょうか? 宜しくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
表示ロジックで小細工するなら、 while ($rt=<IN>){ の箇所を @wk=<IN>; for $rt (reverse(@wk)){ に変えてください。 記録ルーチンで小細工するなら、 変更された箇所の少し上にある最大記録数を超えたログの自動削除も 直さないとダメでしょうね。 従来が、先頭側に新、後方に旧データを保存する関係で、整理の対象を 最大記録件数を超えた後ろ全てとしているので。 (全部のロジックを読んでないので、他にもあるかも・・です)
その他の回答 (1)
似たような改造をするときにreverse関数というものを使いました。 お使いのCGIの文が解読できるスキルがないので自分の使ったのをそのまま書きますと、 open(DAT,"<bbs.log"); @alldat=<DAT>; @reversedat=(reverse(@alldat)); みたいな感じになっています。
お礼
再度書き込みします。 とりあえず、表示部分に仕込んでみました。 open(IN,"$logfile") ; @alldat=<IN>; @reversedat=(reverse(@alldat)); #while ($rt=<@reversedat>){ こうすると、多分なのですが、半角空白でログを区切ってしまっているようで、何も表示しない行(記録)がいくつも出てきてしまいます。 何か解決方法はありますか?お願いします。
補足
返答ありがとうございます。これは、どこで利用したら良いのでしょうか? 表示部分?それとも書き込み部分? 書き込みだと、書き込むたびに逆になってしまうから意味が無いですよね?(この考えあってます?)
お礼
ありがとうございます。表示ロジックを細工する方でやってみましたが、ばっちり出来ました。