ページ毎のアクセス数をカウントし、記録します。
- 2003-08-28 (Thu) 09:27:44 当日のアクセス数を表示できるように改良
- 2004-04-14 (Wed) 00:23:35 昨日のアクセス数を表示できるように改良
[page access counter]
アクセス数はこのように表示されます。
関連するカスタマイズ
汎用サブルーチン の format_time()
resource.txtへの追加
total | 合計 |
グローバル変数定義
my $AccessCounts = 'AccessCounts'; # yakty add [page access counter]
my $ignore_access_interval = 1*60*60*24; # yakty add [page acesss counter]
# yakty add [page access counter] start my $info_AccessCount = 'AccessCount'; my $info_AccessToday = 'AccessToday'; my $info_AccessYesterday = 'AccessYesterday'; my $info_AccessTimeStamp = 'AccessTimeStamp'; my $info_AccessRemoteAddr = 'AccessRemoteAddr'; my $info_AccessReferer = 'AccessReferer'; # yakty add [page access counter] end
%fixedpage への追加
my %fixedpage = ( $IndexPage => 1, $CreatePage => 1, $ErrorPage => 1, $RssPage => 1, $RecentChanges => 1, $SearchPage => 1, $AdminChangePassword => 1, $CompletedSuccessfully => 1, $FrontPage => 1, $AccessCounts => 1, # yakty add [page access counter] );
%page_command への追加
my %page_command = ( $IndexPage => 'index', $SearchPage => 'searchform', $CreatePage => 'create', $RssPage => 'rss', $AdminChangePassword => 'adminchangepasswordform', $FrontPage => 'FrontPage', $AccessCounts => 'counter', # yakty add [page access counter] );
%command_do への追加
my %command_do = ( read => \&do_read, edit => \&do_edit, adminedit => \&do_adminedit, adminchangepasswordform => \&do_adminchangepasswordform, adminchangepassword => \&do_adminchangepassword, write => \&do_write, index => \&do_index, searchform => \&do_searchform, search => \&do_search, create => \&do_create, createresult => \&do_createresult, FrontPage => \&do_FrontPage, comment => \&do_comment, rss => \&do_rss, diff => \&do_diff, interwikibox => \&do_interwiki_box, # Walrus add [InterWikiBox] counter => \&do_counterpage, # yakty add [page access counter] );
update_accesscounts()追加
- 2003-08-28 (Thu) 13:21:27 WikiNameが有効な場合に存在しないページがカウントされてしまうのを抑制
# yakty add [page access counter] start sub update_accesscounts { return if(&valid_password($form{mypassword})); return unless(&is_exist_page($form{mypage}) or $fixedpage{$form{mypage}}); my $timestamp = &get_info($form{mypage}, $info_AccessTimeStamp); return if(time - $timestamp <= $ignore_access_interval and length($ENV{REMOTE_ADDR}) > 0 and $ENV{REMOTE_ADDR} eq &get_info($form{mypage}, $info_AccessRemoteAddr)); # total count my $count = 0 + &get_info($form{mypage}, $info_AccessCount); $count++; # today's count my $datetime = &get_now; $datetime =~ /^(\d\d\d\d\-\d\d\-\d\d)/; my $today = $1; $datetime = &format_time(gmtime(time - 24*60*60 + $modifier_time_offset)); $datetime =~ /^(\d\d\d\d\-\d\d\-\d\d)/; my $yesterday = $1; my $lastaccess = &format_time(gmtime($timestamp + $modifier_time_offset)); my $todayscount = 0; my $yesterdayscount = -1; if($lastaccess =~ /^\Q$today\E/){ $todayscount = &get_info($form{mypage}, $info_AccessToday); } elsif($lastaccess =~ /^\Q$yesterday\E/){ $yesterdayscount = &get_info($form{mypage}, $info_AccessToday); } else { $yesterdayscount = 0; } $todayscount++; &set_info($form{mypage}, $info_AccessYesterday, $yesterdayscount) if($yesterdayscount >= 0); &set_info($form{mypage}, $info_AccessCount, $count); &set_info($form{mypage}, $info_AccessToday, $todayscount); &set_info($form{mypage}, $info_AccessRemoteAddr, $ENV{REMOTE_ADDR}); &set_info($form{mypage}, $info_AccessTimeStamp, time); &set_info($form{mypage}, $info_AccessReferer, $ENV{HTTP_REFERER}); } # yakty add [page access counter] end
do_counterpage()追加
- 2003-08-28 (Thu) 13:15:40 RecentChangesは表示しないように変更
# yakty add [page access counter] start sub do_counterpage { my @data; my $total = 0; my $todaystotal = 0; my $yesterdaystotal = 0; my $datetime = &get_now; $datetime =~ /^(\d\d\d\d\-\d\d\-\d\d)/; my $today = $1; $datetime = &format_time(gmtime(time - 24*60*60 + $modifier_time_offset)); $datetime =~ /^(\d\d\d\d\-\d\d\-\d\d)/; my $yesterday = $1; foreach my $name (keys %infobase){ next if($name eq $RecentChanges); my $count = 0 + &get_info($name, $info_AccessCount); next if($count == 0); my $referer = &get_info($name, $info_AccessReferer); my $timestamp = &get_info($name, $info_AccessTimeStamp); my $lastaccess = &format_time(gmtime($timestamp + $modifier_time_offset)); #my $todayscount = ($lastaccess =~ /^\Q$today\E/) ? 0 + &get_info($name, $info_AccessToday) : 0; my $todayscount = 0; my $yesterdayscount = 0; if($lastaccess =~ /^\Q$today\E/){ $todayscount = 0 + &get_info($name, $info_AccessToday); $yesterdayscount = 0 + &get_info($name, $info_AccessYesterday); } elsif($lastaccess =~ /^\Q$yesterday\E/){ $yesterdayscount = 0 + &get_info($name, $info_AccessToday); } push(@data, { page => $name, count => $count, referer => $referer, timestamp => $timestamp, lastaccess => $lastaccess, todayscount => $todayscount, yesterdayscount => $yesterdayscount, }); $total += $count; $todaystotal += $todayscount; $yesterdaystotal += $yesterdayscount; } my @counts; foreach my $ref (sort {$b->{count} <=> $a->{count} or $a->{page} cmp $b->{page}} @data){ #my $text = ",@{[&armor_name($ref->{page})]}, $ref->{count}"; my $text = qq(,"@{[&armor_name($ref->{page})]}", $ref->{todayscount}, $ref->{yesterdayscount}, $ref->{count}, $ref->{lastaccess}); #$text .= ",@{[&format_time(gmtime($ref->{timestamp} + $modifier_time_offset))]}"; if(&valid_password($form{mypassword})){ $text .= qq(,"@{[&escape($ref->{referer})]}"); } push(@counts, $text); } push(@counts, ",$resource{total}, $todaystotal, $yesterdaystotal, $total"); &print_header($AccessCounts); &print_content(join("\n", @counts)); &print_footer($AccessCounts); } # yakty add [page access counter] end
do_read()内の変更
&update_accesscounts if($form{mycmd} eq 'read'); # yakty add [page access counter] &print_header($form{mypage}); &print_content($database{$form{mypage}}); &print_footer($form{mypage});
print_footer()内の変更
sub print_footer { my ($page) = @_; # Walrus add [modify footer] start $walrus_log = &make_log; # Walrus add [for debug] my $mod_info = $modifier_name ? qq(Modified by <a href="$modifier_url">$modifier_name</a>.) : ''; # yakty add [page access counter] start my $count = 0 + &get_info($form{mypage}, $info_AccessCount); my $counter; if($count > 0){ $counter = qq(<div class="counter">@{[sprintf("%05d", $count)]}</div>); } # yakty add [page access counter] end print <<"EOD"; <hr /> <address class="footer"> <a href="http://digit.que.ne.jp/work/">WalWiki</a> $walversion © 2000-2002 by <a href="http://digit.que.ne.jp/">Makio Tsukamoto</a>.<br /> based on <a href="http://www.hyuki.com/yukiwiki/">YukiWiki</a> $version © 2000-2002 by <a href="http://www.hyuki.com/">Hiroshi Yuki</a>.<br /> $mod_info </address> <p class="footer"> <a href="http://digit.que.ne.jp/work/">$icontag</a> $counter<!-- yakty add [page access counter] --> </p>