############################################################################### # #

アクセス数の多い順にページ名を一覧表示します。

#

引数で表示件数,日数を指定できます。

#
# {{access2 5,10}}
# 
#

サイドバーに入れる場合など、縦に表示することもできます。

#
# {{access2 5,10,v}}
# 
# ############################################################################### package plugin::access::Access2; use strict; use HTTP::Date; #============================================================================== # コンストラクタ #============================================================================== sub new { my $class = shift; my $self = {}; return bless $self,$class; } #============================================================================== # パラグラフ関数 #============================================================================== sub paragraph { my $self = shift; my $wiki = shift; my $max = shift; my $days = shift; my $way = shift; if ($way eq "") { $way = "H"; } if ($max eq "V" || $max eq "v") { $way = "V"; $max = ""; } elsif ($max eq "H" || $max eq "h") { $way = "H"; $max = ""; } if ($days eq "") { $days = 1; } my ($line,%count); my $now = time2str(); $now = str2time($now); my @lines; my $i = 0; open(LOG,$wiki->config('log_dir')."/".$wiki->config('access_log_file')) or return ""; while (my $line=) { chomp $line; $lines[$i++] = $line; } close(LOG); while (my $line = pop(@lines)){ # foreach my $line (reverse @lines){ my ($page,$date) = split(/ /,$line); $page = Util::url_decode($page); $date = str2time($date); if(($now - $date) > 60 * 60 * 24 * $days){ last; } # 削除されたページと参照権限のないページを省く # next if (!$wiki->page_exists($page) || !$wiki->can_show($page) || $page eq "FrontPage"); next if (!$wiki->page_exists($page) || !$wiki->can_show($page)); $count{$page}++; } my @keys; foreach (keys(%count)) { push(@keys,$_); } @keys = sort { my $count1 = $count{$a}; my $count2 = $count{$b}; return $count2<=>$count1; } @keys; my $flag = 0; my $ret = ""; foreach (@keys) { if ($max ne "" && $flag==$max) { last; } if ($wiki->page_exists($_) && $wiki->can_show($_)) { if ($way eq "H" || $way eq "h") { if ($flag!=0) { $ret = $ret." / "; } } else { $ret = $ret."*"; } $ret = $ret."[[$_]] (".$count{$_}.")"; # $ret = $ret."[[$_]]"; $flag++; if ($way ne "H" && $way ne "h") { $ret .= "\n\n"; } } } return $ret; } 1;