[첫화면으로]UseModWiki소스수정/SlashLinks

마지막으로 [b]

1. 스크립트 이름과 뒤의 인자 사이에 들어오는 구분자를 ? 와 / 중에 선택 가능
1.1. 사용법
1.2. 부작용
1.3. config.pl 수정
1.4. wiki.pl 수정
1.5. wiki.pl 이외의 소스 수정
1.6. 추가 업데이트 내역
1.7. 사용자 의견

1. 스크립트 이름과 뒤의 인자 사이에 들어오는 구분자를 ? 와 / 중에 선택 가능

UseModWiki 1.0 의 코드를 사용하여 /RSS제공 패치를 하다보니 어쩔 수 없이 하게 된 패치..

1.1. 사용법

config 화일에 다음의 환경 변수를 추가한다.
$SlashLinks   = 0;      # 1 = use script/action links, 0 = script?action

이 값이 0 이면 wiki.pl?action 으로, 1 이면 wiki.pl/action 으로 링크가 걸린다.

그런데 이 옵션을 1로 하는 경우는 추가의 조치가 필요하다. 브라우저가 "wiki.pl/페이지이름(또는 action등)"의 형식으로 요청을 보냈을 때 처리할 수 있어야 한다.

두 가지 방법이 있다:

어느 쪽 방법을 쓰더라도, 위키 출력 내에 상대경로로 링크가 걸린 경우 문제가 된다. <a href="wiki.pl/주저리">이렇게 걸려 있을 때,

결국 별도로 /SlashLinks처리 신경을 써 주어야 함.

그리고, wiki.pl 링크는 저렇게 해결이 되지만, 그 외의 스타일쉬트,자바스크립트 등의 경로는 여전히 이 문제가 있으므로, 절대경로로 바꿔주어야 한다. 홈페이지주소간단히하기 참조.

1.2. 부작용

1.3. config.pl 수정

변수 추가
$SlashLinks   = 0;      # 1 = use script/action links, 0 = script?action

1.4. wiki.pl 수정

### 패치를 위해 추가된 환경설정 변수
use vars qw(
    $UserGotoBar $UserGotoBar2 $UserGotoBar3 $UserGotoBar4
    ...
    $SlashLinks
    );
###

함수 통채로 추가
sub ScriptLinkChar {
    if ($SlashLinks) {
        return '/';
    }
    return '?';
}

함수 수정
sub ScriptLink {
    my ($action, $text) = @_;

#   return "<A href=\"$ScriptName?$action\">$text</A>";
    return "<a href=\"$ScriptName" . &ScriptLinkChar() . "$action\">$text</a>";
}

함수 수정
sub ScriptLinkTitle {
    my ($action, $text, $title) = @_;

    if ($FreeLinks) {
        $action =~ s/ /_/g;
    }
#   return "<a href=\"$ScriptName?$action\" title=\"$title\">$text</a>";        이 줄을 아래처럼 바꿈
    return "<a href=\"$ScriptName" . &ScriptLinkChar() . "$action\" title=\"$title\">$text</a>";
}

이 외에도 ?action= 등으로 출력되게 고정된 부분을 전부 ScriptLinkChar() 를 사용하게 바꾼다. (일부는 뒤의 쿼리가 영문으로 고정되어 있어서 안 바꿔도 될 것 같긴 한데, 일관성을 위해서...)

(분량이 많아서 diff 화면으로 대신합니다. ext1.106b->ext1.107의 변화)

@@ -495,14 +495,27 @@
    $q->autoEscape(undef);

 ###############
 ### added by gypark
 ### file upload
    if ($q->cgi_error() =~ m/^413/) {
-       print $q->redirect(-url=>"http:$ENV{SCRIPT_NAME}?action=upload&error=3");
+       print $q->redirect(-url=>"http:$ENV{SCRIPT_NAME}".&ScriptLinkChar()."action=upload&error=3");
        exit 1;
    }
    $UploadUrl = "http:$UploadDir" if ($UploadUrl eq "");
@@ -858,9 +877,9 @@
        print "<html>\n";
        print "<title>$SiteName: $id</title>\n";
        print "<frameset rows=\"$SizeTopFrame,*,$sizeBottomFrame\" cols=\"1\" frameborder=\"0\">\n";
-       print "  <frame src=\"$ScriptName?action=browse&InFrame=1&id=$id&oldid=$oldId\" noresize scrolling=\"no\">\n";
+       print "  <frame src=\"$ScriptName".&ScriptLinkChar()."action=browse&InFrame=1&id=$id&oldid=$oldId\" noresize scrolling=\"no\">\n";
        print "  <frame src=\"$url\" noresize>\n";
