- 페이지들을 조회수에 의해 정렬하여 출력하는 매크로
- 사용법 : <mostpopular(시작순위,끝순위)>
- 시작순위와 끝순위는 0 이 아닌 정수로 주어야 한다.
- 1 은 가장 조회수가 높은 페이지, 2 는 두번째로 높은 페이지, -1 은 가장 낮은 페이지, -2 는 두번째로 낮은 페이지...
- 시작순위 또는 끝순위가 전체 페이지 갯수의 범위를 넘어설 경우에는 전체 페이지를 출력한다.
- 예
- (1,10) - 조회수 1위부터 10위까지 조회수의 내림차순 정렬
- (10,1) - 조회수 1위부터 10위까지 조회수의 올림차순 정렬
- (-1,-10) - 조회수 꼴등부터 끝에서 10등까지 조회수의 올림차순 정렬
- (-10,-1) - 조회수 끝에서 10등부터 꼴등까지 조회수의 내림차순 정렬
- MostPopular 참조
- wiki.pl
sub MacroSubst {
...
$txt =~ s/(\&__LT__;mostpopular\(([-+]?\d+),([-+]?\d+)\)\&__GT__;)/&MacroMostPopular($1,$2, $3)/gei;
return $txt;
}
- 다음 함수를 통채로 추가
- 아래에 보면 "$#pages ... " 로 된 부분이 # 이후부터 주석인 것처럼 표시되어 있는데.. 주석이 아니니 반드시 입력해 주어야 한다
sub MacroMostPopular {
my ($itself, $start, $end) = (@_);
my (%pgcount, $page, $countfile, $status, $count, @pages);
my $txt;
if (($start == 0) || ($end == 0)) { return $itself; }
foreach $page (&AllPagesList()) {
$countfile = &GetCountFile($page);
($status, $count) = &ReadFile($countfile);
if ($status) {
$pgcount{$page} = $count;
} else {
$pgcount{$page} = 0;
}
}
@pages = sort {
$pgcount{$b} <=> $pgcount{$a}
||
$a cmp $b
} keys %pgcount;
if ($start > 0) {
$start--;
} else {
$start = $#pages + $start + 1;
}
if ($end > 0) {
$end--;
} else {
$end = $#pages + $end + 1;
}
$start = 0 if ($start < 0);
$start = $#pages if ($start > $#pages);
$end = 0 if ($end < 0);
$end = $#pages if ($end > $#pages);
if ($start <= $end) {
@pages = @pages[$start .. $end];
} else {
@pages = reverse(@pages[$end .. $start]);
}
foreach $page (@pages) {
$txt .= ".... " if ($page =~ m|/|);
$txt .= &GetPageLink($page) .
" (".Ts('%s hit'.(($pgcount{$page}>1)?'s':''), $pgcount{$page}) . ")<br>";
}
return $txt;
}
Notes
패치를 적용한 직후에 한 번도 카운터가 증가하지 않아 카운터 저장 화일이 만들어지지 않은 페이지의 경우 제대로 소팅되지 않는 것을 발견했습니다. 변경내역을 보면서 수정하세요.
위키위키분류