人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

過去ログの生成が出来る、日記のCGIスクリプト、もしくはPHPスクリプトを探しております。理想としては[http://www.ausystem.org/~aushacho/cgi-bin/wwwnikki.cgi/mem_kako.html]のように過去ログが15日ずつ表示される物が良いのですが、なかなか見つかりません。例に挙げたスクリプトを「最新の1件のみ表示」という風に改造出来れば一番良いのですが、どなかたご教授頂けませんでしょうか。ちなみに、このスクリプトは[http://www.ausystem.org/~aushacho/dl/14.html]で配布されております。

●質問者: cocoro
●カテゴリ:コンピュータ 芸術・文化・歴史
✍キーワード:CGI PHP スクリプト 教授 理想
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● sasada
●10ポイント

http://www.prettybook.com/cgirm/dia_sct/pmdiary.html

>◎過去ログ機能を設定できます

>M*Diaryの過去ログファイル(datファイル)をhtmlに変換するためのスクリプト

カスタマイズすれば、お尋ねの機能が実現できるかもしれません。

下記URLは、サンプルです

http://www.prettybook.com/cgi_dia/pmdiary/pmdiary.cgi

http://www2s.biglobe.ne.jp/~hiroP-Is/script/

HI NOTES -CGI SCRIPT-

>Diary 1.5a 日記帳 フリーソフトウエア

これも、いい線一定いると思います。

下記URLは、サンプルです

http://www2s.biglobe.ne.jp/~hiroP-Is/cgi-bin/sample/diary.cgi

日記帳

お尋ねのCGIの改造は、理屈は難しくなさそうですが、あちこち修正する必要がありそうです。

クールな方法が有ると良いのですけど、まだ思いつきません。


2 ● sasada
●40ポイント

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やってみます

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