[첫화면으로]UseModWiki소스수정/페이지카운터

마지막으로 [b]

페이지 별로 조회수 출력

config.pl 에 카운터 화일들이 저장될 디렉토리를 지정한다.
$CountDir    = "$DataDir/count";  # by gypark. Stores view-counts

wiki.pl
...
###############
### added by gypark
### 패치를 위해 추가된 환경설정 변수
use vars qw(
    $UserGotoBar $UserGotoBar2 $UserGotoBar3 $UserGotoBar4
    ...
    $LogoPage $CheckTime $LinkDir $IconDir $CountDir        # $CountDir 추가
    );
###
###############
...
###############
### added by gypark
### 패치를 위해 추가된 내부 전역 변수
use vars qw(%RevisionTs $FS_lt $FS_gt $StartTime $Sec_Revision $Sec_Ts
    $ViewCount);                            # ViewCount 변수 추가
###
###############
...

sub BrowsePage {
    my ($id) = @_;
    my ($fullHtml, $oldId, $allDiff, $showDiff, $openKept);
    my ($revision, $goodRevision, $diffRevision, $newText);

    &OpenPage($id);
    &OpenDefaultText();
###############
### added by gypark
### page count
    if (-f &GetPageFile($id)) {
        $ViewCount = &GetPageCount($id) if (-f &GetPageFile($id));
    }
###
###############
    $openKept = 0;
    ...
}

sub GetEditGuide {
    ...
    if ($UseDiff) {
        $result .= ' ' . &ScriptLinkDiff(4, $id, T('(diff)'), $rev);
    }

    $result .= '<br>';
###############
### added by gypark
### page count
    $result .= Ts('%s hit' . (($ViewCount > 1)?'s':'') , $ViewCount)." | " if ($ViewCount ne "");
###
###############
    $result .= &GetHistoryLink($id, T('History'));
    if ($rev ne '') {
    ...
}

sub DeletePage {
    ...
### cache 화일도 같이 삭제
    &UnlinkHtmlCache($page);
### page count 화일도 같이 삭제  (추가할 단락)
    $fname = &GetCountFile($page);
    unlink ($fname) if (-f $fname);
###
    ...
}

sub RenamePage {
    ...
### cache 화일은 삭제
    &UnlinkHtmlCache($old);
### page count 화일도 변경  (추가할 단락)
    my ($oldcnt, $newcnt);
    $oldcnt = &GetCountFile($old);
    if (-f $oldcnt) {
        $newcnt = &GetCountFile($new);
        &CreatePageDir($CountDir, $new);  # It might not exist yet
        rename($oldcnt, $newcnt) || die "error while renaming count file";
    }
###
    ...
}

### 아래 두 함수를 추가
sub GetCountFile {
    my ($id) = @_;

    return $CountDir . "/" . &GetPageDirectory($id) . "/$id.cnt";
}

sub GetPageCount {
    my ($id) = @_;
    my ($pagecount, $countfile, $status);
    my ($edit_user, $edit_ip, $view_user, $view_ip, $add)
        = ($Section{'username'}, $Section{'ip'},
            &GetParam('username', ""), $ENV{REMOTE_ADDR}, 0);

    # 카운트 읽어옴
    &CreatePageDir($CountDir, $id);
    $countfile = &GetCountFile($id);
    ($status, $pagecount) = &ReadFile($countfile);
    $pagecount = 0 if ($status == 0);

    # 카운트 갱신 여부 결정
    if ($view_user eq "") {
        if ($edit_ip ne $view_ip) {
            $add = 1;
        }
    } elsif ($edit_user ne $view_user) {
        $add = 1;
    }
    if (&GetParam('InFrame',"") ne "") {
        $add = 0;
    }
    $pagecount += $add;

    # 카운트 기록
    if ($add == 1) {
        &RequestLockDir('count', 1, 1, 0) || return $pagecount;
        &WriteStringToFile($countfile, $pagecount);
        &ReleaseLockDir('count');
    }
    return $pagecount;
}
### 통채로 추가한 함수들의 끝
###############

&DoWikiRequest()  if ($RunCGI && ($_ ne 'nocgi'));   # Do everything.
1; # In case we are loaded from elsewhere
# == End of UseModWiki script. ===========================================

action=maintain 을 하면, 현재 조회수 화일이 만들어지지 않은 페이지들에 대해 조회수를 "0"으로 세팅해준다.
sub DoMaintain {
    ...
    foreach $name (&AllPagesList()) {
        &OpenPage($name);
        &OpenDefaultText();
        &ExpireKeepFile();
###############
### added by gypark
### 링크 목록을 별도로 관리
        &SaveLinkFile($name);
### page count                         (추가할 단락)
        if (!(-f &GetCountFile($name))) {
            &CreatePageDir($CountDir, $name);  # It might not exist yet
            &WriteStringToFile(&GetCountFile($name), "0");
        }
###
###############
        print ".... "  if ($name =~ m|/|);
        print &GetPageLink($name), "<br>\n";
    }
    ...
}

Notes

번역 화일에서 "15 hits" 를 "조회수 : 15" 같이 순서를 바꾸는 것을 위해서... T('hits') 를 Ts('%s hits', $ViewCount) 로 바꿨습니다.
-- Raymundo 2003-3-7 11:23 pm

조회수가 0 또는 1일 때는 hits 대신 hit 라고 나오게 다시 고쳤습니다.
    $result .= Ts('%s hit' . (($ViewCount > 1)?'s':'') , $ViewCount)." | " if ($ViewCount ne "");
-- Raymundo 2003-3-8 9:27 am


위키위키분류

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