# Blosxom Plugin: lamitap # Author: KITAMURA Akatsuki <kits@akatsukinishisu.net> # Version: 2004-10-01 # Blosxom Home/Docs/Licensing: http://www.blosxom.com/ # This script is encoded in UTF-8. package lamitap; use strict; # --- Configurable variables ----------- # Last-Modifiedを出力ã™ã‚‹ãƒ•ãƒ¬ãƒ¼ãƒãƒ¼ï¼ˆæ£è¦è¡¨ç¾ï¼‰ my $flavour_re = q{^(?:html?|rss)$}; # writebackã®ãƒ‡ãƒ¼ã‚¿ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒª # writebackを使ã£ã¦ã„ãªã‘ã‚Œã°ç©ºæ–‡å—列ã«ã™ã‚‹ã€‚ my $wb_dir = "$blosxom::plugin_state_dir/writebacks"; # writebackã®ãƒ‡ãƒ¼ã‚¿ãƒ•ã‚¡ã‚¤ãƒ«ã®æ‹¡å¼µå my $wb_ext = "wb"; # テンプレートã¨ãƒ—ラグインã®æ›´æ–°ã‚’åæ˜ : # ã™ã‚‹ => 1, ã—ãªã„ => 0 my $check_template_and_plugin = 1; # --- Plug-in package variables -------- use vars qw($mtime); # -------------------------------------- use CGI qw(:standard); use File::stat; use HTTP::Date; sub start { return 0 if ($ENV{QUERY_STRING}); return 0 if ($blosxom::path_info_yr); return ($blosxom::flavour =~ /$flavour_re/o) ? 1 : 0; } sub filter { # my ($pkg, $files_ref, $others_ref) = @_; my $files_ref = $_[1]; # 検索対象ã¨ãªã‚‹ãƒ‘スå my $search_path = "$blosxom::datadir/$blosxom::path_info"; $search_path =~ s/\.$blosxom::flavour$/\\\.$blosxom::file_extension\$/; # 対象ã¨ãªã‚‹ã‚¨ãƒ³ãƒˆãƒªãƒ•ã‚¡ã‚¤ãƒ« my @files = sort {$$files_ref{$b} <=> $$files_ref{$a}} grep {/^$search_path/ && -f} keys %$files_ref; splice @files, $blosxom::num_entries; # writebackファイル(ã‚ã‚Œã°ï¼‰ã‚’対象ã«è¿½åŠ if ($wb_dir) { my @wb_files = grep {-f} map { &entry2wb($_) } @files; push @files, @wb_files; } if ($check_template_and_plugin) { # テンプレートを対象ã«è¿½åŠ # ($datadir直下ã«ã‚ã‚Šã€æ‹¡å¼µåãŒ$blosxom::flavourã®ã‚‚ã®ï¼‰ if (opendir TMPL, $blosxom::datadir) { my @tmpl_files = grep {/\.$blosxom::flavour$/ && -f} map {"$blosxom::datadir/$_"} readdir TMPL; closedir TMPL; push @files, @tmpl_files; } # プラグインを対象ã«è¿½åŠ my @plug_files = grep {-f} map {"$blosxom::plugin_dir/$_"} @blosxom::plugins; push @files, @plug_files; } # 対象ファイルã®æ›´æ–°æ™‚間を走査 $mtime = 0; foreach (@files) { my $fmt = stat($_)->mtime; $mtime = $fmt if ($fmt > $mtime); } 1; } sub skip { # Las-Modifiedヘッダをè¨å®š $blosxom::header->{-Last_modified} = time2str($mtime); # If-Modified-SinceãŒç„¡ã‹ã£ãŸã‚‰çµ‚了 my $since = $ENV{HTTP_IF_MODIFIED_SINCE} or return 0; # IEã®"Fri, 03 Sep 2004 19:54:17 GMT; length=55438"ã¨ã„ã†ãƒ˜ãƒƒãƒ€ã«å¯¾å¿œ $since =~ s/;.*$//; # $mtimeã®æ–¹ãŒå¤§ã(新ã—)ã‹ã£ãŸã‚‰çµ‚了 return 0 if ($mtime > str2time($since)); # 変更無ã—ã®ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ã‚’è¨å®š $blosxom::header->{-status} = '304 Not Modified'; # 残りã®å‡¦ç†ã‚’スã‚ップ 1; } # エントリファイルåã‚’writebackファイルåã«å¤‰æ› sub entry2wb{ my $fn = $_[0]; $fn =~ s/^$blosxom::datadir/$wb_dir/; $fn =~ s/$blosxom::file_extension$/$wb_ext/; return $fn; } 1; __END__ =head1 NAME Blosxom Plug-in: lamitap - Last-Modified including template and plugin =head1 SYNOPSIS ã“ã®ãƒ—ラグイン㯠Kyo Nagashimaã•ã‚“ã®last_modifiedプラグインを å…ƒã«ä½œæˆã•ã‚Œã¾ã—ãŸã€‚ スクリプトã®æµã‚Œã‚’変更ã—ã€ãƒ†ãƒ³ãƒ—レートファイルã¨ãƒ—ラグインファイル㮠更新時刻をåæ˜ ã™ã‚‹æ©Ÿèƒ½ã‚’ä»˜åŠ ã—ã¦ã„ã¾ã™ã€‚ ã¡ãªã¿ã«lamitapã¨ã„ã†ã®ã¯ LAst Modified Including Template And Plugin ã®ç•¥ã§ã™ã€‚超é©å½“。 =head1 VERSION 2004-10-01 =head1 AUTHOR 北æ‘曉 (KITAMURA Akatsuki) <kits@akatsukinishisu.net>, http://www.akatsukinishisu.net/ å…ƒã¨ãªã£ãŸlast_modifiedプラグイン㯠Kyo Nagashimaã•ã‚“ã«ã‚ˆã‚Šä½œæˆã•ã‚Œã¾ã—ãŸã€‚ =head1 SEE ALSO Blosxom Home/Docs/Licensing: http://www.blosxom.com/ Blosxom Plugin Docs: http://www.blosxom.com/plugins/ last_modified plugin: http://hail2u.net/blog/blosxom/last_modified_plugin.html モジュール版PHPã§ã€ŒIf-Modified-Sinceã€ã«å¯¾å¿œã™ã‚‹: http://www.arielworks.net/articles/2004/0125a/ lastmodified plugin: http://www.blosxom.com/plugins/headers/lastmodified.htm