use vars qw(@RcDays @HtmlPairs @HtmlSingle ... ### 환경변수 추가 $EditGuideInExtern $SizeTopFrame $SizeBottomFrame);
### wiki.pl 에 기본값을 적어주고, config.pl 에서 별도로 설정한다. $EditGuideInExtern = 0; # 1 = show edit guide in bottom frame, 0 = don't show $SizeTopFrame = 160; $SizeBottomFrame = 110;
sub BrowsePage { ... } else { # Not a valid target, so continue as normal page $id = $oldId; $oldId = ''; } } ### 다음 단락 추가 if (substr($Text{'text'}, 0, 8) eq '#EXTERN ') { $oldId = &GetParam('oldid', ''); my ($externURL) = ($Text{'text'} =~ /\#EXTERN\s+([^\s]+)/); if ($externURL =~ /^$UrlPattern$/) { &BrowseExternUrl($id, $oldId, $externURL); return; } } ### 여기까지 $MainPage = $id; $MainPage =~ s|/.*||; # Only the main page name (remove subpage) ... }
### 다음 함수를 통채로 추가 sub BrowseExternUrl { my ($id, $oldId, $url) = @_; my $sizeBottomFrame = $SizeBottomFrame * $EditGuideInExtern; if (&GetParam('InFrame','') eq '1') { print &GetHeader($id, "$id [InTopFrame]",$oldId); print &GetMinimumFooter(); return; } elsif ((&GetParam('InFrame','') eq '2') && ($EditGuideInExtern)) { print &GetHeader($id, "$id [InBottomFrame]",$oldId); print "<hr>\n"; print &GetEditGuide($id, ''); print &GetMinimumFooter(); return; } else { print &GetHttpHeader(); print "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Frameset//EN\">\n"; print "<html><</html>html<html>></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>\n"; print " <frame src=\"$url\" noresize>\n"; print " <frame src=\"$ScriptName?action=browse&InFrame=2&id=$id&oldid=$oldId\" noresize>\n" if ($EditGuideInExtern); print " <noframes>\n"; print " <body>\n"; print " <p>".T('You need the web browser which supports frame tag.')."\n"; print " </body>\n"; print " </noframes>\n"; print "</frameset>\n"; print "<html><</html>/html<html>></html>\n"; return; } }
sub GetHeader { ... return $result if ($embed); ### 다음 라인 추가 return $result if (&GetParam('InFrame','') eq '2'); ### 여기까지 ### 다음 단락 수정 # if ($oldId ne '') { # $result .= $q->h3('(' . Ts('redirected from %s', # &GetEditLink($oldId, $oldId)) . ')'); # } my $topMsg = ""; if ($oldId ne '') { $topMsg .= '('.Ts('redirected from %s',&GetEditLink($oldId, $oldId)).') '; } if (&GetParam('InFrame','') eq '1') { $topMsg .= '('.Ts('%s includes external page',&GetEditLink($id,$id)).')'; } $result .= $q->h3($topMsg) if (($oldId ne '') || (&GetParam('InFrame','') eq '1')); ### 여기까지 if ((!$embed) && ($LogoUrl ne "")) { ... } else { $result .= $q->h1($header . $title); } ### 아래는 "페이지 상단에 Alt+Z 할당" 패치에서 추가한 부분이다. ### 그 패치를 적용하지 않았다면 아래 단락은 무시해도 된다. if (&GetParam('InFrame','') eq '') { $result .= "\n<div align=\"right\"><a accesskey=\"z\" name=\"#PAGE_TOP\" href=\"#PAGE_BOTTOM\">".T('Bottom') . "</a></div>\n"; } ### 여기까지 if (&GetParam("toplinkbar", 1)) { ... }
sub GetHtmlHeader { ... ### 다음 단락 교체 # added luke # if ($ClickEdit) { # if ($FreeLinks) { # $id = &FreeToNormal($id); # } # $bodyExtra .= qq(ondblclick="location.href='$ScriptName?action=edit&id=$id'"); # } # end if (&GetParam('InFrame','') ne '') { $html .= qq(<base target="_parent">\n); } else { if ($ClickEdit) { if ($FreeLinks) { $id = &FreeToNormal($id); } $bodyExtra .= qq(ondblclick="location.href='$ScriptName?action=edit&id=$id'"); } } ### 여기까지 ... }
sub GetMinimumFooter { ### 다음 단락 추가 if (&GetParam('InFrame','') ne '') { return $q->end_html; } ### ... }
앗 상황을 좀 더 자세히 적을께요. ^^ 일단 ID를 만들고 로그인을 하면 페이지 열때마다 로그인을 할 것인지 로그아웃을 하기 전까지 로그인 되어있는 상황으로 놔둘 것인지를 물어보는 창이 뜹니다. 그때 확인 버튼을 누르면 계속 로그인 상태로 남아있는데요. 이게 브라우저를 닫았다가 다시 접근해보면 로그아웃 된 상태로 된다는 거죠.
제 예상은 그 게시판 페이지에서는 자기 URL을 참고하여 쿠키를 적용하는데 EXTERN 내부에 포함되어있으면 URL이 자기 것이 아니므로 쿠키를 잘 못읽어 오는 것이 아닐까 하고 생각되네요. 그렇다면 어쩌면 여기서 소스를 수정해도 해결할 수는 없다는 결론이 나오는게 아닌가 싶어 근본적인 문제인것 같다는 말을 적은 거랍니다.
다음부턴 좀 더 확실한 리포팅을 할께요. ^^