-
- 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($header . &GetReverseLink($id));
...
}
sub GetReverseLink {
my ($id) = @_;
my $name = $id;
if ($FreeLinks) {
$name =~ s/_/ /g;
}
return &ScriptLink("action=reverse&id=$id", $name);
}
sub GetFullLinkList {
...
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;
}
if (&GetParam("oldtime", "") ne "") {
...
}
기존에 wiki.pl 에 추가했던 DoReverse 함수는 아래 action/reverse.pl 로 옮김.
1.2. action/reverse.pl 추가
기존에 있던 DoReverse 함수에서, 다음 세 줄만 수정해 주면 됩니다.
- 첫째 줄 함수 이름
- 둘째 줄
- 마지막에 "1;"
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("page=1&unique=1&sort=1&exists=2&empty=0&reverse=$string")) {
...
}
/UploadedFiles매크로 에서 필요성을 느껴서, 역링크를 찾는 대상으로 위키페이지 외에 인터링크의 역링크도 찾을 수 있도록 수정했습니다. sub DoReverse 함수가 약간 바뀌었습니다.
ext1.109a
- "reverse=페이지이름" 대신에 "action=reverse&id=페이지이름"을 사용하게 함
- /SlashLinks를 쓰는 경우 브라우저의 주소 인코딩 옵션에 따라서 페이지이름이 깨져 역링크를 못 찾는 문제 해결
- DoReverse 함수를 action_reverse 로 이름을 바꾸어 별도의 파일로 분리
- 페이지를 정리하느라 많이 바뀐 것 같지만, 실제로는 예전에 추가했던 내용 중 일부는 고스란히 삭제하고, 함수 하나만 별개의 파일로 옮기면서 3줄 고쳐주면 끝~
역링크가 불여우에선 괜찮은데, IE에선 글자가 깨지는군요.
- 바벨에는 ext1.109a 역링크 패치가 적용이 안 되어 있네요 ^^ 그래서 그렇습니다.
- 음. 이 곳에 있는 내용은 패치를 한것 같은데. DoReverse 함수를 지워야 하는 건가요? 근데 지우면 역링크에서 에러가 나는 걸 보면 외부로 빼낸 함수를 제대로 불러오지 못하는 것 같아요.
- 으윽 죄송합니다. 패치 내용을 위키에 적을 때 삐끗했었네요.
sub GetReverseLink <-- 이 함수는 지워도 되는게 아니었고요, 그대로 남기는데 return 뒤의 부분이 달라졌습니다. wiki.pl 에 있는 DoReverse 는 지워도 되는데, sub GetReverseLink 함수는 통채로 (위에 고친 걸 올렸으니 그대로 복사하셔도 됨) 넣어주시면 될 겁니다.
- 와 고쳐졌습니다. 수고하셨어요.
거 희한하게...
한동안 역링크 기능을 사용하지 않다가 간만에 하면 마치 전체 링크를 새로 갱신하는 것처럼 십수초의 시간이 걸린다. 그 이후 다시 역링크를 사용하면 그때는 2~3초만에 끝. 링크를 파일로 저장하는 건 페이지가 수정될 때마다 항상 수행되는데 어째서 그럴까...
설마... 1500여개의 링크 정보 파일만을 읽는데도 십수초가 걸리는 게 맞고, 이후에 시간이 짧게 걸리는 건 서버 메모리에 캐시되어서 요행이 빨라지는 건지도...
위키위키분류