-       print "  <frame src=\"$ScriptName?action=browse&InFrame=2&id=$id&oldid=$oldId\" noresize scrolling=\"no\">\n"
+       print "  <frame src=\"$ScriptName".&ScriptLinkChar()."action=browse&InFrame=2&id=$id&oldid=$oldId\" noresize scrolling=\"no\">\n"
            if ($EditGuideInExtern);
        print "  <noframes>\n";
        print "  <body>\n";
@@ -1569,7 +1588,7 @@

 sub HelpLink {
    my ($id, $text) = @_;
-   my $url = "$ScriptName?action=help&index=$id";
+   my $url = "$ScriptName".&ScriptLinkChar()."action=help&index=$id";

 ### 작성 취소 시 확인
 #  return "<a href=\"javascript:help('$url')\">$text</a>";
@@ -1966,7 +1985,7 @@
 ### 헤더 출력 개선
    $html .= qq(<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=$HttpCharset">\n);
    $html .= qq(<META HTTP-EQUIV="Content-Script-Type" CONTENT="text/javascript">\n);
-   $html .= qq(<link rel="alternate" type="application/rss+xml" title="$SiteName" href="http://$ENV{SERVER_NAME}$ENV{SCRIPT_NAME}?action=rss">\n);
+   $html .= qq|<link rel="alternate" type="application/rss+xml" title="$SiteName" href="http://$ENV{SERVER_NAME}$ENV{SCRIPT_NAME}${\(&ScriptLinkChar())}action=rss">\n|;
    $html .= qq(<script src="$JavaScript" language="javascript" type="text/javascript"></script>);
    $html .= "\n";
 ###
@@ -2013,7 +2032,7 @@
            if ($FreeLinks) {
                $id = &FreeToNormal($id);
            }
-           $bodyExtra .= qq( ondblclick="location.href='$ScriptName?action=edit&id=$id'" );
+           $bodyExtra .= qq| ondblclick="location.href='$ScriptName${\(&ScriptLinkChar())}action=edit&id=$id'" |;
        }
    }
 ###
@@ -2403,7 +2422,7 @@

    # Normally get URL from script, but allow override.
    $FullUrl = $q->url(-full=>1)  if ($FullUrl eq "");
