[첫화면으로]UseModWiki소스수정/역링크

마지막으로 [b]

1. 페이지 제목을 클릭했을때 진정한 의미의 역링크 출력
1.1. wiki.pl 수정
1.1.1. ext1.109a 에서 필요없게 된 부분
1.2. action/reverse.pl 추가
1.3. 추가 업데이트 내역
1.4. 사용자 의견

1. 페이지 제목을 클릭했을때 진정한 의미의 역링크 출력

1.1. wiki.pl 수정

sub GetHeader {
    ...
### 다음 라인을 교체
#       $result .= $q->h1(&GetSearchLink($id));             # 원래 코드
#       $result .= $q->h1($header . &GetSearchLink($id));   # "사이트 로고" 관련해서 패치했던 코드
        $result .= $q->h1($header . &GetReverseLink($id));  # 이것이 최종 코드
###
    ...
}

### 다음 함수를 통채로 추가
sub GetReverseLink {
    my ($id) = @_;
    my $name = $id;

    if ($FreeLinks) {
        $name =~ s/_/ /g;  # Display with spaces
    }
    return &ScriptLink("action=reverse&id=$id", $name);
}

# 다시 한 번 말하지만, 위의 "GetFullLinkList 함수에 파라메터 사용을 가능하게 함" 패치가 적용된 상태여야 한다.
sub GetFullLinkList {
    ...
### 다음 라인 교체
#   my ($name, $unique, $sort, $exists, $empty, $link, $search);
    my ($name, $unique, $sort, $exists, $empty, $link, $search, $reverse);
###
    my ($pagelink, $interlink, $urllink);
    ...
    $search = &GetParam("search", $args{"search"});
### 다음 라인 추가
    $reverse = &GetParam("reverse", $args{"reverse"});
###
    ...
            if (($search ne "") && !($link =~ /$search/)) {
                next;
            }
### 다음 단락 추가
            if ($reverse ne "") {
                my ($mainpage, $subpage) = ("", "");
                if ($reverse =~ /(.+)\/(.+)/) {
                    ($mainpage, $subpage) = ($1, $2);
                }
                if (!((split('/',$name))[0] eq $mainpage && $link eq "\/$subpage") && !($link eq $reverse)) {
                    next;
                }
            }

### 여기까지
            push(@newlinks, $link);
    ...
}

1.1.1. ext1.109a 에서 필요없게 된 부분

아래 내용은 위키 소스에서 다시 제거해도 되고, 귀찮으면 그냥 놔둬도 상관은 없습니다.

sub DoOtherRequest {
    ...
    $search = &GetParam("search", "");
    if (($search ne "") || (&GetParam("dosearch", "") ne "")) {
        &DoSearch($search);
        return;
    }
### 다음 단락 추가
    $search = &GetParam("reverse", "");
    if ($search ne "") {
        &DoReverse($search);
        return;
    }
### 여기까지
    # Handle posted pages
    if (&GetParam("oldtime", "") ne "") {
    ...
}

기존에 wiki.pl 에 추가했던 DoReverse 함수는 아래 action/reverse.pl 로 옮김.

1.2. action/reverse.pl 추가

기존에 있던 DoReverse 함수에서, 다음 세 줄만 수정해 주면 됩니다.

# 다음 함수를 통채로 추가
sub action_reverse {
    my ($string) = &GetParam('id');

    my @x = ();
    my $pagelines;

    if ($string eq '') {
        &DoIndex();
        return;
    }
    print &GetHeader('', &QuoteHtml(Ts('Links to %s', $string)), '');
    print '<br>';

    foreach $pagelines (&GetFullLinkList("page=1&inter=1&unique=1&sort=1&exists=2&empty=0&reverse=$string")) {
        my @pages = split(' ', $pagelines);
        @x = (@x, shift(@pages));
    }

    &PrintPageList(@x);

    if ($#x eq -1) {
        print T('No reverse link.') . "<br>";
    }
    if (&ValidId($string) eq "") {
        print "<hr size=\"1\">";
        print Ts('Return to %s' , &GetPageLink($string)) . "<br>";
    }

    print &GetCommonFooter();
}

1;

1.3. 추가 업데이트 내역

GetFullLinkList 에서 파라메터의 기본값을 어떻게 주느냐에 따라서 역링크 탐색 결과가 잘못 나오는 것을 발견하였다. 아래와 같이 모든 파라메터를 명시하여 해결할 수 있음.
sub DoReverse {
    ...
#    foreach $pagelines (&GetFullLinkList("sort=1&reverse=$string")) {  이 줄을 아래와 같이 변경
    foreach $pagelines (&GetFullLinkList("page=1&unique=1&sort=1&exists=2&empty=0&reverse=$string")) {
    ...
}
-- Raymundo 2003-2-24 1:32 pm

/UploadedFiles매크로 에서 필요성을 느껴서, 역링크를 찾는 대상으로 위키페이지 외에 인터링크의 역링크도 찾을 수 있도록 수정했습니다. sub DoReverse 함수가 약간 바뀌었습니다.

-- Raymundo 2003-3-16 7:37 pm

ext1.109a

1.4. 사용자 의견

역링크가 불여우에선 괜찮은데, IE에선 글자가 깨지는군요.

-- Nyxity 2007-2-13 1:34 pm

바벨에는 ext1.109a 역링크 패치가 적용이 안 되어 있네요 ^^ 그래서 그렇습니다.
-- Raymundo 2007-2-13 1:41 pm

음. 이 곳에 있는 내용은 패치를 한것 같은데. DoReverse 함수를 지워야 하는 건가요? 근데 지우면 역링크에서 에러가 나는 걸 보면 외부로 빼낸 함수를 제대로 불러오지 못하는 것 같아요.
-- Nyxity 2007-2-13 2:05 pm

으윽 죄송합니다. 패치 내용을 위키에 적을 때 삐끗했었네요.
sub GetReverseLink <-- 이 함수는 지워도 되는게 아니었고요, 그대로 남기는데 return 뒤의 부분이 달라졌습니다. wiki.pl 에 있는 DoReverse 는 지워도 되는데, sub GetReverseLink 함수는 통채로 (위에 고친 걸 올렸으니 그대로 복사하셔도 됨) 넣어주시면 될 겁니다.
-- Raymundo 2007-2-13 2:47 pm

와 고쳐졌습니다. 수고하셨어요.
-- Nyxity 2007-2-13 3:15 pm

거 희한하게...

한동안 역링크 기능을 사용하지 않다가 간만에 하면 마치 전체 링크를 새로 갱신하는 것처럼 십수초의 시간이 걸린다. 그 이후 다시 역링크를 사용하면 그때는 2~3초만에 끝. 링크를 파일로 저장하는 건 페이지가 수정될 때마다 항상 수행되는데 어째서 그럴까...

-- Raymundo 2008-1-25 10:12 pm

설마... 1500여개의 링크 정보 파일만을 읽는데도 십수초가 걸리는 게 맞고, 이후에 시간이 짧게 걸리는 건 서버 메모리에 캐시되어서 요행이 빨라지는 건지도...

-- Raymundo 2008-1-25 10:14 pm
이름:  
Homepage:
내용:
 

위키위키분류

마지막 편집일: 2008-1-25 10:14 pm (변경사항 [d])
1158 hits | Permalink | 변경내역 보기 [h] | 페이지 소스 보기