UseModWiki소스수정/역링크 페이지의 소스 보기
마지막으로 [b]
-- Loading page list... --
내용출력
로그인[l]
Diary
[f]
최근변경내역
[r]
페이지목록[i]
횡설수설[2]
게시판[3]
링크
수정할 수 없습니다: UseModWiki소스수정/역링크 는 읽기 전용 페이지입니다.
== # 페이지 제목을 클릭했을때 진정한 의미의 역링크 출력 == * 페이지 제목을 클릭하는 경우, 기존에는 단지 해당 페이지 이름이 포함된 페이지들의 목록이 출력되었다. * [[역링크]], 즉 해당 페이지를 "링크"하고 있는 페이지들만이 출력되도록 하였다. * 필수 요구 사항: ** [[/GetFullLinkList함수개선]] 이 적용되어 있어야 한다 ** [[/액션모듈화]] * 선택 요구 사항: ** [[/링크를별도의화일로관리]] 가 적용되어 있어야 속도 저하를 피할 수 있다. * 테스트해야 할 경우의 수가 워낙 많아서 제대로 동작한다고 보장할 수는 없으나, [[주인장]]이 수행한 테스트해서는 완벽하게 동작하였다. 잘못된 동작을 보이는 것을 목격하면 [[/사용자의견]]에 제보해 주기 바란다. === # wiki.pl 수정 === {{{#!vim perl sub GetHeader { ... ### 다음 라인을 교체 # $result .= $q->h1(&GetSearchLink($id)); # 원래 코드 # $result .= $q->h1($header . &GetSearchLink($id)); # "사이트 로고" 관련해서 패치했던 코드 $result .= $q->h1($header . &GetReverseLink($id)); # 이것이 최종 코드 ### ... } }}} {{{#!vim perl ### 다음 함수를 통채로 추가 sub GetReverseLink { my ($id) = @_; my $name = $id; if ($FreeLinks) { $name =~ s/_/ /g; # Display with spaces } return &ScriptLink("action=reverse&id=$id", $name); } }}} {{{#!vim perl # 다시 한 번 말하지만, 위의 "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); ... } }}} ==== # ext1.109a 에서 필요없게 된 부분 ==== 아래 내용은 위키 소스에서 다시 제거해도 되고, 귀찮으면 그냥 놔둬도 상관은 없습니다. {{{#!vim perl 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 로 옮김. === # action/reverse.pl 추가 === 기존에 있던 DoReverse 함수에서, 다음 세 줄만 수정해 주면 됩니다. * 첫째 줄 함수 이름 * 둘째 줄 * 마지막에 "1;" {{{#!vim perl # 다음 함수를 통채로 추가 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 '
'; 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.') . "
"; } if (&ValidId($string) eq "") { print "
"; print Ts('Return to %s' , &GetPageLink($string)) . "
"; } print &GetCommonFooter(); } 1; }}} === # 추가 업데이트 내역 === GetFullLinkList 에서 파라메터의 기본값을 어떻게 주느냐에 따라서 역링크 탐색 결과가 잘못 나오는 것을 발견하였다. 아래와 같이 모든 파라메터를 명시하여 해결할 수 있음. {{{#!vim perl 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 * "reverse=페이지이름" 대신에 "action=reverse&id=페이지이름"을 사용하게 함 ** [[/SlashLinks]]를 쓰는 경우 브라우저의 주소 인코딩 옵션에 따라서 페이지이름이 깨져 역링크를 못 찾는 문제 해결 * DoReverse 함수를 action_reverse 로 이름을 바꾸어 별도의 파일로 분리 * 페이지를 정리하느라 많이 바뀐 것 같지만, 실제로는 예전에 추가했던 내용 중 일부는 고스란히 삭제하고, 함수 하나만 별개의 파일로 옮기면서 3줄 고쳐주면 끝~ === # 사용자 의견 === 역링크가 불여우에선 괜찮은데, IE에선 글자가 깨지는군요.
: 바벨에는 ext1.109a 역링크 패치가 적용이 안 되어 있네요 ^^ 그래서 그렇습니다.
::음. 이 곳에 있는 내용은 패치를 한것 같은데. DoReverse 함수를 지워야 하는 건가요? 근데 지우면 역링크에서 에러가 나는 걸 보면 외부로 빼낸 함수를 제대로 불러오지 못하는 것 같아요.
::: 으윽 죄송합니다. 패치 내용을 위키에 적을 때 삐끗했었네요. \\ sub GetReverseLink <-- 이 함수는 지워도 되는게 아니었고요, 그대로 남기는데 return 뒤의 부분이 달라졌습니다. wiki.pl 에 있는 DoReverse 는 지워도 되는데, sub GetReverseLink 함수는 통채로 (위에 고친 걸 올렸으니 그대로 복사하셔도 됨) 넣어주시면 될 겁니다.
:::와 고쳐졌습니다. 수고하셨어요.
거 희한하게... \\ \\ 한동안 역링크 기능을 사용하지 않다가 간만에 하면 마치 전체 링크를 새로 갱신하는 것처럼 십수초의 시간이 걸린다. 그 이후 다시 역링크를 사용하면 그때는 2~3초만에 끝. 링크를 파일로 저장하는 건 페이지가 수정될 때마다 항상 수행되는데 어째서 그럴까...
설마... 1500여개의 링크 정보 파일만을 읽는데도 십수초가 걸리는 게 맞고, 이후에 시간이 짧게 걸리는 건 서버 메모리에 캐시되어서 요행이 빨라지는 건지도...
---- [[위키위키분류]]
UseModWiki소스수정/역링크
페이지로 돌아가기 |
다른 수정본 보기