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); ... }
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 로 옮김.
기존에 있던 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;
sub DoReverse { ... # foreach $pagelines (&GetFullLinkList("sort=1&reverse=$string")) { 이 줄을 아래와 같이 변경 foreach $pagelines (&GetFullLinkList("page=1&unique=1&sort=1&exists=2&empty=0&reverse=$string")) { ... }
/UploadedFiles매크로 에서 필요성을 느껴서, 역링크를 찾는 대상으로 위키페이지 외에 인터링크의 역링크도 찾을 수 있도록 수정했습니다. sub DoReverse 함수가 약간 바뀌었습니다.
ext1.109a
역링크가 불여우에선 괜찮은데, IE에선 글자가 깨지는군요.
거 희한하게...
한동안 역링크 기능을 사용하지 않다가 간만에 하면 마치 전체 링크를 새로 갱신하는 것처럼 십수초의 시간이 걸린다. 그 이후 다시 역링크를 사용하면 그때는 2~3초만에 끝. 링크를 파일로 저장하는 건 페이지가 수정될 때마다 항상 수행되는데 어째서 그럴까...
설마... 1500여개의 링크 정보 파일만을 읽는데도 십수초가 걸리는 게 맞고, 이후에 시간이 짧게 걸리는 건 서버 메모리에 캐시되어서 요행이 빨라지는 건지도...