writebackプラグインにタイムスタンプ機能を追加

2005/04/05 Tue 12:54

コメント/トラックバック処理用に使っているRael作のwritebackプラグインが、コメント/トラックバックのタイムスタンプを付けてくれないのが不満だったんですが、付けてみようとしたらあっさり付いてしまったので報告を。すでに他のよさげなプラグインがあるのかもしれないけど。

以下、plugins/writebackの差分です。行頭に - が付いてる行は削除行、+ が付いてる行は追加行です。まずは138行目付近から。

    if ( $fh->open(">> $writeback_dir$path/$fn.$file_extension") ) {
      foreach ( @fields ) {
        my $tmp = param($_);
        $tmp =~ s/<.*?>//mg; # a gross way to prevent tomfoolery, to be redone
        $tmp =~ s/\r?\n\r?/\r/mg;
        my $p = jcode($tmp)->h2z->$blosxom::charcode; # Japanesize
        print $fh "$_: $p\n";
      }
+     print $fh 'time: '. time. "\n"; # cu39 add [timestamp].
      print $fh "-----\n";
      $fh->close();

次は180行目付近。

  if ( $fh->open("$writeback_dir$path/$filename.$file_extension") ) {
    foreach my $line (<$fh>) {
      $line =~ /^(.+?):\s*(.*)$/ and $param{$1} = $2;
      # cu39 add [timestamp] begin.
      if (defined $param{time}) {
        @tmp = localtime($param{'time'});
        @wday = ('Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun');
        $tmp[4]++; $tmp[5]+=1900;
        $param{date} = $tmp[5].'/'.$tmp[4].'/'.$tmp[3].' '.$wday[$tmp[6]].' '.$tmp[2].':'.$tmp[1].':'.$tmp[0];
      } else {
        $param{date} = 'n/a';
      }
      # cu39 add [timestamp] end.
      if ( $line =~ /^-----$/ ) {

-       my $writeback = &$blosxom::template($path,'writeback',$blosxom::flavour) || '<p><b>Name/Blog:</b> $writeback::name$writeback::blog_name<br /><b>URL:</b> $writeback::url<br /><b>Title:</b> $writeback::title<br /><b>Comment/Excerpt:</b> $writeback::comment$writeback::excerpt</p>';
+       # cu39 del [timestamp] begin.
+       # my $writeback = &$blosxom::template($path,'writeback',$blosxom::flavour) || '<p><b>Name/Blog:</b> $writeback::name$writeback::blog_name<br /><b>URL:</b> $writeback::url<br /><b>Title:</b> $writeback::title<br /><b>Comment/Excerpt:</b> $writeback::comment$writeback::excerpt</p>';
+       # cu39 del [timestamp] end.
+       # cu39 add [timestamp] begin.
+       my $writeback = &$blosxom::template($path,'writeback',$blosxom::flavour) || '<p><b>Name/Blog:</b> $writeback::name$writeback::blog_name<br /><b>URL:</b> $writeback::url<br /><b>Date:</b> $writeback::date<br /><b>Title:</b> $writeback::title<br /><b>Comment/Excerpt:</b> $writeback::comment$writeback::excerpt</p>';
+       # cu39 add [timestamp] end.
        $writeback =~ s/\$writeback::(\w+)/$param{$1}/ge;
        $writebacks .= $writeback;
        $count++;
      }
    }

  }

writebackの差分は以上です。この差分を導入した後、writeback.htmlなどのフレーバーに$writeback::dateと記入すると「yyyy/mm/dd wday hh:mm:ss」という形式のタイムスタンプ文字列に変換されます。また、この差分を導入する以前に記録されたコメント/トラックバックについては「n/a」の文字列が入ります。これらの文字列の内容やフォーマットを変更したい場合は該当部分をいじってください(ブロッサマー式の説明)。

追記:うーん、IEとFirefoxでpreのword-breakが効かない……おかしいなぁ。このままでは他のエントリがやたら見づらいので、近々何らかの対応をします。NetscapeとOperaでは畳まれてる模様。

追記:IEやFirefoxだとボックス幅をピクセル指定等の固定幅にするとpreのword-breakが効くらしいことが判明。比率指定では効かないのか。固定幅ねぇ……抵抗あるなぁ。ひとまず固定幅にしておきますが、なんとか別な方法を模索したいところ。

Posted at 12:54 | Blosxom | 0 writebacks | edit
Tagged as: ,

writebacks

trackback URI

http://cu39.s57.xrea.com/blosxom/20050405_wbtimestamp.trackback


SPAM ロボットを排除するため文字判読テストをお願いしています。画像に書いてある2つの単語を入力してください。単語の間には半角スペースを入れます。