[첫화면으로]UseModWiki소스수정/MostPopular매크로

마지막으로 [b]

MostPopular 매크로

wiki.pl
sub MacroSubst {
    ...
### <MostPopular(시작, 갯수)>
    $txt =~ s/(\&__LT__;mostpopular\(([-+]?\d+),([-+]?\d+)\)\&__GT__;)/&MacroMostPopular($1,$2, $3)/gei;
###
###############
    return $txt;
}

다음 함수를 통채로 추가
아래에 보면 "$#pages ... " 로 된 부분이 # 이후부터 주석인 것처럼 표시되어 있는데.. 주석이 아니니 반드시 입력해 주어야 한다
### MostPopular
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

패치를 적용한 직후에 한 번도 카운터가 증가하지 않아 카운터 저장 화일이 만들어지지 않은 페이지의 경우 제대로 소팅되지 않는 것을 발견했습니다. 변경내역을 보면서 수정하세요.
-- Raymundo 2003-4-7 4:44 pm


위키위키분류

마지막 편집일: 2007-1-8 12:19 pm (변경사항 [d])
1444 hits | Permalink | 변경내역 보기 [h] | 페이지 소스 보기