>◎過去ログ機能を設定できます
>M*Diaryの過去ログファイル(datファイル)をhtmlに変換するためのスクリプト
カスタマイズすれば、お尋ねの機能が実現できるかもしれません。
下記URLは、サンプルです
http://www2s.biglobe.ne.jp/~hiroP-Is/script/
HI NOTES -CGI SCRIPT-
>Diary 1.5a 日記帳 フリーソフトウエア
これも、いい線一定いると思います。
下記URLは、サンプルです
お尋ねのCGIの改造は、理屈は難しくなさそうですが、あちこち修正する必要がありそうです。
クールな方法が有ると良いのですけど、まだ思いつきません。
http://www.ausystem.org/~aushacho/dl/14.html
Dust Library
URLはダミーです。
お尋ねのCGIの改造について考えてみました。
まず、ダメな案から順に説明します。
「最新の1件のみ表示」という風に改造するだけなら、「wwwnikki.cgi」の「sub output_log」ルーティンの1076-1077行目の
foreach $key (sort { $asc ? $a cmp $b : $b cmp $a} keys %data) {
next if(!$new and $key gt $QUERY{end});
を、
my $displayed = false;
foreach $key (sort { $asc ? $a cmp $b : $b cmp $a} keys %data) {
next if(!$new and $key gt $QUERY{end});
next if( $new and !$displayed);
$displayed = true;
とかすれば済みそうです。
しかし、これだけだと、2件目から先、過去ログになっていない分が表示できなくなりますね。
ブー! 不採用!!(笑)
2件目から先を過去ログ送りにして、さらに15日づつログファイルを分けるのは可能ですが、そうとうCGIを修正しなければいけません。
これも不採用。
次に、今ある処理とは別に、一日分だけ表示する処理を追加する案もあります。
「wwwnikki.cgi?action=view」という処理を改造するのではなく、一件分だけ表示する「wwwnikki.cgi?action=view_one」とかを作る案です。
この場合、307行目から308行目の
&save_referer;
&kako_execute($path);
の前に、
(/^view_one$/) and do {
&save_referer;
&display_log_one;
last SWITCH;
};
とか挿入します。
その上で「display_log_one」サブルーティンを作ります。
sub display_log_one {
print $html_header;
print &output_log(2);
exit;
}
くらいですね。
注目点は、output_logの引数に2を新設しているところです。
(元のスクリプトは0と1しか対応していません)
で、「sub output_log」ルーティンの1076-1077行目の
foreach $key (sort { $asc ? $a cmp $b : $b cmp $a} keys %data) {
next if(!$new and $key gt $QUERY{end});
を、
my $displayed = false;
foreach $key (sort { $asc ? $a cmp $b : $b cmp $a} keys %data) {
next if(!$new and $key gt $QUERY{end});
next if( $new == 2 and !$displayed);
$displayed = true;
とかする案です。
これでうまくいくかもしれませんが、使い勝手は良くないのではないかと思います。
更に、別のアプローチを考えてみましょう。
いっそ、生きているログの表示は触らずに、過去ログの作り方を変えるのはどうでしょう?
今のスクリプトでは、過去ログの新規書き出しはできても、追加書き出しが出来ないのがネックなのかと。
過去ログの追加書き出しが出来れば、最新データ以外は、どんどん(最新)過去ログに書き出せばよいので、運用でカバーできるかもしれません。
過去ログを同一ファイルに追加可能にするだけなら、「output_execute」ルーティンの1219行目から1220行目を、
open OUT, ”>$ddir$QUERY{fname}”
or &error_form( ’過去ログの保存に失敗しました’ );
から、
if ( -s ”$ddir$QUERY{fname}” ) {
open OUT, ”>>$ddir$QUERY{fname}”
or &error_form( ’過去ログの追加に失敗しました’ );
} else {
open OUT, ”>$ddir$QUERY{fname}”
or &error_form( ’過去ログの保存に失敗しました’ );
}
に変えるだけで いけそうです。
これで、こまめに過去ログファイルを作るというのはダメですか?
(過去ログのファイル名に工夫が要るかもしれませんが・・・)
クールな解決策とは言えませんが、私に考えつくのは せいぜいこの程度です。
どうも、すみません。
有り難う御座いますm(__)mやってみます