-   $url = $FullUrl . "?" . $newid;
+   $url = $FullUrl . &ScriptLinkChar() . $newid;
    $nameLink = "<a href=\"$url\">$name</a>";
    if ($RedirType < 3) {
        if ($RedirType == 1) {             # Use CGI.pm
@@ -5706,12 +5725,12 @@
 function upload()
 {
-   var w = window.open("$ScriptName?action=upload", "upload", "width=640,height=250,resizable=1,statusbar=1,scrollbars=1");
+   var w = window.open("$ScriptName${\(&ScriptLinkChar())}action=upload", "upload", "width=640,height=250,resizable=1,statusbar=1,scrollbars=1");
    w.focus();
 }
 function oekaki()
 {
-   var w = window.open("$ScriptName?action=oekaki&mode=paint", "oekaki", "width=900,height=750,resizable=1,statusbar=1,scrollbars=1");
+   var w = window.open("$ScriptName${\(&ScriptLinkChar())}action=oekaki&mode=paint", "oekaki", "width=900,height=750,resizable=1,statusbar=1,scrollbars=1");
    w.focus();
 }
@@ -8811,7 +8834,7 @@
 >
     <channel rdf:about="$ChannelAbout">
         <title>${\(&QuoteHtml($SiteName))}</title>
-        <link>${\($QuotedFullUrl . &QuoteHtml("?$RCName"))}</link>
+        <link>${\($QuotedFullUrl . &QuoteHtml(&ScriptLinkChar()."$RCName"))}</link>
         <description>${\(&QuoteHtml($SiteDescription))}</description>
         <wiki:interwiki>
             <rdf:Description link="$QuotedFullUrl">
@@ -8881,10 +8904,10 @@
 ### replaced by gypark
 ### 북마크
 #  $diffPrefix = $QuotedFullUrl . &QuoteHtml("?action=browse\&diff=4\&id=");
-   $diffPrefix = $QuotedFullUrl . &QuoteHtml("?action=browse\&diff=5\&id=");
+   $diffPrefix = $QuotedFullUrl . &QuoteHtml(&ScriptLinkChar()."action=browse\&diff=5\&id=");
 ###
 ###############
-   $historyPrefix = $QuotedFullUrl . &QuoteHtml("?action=history\&id=");
+   $historyPrefix = $QuotedFullUrl . &QuoteHtml(&ScriptLinkChar()."action=history\&id=");
    foreach $rcline (@outrc) {
        ($ts, $pagename) = split(/$FS3/, $rcline);
        $pagecount{$pagename}++;
@@ -8972,7 +8995,7 @@
    $host =~ s/\d+$/xxx/;
    if ($userName) {
        $author = &QuoteHtml($userName);
-       $authorLink = "link=\"$QuotedFullUrl?$author\"";
+       $authorLink = "link=\"$QuotedFullUrl".&ScriptLinkChar()."$author\"";
    } else {
        $author = $host;
    }
@@ -8988,7 +9011,7 @@
    $item = <<RSS ;
     <item rdf:about="$itemID">
         <title>$pagename</title>
-        <link>$QuotedFullUrl?$encoded_pagename</link>
+        <link>$QuotedFullUrl${\(&ScriptLinkChar())}$encoded_pagename</link>
         <description>$description</description>
         <dc:date>$date</dc:date>
        <dc:creator>$author</dc:creator>

1.5. wiki.pl 이외의 소스 수정

wiki.pl 코드 말고, macros/ action/ plugin/ 디렉토리에 있는 코드들 중에 "?"를 출력하게 고정된 부분이 있으면 수정한다.

ext1.107 현재 고칠 것은 /Calendar매크로/blog매크로시리즈의 blog_calendar 매크로 두 개 뿐. macros/ 디렉토리 아래 있는 blog_calendar.pl 과 calendar.pl 을 수정한다. 각각 두 군데를 고쳐주면 된다.

blog_calendar.pl (diff):
@@ -86,7 +86,7 @@
    # 달력 제목 출력
    $result .= "<TABLE class='calendar'>";
    $result .= "<CAPTION class='calendar'>"
-       ."<a href=\"$ScriptName?$toc_mainpage/$cal_year-$cal_month\">"
+       ."<a href=\"$ScriptName".&ScriptLinkChar()."$toc_mainpage/$cal_year-$cal_month\">"
        .(length($toc_mainpage)?"$toc_mainpage<br>":"")
        ."$cal_year-$cal_month"
        ."</a>"
@@ -148,7 +148,7 @@
            }

            $result .= "<td class='$td_class'>"
-               .(($page)?"<a href=\"$ScriptName?$page\" title=\"$pagename\">":"")
+               .(($page)?"<a href=\"$ScriptName".&ScriptLinkChar()."$page\" title=\"$pagename\">":"")
                ."<span style='color:$cal_color[$wday]; $span_style'>"
                .$cal_result
                ."</span>"

calendar.pl (diff):
@@ -77,7 +77,7 @@
    # 달력 제목 출력
    $result .= "<TABLE class='calendar'>";
    $result .= "<CAPTION class='calendar'>"
-       ."<a href=\"$ScriptName?$cal_mainpage$cal_year-$cal_month\">"
+       ."<a href=\"$ScriptName".&ScriptLinkChar()."$cal_mainpage$cal_year-$cal_month\">"
        .(length($cal_mainpage)?"$cal_mainpage<br>":"")
        ."$cal_year-$cal_month"
        ."</a>"
@@ -132,7 +132,7 @@
            }

            $result .= "<td class='$td_class'>"
-               ."<a href=\"$ScriptName?$cal_mainpage$cal_page\">"
+               ."<a href=\"$ScriptName".&ScriptLinkChar()."$cal_mainpage$cal_page\">"
                ."<span style='color:$cal_color[$wday]; $span_style'>"
                .$cal_result
                ."</span></a></td>";

1.6. 추가 업데이트 내역

ext1.106b

ext1.107

ext1.109a

1.7. 사용자 의견

신경써서 찾는다고 찾았는데, 그 외에도 "wiki.pl?" 로 출력되게 고정되어 있는 코드를 찾게 되시면 알려주세요~ 근데 코드를 들여다보실 만한 분이 안 계시려나요 ^^
-- Raymundo 2007-2-5 11:57 pm

@@ -8544,9 +8567,9 @@ 부분에 제 위키소스엔 없어요
-- Nyxity 2007-2-6 4:37 pm

그건 /오에카키 관련 소스라서... 바벨을 보니 예전에 PaintBBS.jar 쓰시던 코드로 남아 있네요. 오에카키 쓸 일 없으시면 그냥 놔둬도 될테고... OekakiSave, OekakiExit, OekakiPaint 세 함수를 통채로 최신 버전에서 복사해서 덮어 쓰셔도 될 겁니다.
-- Raymundo 2007-2-6 4:44 pm

음, 환경변수의 갯수가 늘어나니 관리하고도 힘들고 해서 웬만하면 추가하지 않으려고 했는데, 오에카키 jar 파일은 도저히 답이 없네요. 오에카키 관련 소스 수정은 /오에카키 쪽으로 옮겼습니다. 잠시 후 그쪽은 또 업데이트가 있을 예정 =.=
-- Raymundo 2007-2-6 6:37 pm
이름:  
Homepage:
내용:
 

위키위키분류

마지막 편집일: 2008-8-21 7:31 pm (변경사항 [d])
6091 hits | Permalink | 변경내역 보기 [h] | 페이지 소스 보기