[첫화면으로]UseModWiki소스수정/반영된사용자의견archive04

마지막으로 [b]

1. IMG:
2. 변경내역화면에서 이 날 이후의 변경 리스트 보기:를 눌렀을때 지정한 페이지가 아닌 RecentChanges페이지로부터 출력되는 버그
3. 역링크 속도 개선
4. 사전 매크로 만들까요.
5. 편집 불가능한 페이지는 더블클릭도 안되게
6. 도움말 분리
7. 스킨도 만듭시다.
8. 페이지분량순/Greatest Hits(?)순 인덱스
9. 페이지 카운팅
10. CD:

1. IMG:

wikilinestohtml 과 commonmarkup의 호출순서때문에 IMG: 지정값이 무시되는거 같습니다.
-- Bab2 2002-12-7 3:42 am
'테이블 처리루틴이랑 비슷하게 하면 되지않을까...'라고 생각을 해봤는데 많이 힘드네요 -_-;;;
-- Bab2 2002-12-7 6:52 am

그런 게 있는줄도 모르고 있었군요. ^^ 문제의 원인은 말씀하신 게 맞고... 제가 봐도 도저히 답이 안 나오는 문제더군요. 간단히 해결할 수 있는 건 아닌 듯 합니다. 그리고 K3 버전에서도 그다지 괜찮은 것은 아니었던게, IMG: 를 중간 중간에 변경하면서 사용해도 결국은 제일 마지막에 지정한 값이 페이지 전체에 걸쳐서 적용되더군요. 그정도까지만 복구하고자 한다면 현재 WikiLinesToHtml 에 있는 IMG: 처리 루틴을 CommonMarkup 으로 옮기면 될 것 같은데요.. 제대로 만드려면 고민 좀 해봐야겠습니다.
-- Raymundo 2002-12-7 10:12 am

sub CommonMarkup {
                ....
                if ($BracketText) {  # Links like [URL text of link]
                        s/\[$UrlPattern\s\@([^\@]+?)\@($UrlPattern)\]/&StoreBracketUrl($1, $3, $2)/geo; #### 추가한다.
                        s/\[$UrlPattern\s+([^\]]+?)\]/&StoreBracketUrl($1, $2)/geos;
                ....
                s/\@([^\@]+?)\@($UrlPattern)/&StoreUrl($2, $useImage, $1)/geo; #### 추가한다.

                s/\[$UrlPattern\]/&StoreBracketUrl($1, "")/geo;
                s/\[$InterLinkPattern\]/&StoreBracketInterPage($1, "")/geo;
                s/$UrlPattern/&StoreUrl($1, $useImage)/geo;
                ....
}
....
sub StoreBracketUrl {
        my ($url, $text, $imagetag) = @_; #### 바꿔준다. $imagetag 변수 추가.
                ....
#### 아래 블럭을 통ㅤㅉㅒㅤ로 바꿔준다. (원문이 뭐였는지 기억이 안나서..ㅡㅡ;)
        } elsif ($text =~ /^https?:.+\.$ImageExtensions$/) {
#               $text = $1 if ($url =~ /^https?:(.*)/ && $1 !~ /^\/\//);
                $text = "<img $imagetag src=\"$text\">";
                return &StoreRaw("<a href=\"$url\" target=_blank>$text</a>");
        }
#### 여기까지.
                ....
}
                ....
sub StoreUrl {
        my ($name, $useImage, $imagetag) = @_;  #### 바꿔준다. $imagetag 변수 추가.
                ....
        ($link, $extra, $imagetag) = &UrlLink($name, $useImage, $imagetag); #### 바꿔준다. $imagetag 변수 각각 추가.
                ....
}
                ....
sub UrlLink {
        my ($rawname, $useImage, $imagetag) = @_; #### 바꿔준다. $imagetag 변수 추가.
                ....
#### 아래의 블럭을 바꿔준다. (원문 기억안남..--;)
        if ($useImage && ($name =~ /^(http:|https:|ftp:).+\.$ImageExtensions$/)) {
                $name = $1 if ($name =~ /^https?:(.*)/ && $1 !~ /^\/\//);
                return ("<img $imagetag src=\"$name\" alt=\"$name\">", $punct);
#### 여기까지.
                ....
}
@이미지태그@이미지주소의 형식으로 사용합니다. 개별적으로 먹히는건 좀더 살펴봐야될듯..ㅜㅡ 우선, http://www.usemod.org/cgi-bin/wiki.pl?WikiPatches/ImageTags 내역은 여기에 있습니다. 패치를 올려준 양반한테 고마울 뿐입니다.
-- Bab2 2002-12-8 1:59 am

쫌 거창하게 만들어보고 싶었는데..ㅜㅡ

IMG태그는 버리기로 했고, 이미지와 이미지링크만 적용했습니다. ISBN이나 CD 같은 것은 적용시키지 않았습니다. 귀찮기도 하고, 짜달시리 ISBN같은 것들의 그림크기는 작기 때문에 특별히 손볼필요는 없다고 생각됩니다. -ㅅ-a

위에 말씀드린대로 @이미지태그@이미지주소의 형식으로 사용하고, 이미지를 버튼으로 쓰는 링크가 먹히지 않아서 그것을 먼저 손을 봤었는데 위에 포함되어 있습니다.(sub StoreBracketUrl의 리턴값이 그것입니다.) $imagetag는 $ImageTag와 혼동될 소지가 있지만 그냥 저렇게 해버렸습니다. -_-;;

남은 문제는 이전에 남아있던 IMG태그 관련 찌거기들을 제거하는거 정도가 되겠네요.

그리고 게시판에서 질문드린 $_내용중 리턴되는 변수값은 왜그런지는 모르겠지만 무슨수를 써도 해결이 안되는군요. (.*) 이걸로는 되던걸로 봐서 "이미 형식이 위키문법에서 HTML문법으로 번역된 상태라서 그런거 같다"고 결론 지어버렸습니다. -ㅅ-a 좋은하루 되세요.
-- Bab2 2002-12-9 2:42 am
흑~ 또 삽질 되버렸다.. 언제 올리신겁니까..ㅜㅡ;;; -Bab2

으윽.. 저야말로.. 오늘 안에 올리실 줄 알았으면 괜히 이거 붙들고 있지 않았을텐데요.. ^^; 한 시간쯤 전에 퍼뜩 IMG: 와 그 직후의 URL 까지를 하나의 패턴으로 잡아버리면 되겠다는 생각이 들기에 해 버렸는데, 말씀하신 "이미지를 버튼으로 사용하는" (무슨 말씀인지 이해하느라 힘들었습니다 ^^) 것에는 적용을 못하겠군요. 어차피 서로 다른 인터페이스이니, 두 패치 다 적용할 수 있을 것 같습니다. 다행히 조금만 수정하면 두 패치가 서로 충돌하지 않고 같이 적용될 수 있을 것 같네요. 내일부터는 좀 바쁠 듯 하니 며칠 있다가... 그럼 좋은 한 주 되세요.
-- Raymundo 2002-12-9 3:03 am

2. 변경내역화면에서 이 날 이후의 변경 리스트 보기:를 눌렀을때 지정한 페이지가 아닌 RecentChanges페이지로부터 출력되는 버그

sub DoBrowseRequest {
....
        } elsif ($action eq 'rc') {
                &BrowsePage(&T("$RCName")); #### 바꿔준다.
                return 1;
....
}

/북마크 패치하는 와중에 스리슬쩍 같이 적용함. 완료.
-- Raymundo 2003-2-26 10:55 am

3. 역링크 속도 개선

이 문제는 따로 역링크속도개선논의에서 하도록 하죠.

4. 사전 매크로 만들까요.

sub MacroEDic() {       return "<a href=\"\http://dic.naver.com/endic?query=@_\" target=\"dictionary\">@_</a>"; }
sub MacroKDic() {       return "<a href=\"\http://krdic.naver.com/krdic?query=@_\" target=\"dictionary\">@_</a>"; }
sub MacroJDic() {       return "<a href=\"\http://jpdic.naver.com/jpdic?query=@_\" target=\"dictionary\">@_</a>"; }
음... 글을 쓰다가 (또는 뭔가 어려운 글을 복사해서 붙여둘 때) '이 단어는 사전을 바로 찾아볼 수 있게 하고 싶다.'고 할 때 간단한 매크로만으로 사전 링크를 걸 수 있으면 좋겠습니다. 함수는 대강 이렇게 하면 될 것 같은데요. 위에서부터 차례대로 영한-한영사전, 국어사전, 일한-한일사전입니다. 보통 영어 사전을 많이 쓸테니, 각각 dic, kdic, jdic 정도로 해두면 쓰기엔 괜찮을 것 같습니다.

문제는 매크로의 형식인데요. <dic(단어)> 식으로 할까요. 아니면 dic:단어 식으로 할까요.
-- 조프 2003-2-21 6:37 pm

<dic(단어)>
2
dic:단어
1

인터위키로 처리가 가능하지 않나요?
-- Bab2 2003-2-22 1:25 am
네, 아래 방식으로 하면 되겠죠. 다만 새 창 아이콘이 나오는게 싫고, 구별을 위해 강제로 띄어쓰기를 해야 한다거나 하는 경우 때문에 좀 꺼려지는군요.(사전 사이트에서 대강 처리해주긴 하지만요)
-- 조프 2003-2-22 6:57 am

만약에 만든다면 위에껄로 하던지, 밑에꺼로 하려면 문장 끝을 감싸주는 무언가가 있어야 겠네요. 저는 인터위키 같은 것은 외부링크라 간주하고 무조건 새창으로 출력하게끔 해놔서 아이콘 뜨는걸 생각을 못했네요.
-- Bab2 2003-2-22 2:06 pm

/사전매크로에 반영함. 완료
-- Raymundo 2003-2-26 10:55 am

5. 편집 불가능한 페이지는 더블클릭도 안되게

어차피 편집이 안되는데 마우스 장난질 하다가 실수로 더블클릭하니 편집 불가라고 나오더라... 이 어찌 보는 소년의 마음에 상처가 남지 않겠습니까. -_-;
$bodyExtra .= qq(ondblclick="location.href='$ScriptName?action=edit&amp;id=$id'") if (&UserCanEdit($id, 0));

어딘지는 뻔하죠? :-)
-- 조프 2003-2-21 2:41 pm

/마우스더블클릭에 반영함. 완료
-- Raymundo 2003-2-26 10:55 am

6. 도움말 분리

sub DoHelp {
        my $idx = &GetParam("index", "");
        my $text;
        my $page_id;

        if ($idx eq 1) {
                $page_id = "페이지 만들기";
        } elsif ($idx eq 2) {
                $page_id = "문장 구성";
        } elsif ($idx eq 3) {
                $page_id = "링크, 이미지, 표";
        } elsif ($idx eq 4) {
                $page_id = "매크로";
        } elsif ($idx eq 5) {
                $page_id = "이모티콘";
        } elsif ($idx eq 6) {
                $page_id = "색상표";
        }

        $page_id =~ s/ /_/gi;
        $ClickEdit = 0;
        $EmbedWiki = 1;
        &BrowsePage($page_id);
}

DoHelp함수를 저런식으로 위키페이지를 참조하게 했습니다.
-- Bab2 2003-3-3 2:21 am

예전부터 저러면 좋겠다는 생각은 했는데.. 내용을 수정하기도 쉽겠고 말이죠. 그런데 배포할 때 문제가 생기는군요.. WikiX 처럼 - 다른 위키클론은 모르겠고 - 디폴트 페이지를 만들기도 좀 거창한 듯 하고... 저는 자렵니다. 좋은 밤 되세요~
-- Raymundo 2003-3-3 2:24 am
어차피 디폴트페이지야 배포하는 쪽에 소스가 있어서 그대로 퍼올수 있으니 별 문제가 되지 않을거구요. 사실 WikiSeed라는걸 만들기도 좀 그렇고.. 머.. 그런건 사용자가 알아서 하겠져.. -_-a 저도 슬슬 자야겠네요. 안녕히 주무세요 ^^
-- Bab2 2003-3-3 2:27 am

7. 스킨도 만듭시다.

뭐 그렇다는거죠. -_-a http://piwd.net/cgi-bin/oki.pl?메뉴 이렇게 테스트중인데, 메뉴같은거 처리하는게 난감해요 ㅜㅡ
-- Bab2 2003-3-7 5:39 pm

예전에 제 후배도 스킨을 지원하도록 고친다고 뚝딱거리더니만 소식이 없군요. :-) 저는 별로 필요성을 못 느끼는 터라...
-- Raymundo 2003-3-7 5:50 pm

그랬군요 -_-;; 좀더 기다려볼걸 그랬나보네요 ^^; 좀 살펴봤는데 메뉴같은건 이대로 하게되면 전역변수를 너무 많이 써줘야되고, 메뉴를 오른쪽이나 아래쪽에 붙이려고 하면 애로사항이 쫌 많이 따르네요. 일단 좀이따 올려놓겠습니다. ㅡ.,ㅡa
-- Bab2 2003-3-7 5:53 pm

## 변수 선언, 위키본체의 변수선언부에 삽입.
use vars qw(@RcDays @HtmlPairs @HtmlSingle
....
## 추가
use vars qw($SkinHeaderFile $SkinFooterFile $SkinStats
        $SkinHeader $SkinMenu $SkinPage $SkinFooter
        $SkinMenuSiteName $SkinMenuHomePage $SkinMenuUserGotoBar2
        $SkinMenuUserGotoBar3 $SkinMenuUserGotoBar4 $SkinMenuIndex
        $SkinMenuRecentChange $SkinMenuLinks $SkinMenuSearchForm
        $SkinMenuSearch $SkinMenuPref $SkinMenuRandom
        $SkinMenuHistory $SkinMenuLogin $SkinMenuAdmin
        $SkinMenuUserGotoBar $SkinMenuMain $SkinMenuCurrentUser
        $SkinMenuRemotePage); # for skin
## 추가

sub DoWikiRequest {
....
        &InitLinkPatterns();
#### 추가
        $SkinStats = &GetSkin();
#### 추가
        if (!&DoCacheBrowse()) {

## 함수통째로 추가.
sub GetSkin {
        my (@skinheadertext, @skinfootertext);
        open(SKINHEADER, "<../header.htm") or return 0; ## 헤더파일.
        open(SKINFOOTER, "<../footer.htm") or return 0; ## 푸터파일.
        @skinheadertext = <SKINHEADER>;
        @skinfootertext = <SKINFOOTER>;
        $SkinHeaderFile = join('', @skinheadertext);
        $SkinFooterFile = join('', @skinfootertext);
        close(SKINHEADER);
        close(SKINFOOTER);
        return 1;
}
sub GetHeader {
....
        $result .= &GetHtmlHeader("$SiteName: $title", $title);
        return $result  if ($embed);
        return $result if (&GetParam('InFrame','') eq '2');
#### 추가
        $result .= $SkinHeaderFile;
#### 추가
....
#### 적절히 수정.
        if ($id ne '') {
                if($LogoLeft) {
                        $SkinHeader = "\n<table width=100% height=10>\n<tr>\n<td>"
                        . $header . "\n</td>\n<td width=99% valign=bottom class=headline>\n"
                        . $q->h1({-class=>"title"} , &GetReverseLink($id))
                        . "\n</td></tr></table>\n";
                        $result .= $SkinHeader if (!$SkinStats);
                } else {
                        $SkinHeader .= "\n<table width=100% height=10>\n<tr>\n
                        <td width=99% valign=bottom class=headline>"
                        . $q->h1({-class=>'title'} , &GetReverseLink($id))
                        . "\n</td>\n<td>" . $header . "</td>\n</tr></table>";
                        $result .= $SkinHeader if (!$SkinStats);
                }
        } else {
                if($LogoLeft) {
                        $SkinHeader .= "\n<table width=100% height=10>\n<tr>\n<td>"
                        . $header . "\n</td>\n<td width=99% valign=bottom class=headline>"
                        . $q->h1({-class=>"title"} , $title . "\n")
                        . "\n</td>\n</tr></table>";
                        $result .= $SkinHeader if (!$SkinStats);
                } else {
                        $SkinHeader .= "\n<table width=100% height=10>\n<tr>\n
                        <td width=99% valign=bottom class=headline>\n"
                        . $q->h1({-class=>"title"} , $title . "\n")
                        . "\n</td>\n<td>\n" . $header . "\n</td>\n</tr></table>\n";
                        $result .= $SkinHeader if (!$SkinStats);
                }
        }
if (&GetParam("toplinkbar", 1)) {
                # Later consider smaller size?
                if (!$SkinStats) {
                        $result .= &GetGotoBar($id);
                } else {
                        ## GetGotoBar함수안에서 이걸 치환하면 표가 이중으로 생기게 된다.
                        $result .= &GetSkinGotoBar($id);
                        $result =~ s/\$SkinMenuSiteName/$SkinMenuSiteName/g;
                        $result =~ s/\$SkinMenuHomePage/$SkinMenuHomePage/g;
                        $result =~ s/\$SkinMenuUserGotoBar2/$SkinMenuUserGotoBar2/g;
                        $result =~ s/\$SkinMenuUserGotoBar3/$SkinMenuUserGotoBar3/g;
                        $result =~ s/\$SkinMenuUserGotoBar4/$SkinMenuUserGotoBar4/g;
                        $result =~ s/\$SkinMenuIndex/$SkinMenuIndex/g;
                        $result =~ s/\$SkinMenuRecentChange/$SkinMenuRecentChange/g;
                        $result =~ s/\$SkinMenuLinks/$SkinMenuLinks/g;
                        $result =~ s/\$SkinMenuSearchForm/$SkinMenuSearchForm/g;
                        $result =~ s/\$SkinMenuSearch/$SkinMenuSearch/g;
                        $result =~ s/\$SkinMenuPref/$SkinMenuPref/g;
                        $result =~ s/\$SkinMenuRandom/$SkinMenuRandom/g;
                        $result =~ s/\$SkinMenuHistory/$SkinMenuHistory/g;
                        $result =~ s/\$SkinMenuLogin/$SkinMenuLogin/g;
                        $result =~ s/\$SkinMenuAdmin/$SkinMenuAdmin/g;
                        $result =~ s/\$SkinMenuUserGotoBar/$SkinMenuUserGotoBar/g;
                        $result =~ s/\$SkinMenuMain/$SkinMenuMain/g;
                        $result =~ s/\$SkinMenuCurrentUser/$SkinMenuCurrentUser/g;
                        $result =~ s/\$SkinMenuRemotePage/$SkinMenuRemotePage/g;
                }
        }
        $result =~ s/\$SkinHeader/$SkinHeader/g;

        return $result;
}
#### 적절히 수정.
### 적절히 수정.
sub GetMinimumFooter {
....
        if ($FooterNote ne '') {
                $result .= T($FooterNote);  # Allow local translations
        }
#### 추가
        $SkinFooterFile =~ s/\$SkinFooter/$result/g;
        $result = $SkinFooterFile if ($SkinStats);
#### 추가
....

### 함수 새로 추가. 스킨 사용시, GetGotoBar함수를 이것으로 대체하게 된다.
sub GetSkinGotoBar {
        my ($id) = @_;
        my ($main, $bartext);

        $bartext = "";
        $SkinMenuSiteName .= &T("<b>"."$SiteName"."</b>");
        $SkinMenuHomePage = &GetPageLink($HomePage);
#########################################################
### added by gypark
### 상단 메뉴 바에 사용자 정의 항목을 추가
### UserGotoBar2~4 라는 이름으로 지정해주면 된다
        if ($UserGotoBar2 ne '') {
                $SkinMenuUserGotoBar2 .= &GetPageLink($UserGotoBar2);
        }
        if ($UserGotoBar3 ne '') {
                $SkinMenuUserGotoBar3 .= &GetPageLink($UserGotoBar3);
        }
        if ($UserGotoBar4 ne '') {
                $SkinMenuUserGotoBar4 .= &GetPageLink($UserGotoBar4);
        }
###
#########################################################
        $SkinMenuIndex .= &ScriptLink("action=index", T('Index'));
        $SkinMenuRecentChange .= &GetPageLink(T($RCName));
        $SkinMenuLinks .= &ScriptLink("action=links", T('Links'));
        $SkinMenuSearchForm .= &GetSearchForm();
        $SkinMenuSearch .= &GetPageLink(&T('Search'));
        $SkinMenuPref .= &GetPrefsLink();

        if (&GetParam("linkrandom", 0)) {
                $SkinMenuRandom = &GetRandomLink();
        }
        $SkinMenuHistory .= &GetHistoryLink($id, T('History'));
        if (($UserID eq "113") || ($UserID eq "112") || ($UserID eq "")) {
                $SkinMenuLogin = &ScriptLink("action=login", T('Login'));
        } else {
                $SkinMenuLogin = &ScriptLink("action=logout", T('Logout'));
        }
        if (&UserIsAdmin()) {
                $SkinMenuAdmin = &ScriptLink("action=editlinks", T('Admin'));
        }
        if ($UserGotoBar ne '') {
                $SkinMenuUserGotoBar = $UserGotoBar;
        }
        if ($id =~ m|/|) {
                $main = $id;
                $main =~ s|/.*||;  # Only the main page name (remove subpage)
                $SkinMenuMain .= "<img src=\"$EmoticonPath/msn/thumbs_up.gif\" border=\"0\" alt=\""
                . T('Main Page:') . " $main\" align=\"absmiddle\">" . &GetPageLink($main);
        }

        if (($UserID ne "") && ($UserID ne "112") && ($UserID ne "113")) {
                $SkinMenuCurrentUser .= &T('Current User :')." ".&ScriptLink($UserID,$UserID)."\n";
        } else {
                $SkinMenuCurrentUser .= &T('Current User :')." ".$ENV{REMOTE_ADDR}."\n";
        }

        if (&UserIsAdmin() && $UseRemoteWiki) {
                $SkinMenuRemotePage .= &ScriptLink("action=remotepage", &T("\.Get Remotepages\."))." ";
        }

        if (&GetParam('InFrame','') eq '') {
                $bartext .= "\n<div align=right><a accesskey=\"z\" name=#PAGE_TOP href=#PAGE_BOTTOM>". T('[▼]') . "</a></div>\n";
        }
        return $bartext;
}

### 샘플스킨. 스킨Header
<table width=100% border=0>
<tr>
<td colspan=2>
	$SkinHeader <hr>
</td>
</tr>
<tr>
<td class='gotobar' width=210 style="vertical-align=top; background: lightblue;">
	<br>
	<h2> $SkinMenuSiteName </h2><br>
	<h4> $SkinMenuHomePage </h4>
	<h4> $SkinMenuUserGotoBar2 </h4>
	<h4> $SkinMenuUserGotoBar3 </h4>
	<h4> $SkinMenuUserGotoBar4 </h4>
	<h4> $SkinMenuIndex </h4>
	<h4> $SkinMenuRecentChange </h4>
	<h4> $SkinMenuLinks </h4>
	<h4> $SkinMenuSearchForm </h4>
	<h4> $SkinMenuSearch </h4>
	<h4> $SkinMenuPref </h4>
	<h4> $SkinMenuRandom </h4>
	<h4> $SkinMenuHistory </h4>
	<h4> $SkinMenuLogin </h4>
	<h4> $SkinMenuAdmin </h4>
	<h4> $SkinMenuUserGotoBar </h4>
	<h4> $SkinMenuMain </h4>
	<h4> $SkinMenuCurrentUser </h4>
	<h4> $SkinMenuRemotePage </h4>
</td>
<td valign=top>
## 아래에 페이지 내용이 들어가게 된다.

### 샘플스킨
## 바로 직전에 페이지내용이 나오게 된다.
</td>
</tr>
<tr>
	<td colspan=2>
		<hr>$SkinFooter
	</td>
</tr>
</table>

대강 이렇습니다. html로 전체스킨을 만든 다음, 페이지본문이 나와야되는 부분을 기준으로 header와 footer로 잘라서 사용하면 됩니다.(제로보드랑 비슷하죠 ^^?)
지금 난감한게 메뉴나 페이지이름 같은 것들을 오른쪽이나 아래쪽에 놓을 방법을 모르고 있습니다.뭔가 괜찮은 방법이 있다 싶으면 쫌 알려주세요 ㅜㅡ
-- Bab2 2003-3-7 6:15 pm

일단 저는 이대로 적용시켜버렸습니다.
제홈에 아이디가 있으시면 [여기]에 가셔서 밑에서 두번째 항목을 활성화 시켜보시기 바랍니다.
문제가 있다면 꼭좀 알려주세요 ㅜㅡ [이거][이거]는 스킨소스.
-- Bab2 2003-3-7 10:17 pm

아니... 어떻게 이렇게 순식간에... 짝짝짝~ 구경갈께요~
-- Raymundo 2003-3-7 10:20 pm

멋지네요. /스타일쉬트 패치를 뒤엎지 않고 적용할 수 있을지는 모르겠습니다만.. 일단 UseModWiki소스수정/스킨 페이지를 만들어 둘테니 그쪽에서 최종 수정본을 올려 주시는 게 나으려나요?
-- Raymundo 2003-3-7 10:42 pm
그것보다도 도움될만한 제안을..ㅜㅡa
페이지를 불러들이는 순서가 헤더->페이지제목->메뉴->페이지내용->푸터텍스트 이런식으로 로딩순서가 처음부터 고정되어 있어서 메뉴 위치를 오른쪽/위로 밖에 할 수가 없습니다.
(스킨을 구성할 때 위의 로딩순서를 기준으로 짤랐죠.)
최대한 간단하게 하려고 위의 함수들만 건드렸는데, 제대로 되게 하려면, 소스전체를 손대야하기때문에... 쿨럭 ==;
뭔가 쉽고 간단한 해결책이 없을까요 ㅜㅡ?
스타일시트 패치는 신경쓰지 않아도 될겁니다. 어차피 스킨화일에 모두 명시해버리면 되는 일이니까요.
-- Bab2 2003-3-7 11:12 pm

고민좀 해보고 좀이따가 최종수정본 올리도록 하겠습니다. 흑~
-- Bab2 2003-3-7 11:35 pm

UseModWiki소스수정/스킨으로 이동함.
-- Raymundo 2003-3-8 9:08 am

8. 페이지분량순/Greatest Hits(?)순 인덱스

이것 역시 있어도 좋을거 같고 없어도 좋을거 같은..-_-; 페이지분량분류는 배열을 두번불러들여야되니 속도문제가 --;
Greatest Hits는 사용자들이 많이 읽은 페이지를 표시하는 거죠. 으흠냐..
phpwiki처럼 best5 outlink inlink(맞나요?) 이런걸 표시해 줄 수도 있겠군요. 흐흐..
-- Bab2 2003-3-6 8:29 pm

MostPopular 매크로 작업 들어갑니다..
-- Raymundo 2003-3-7 5:50 pm

완료.
-- Raymundo 2003-3-10 8:48 pm

9. 페이지 카운팅

있어도 좋을거 같고 없어도 좋을거 같은..ㅡ,.ㅡ;; 속도를 생각하자면 각각 별도의 화일을 만들어서 카운트만 집어넣는게 제일 편해 보이긴 합니다만.(좀 꺼림칙;;) 달랑 숫자하나 집어넣으려고 db화일을 건드리는것도 마찬가지로 꺼림칙하구요.
-- Bab2 2003-3-6 8:29 pm

DB 를 사용하는 경우는 모르겠고... UseModWiki처럼 화일을 사용한다면...
  1. 페이지.db 화일에 count 를 적는다 - 페이지를 한 번 볼 때마다 write 해야 한다는 것은 아무리 봐도 좋은 생각이 아니겠죠.
  2. (페이지이름, count) 형식의 해쉬변수를 만들어서 하나의 화일에 모든 페이지의 카운트를 모아서 담는다 - 제 홈 같이 방문객이 없는 곳이면 모를까, 동시 접속자가 많은 사이트에서는 카운트 화일을 기록하기 위해 lock 을 잡기 위한 경쟁이 치열할 것 같습니다.
  3. 페이지.cnt 화일을 별도로 두어서 카운트만 기록한다 - 아주 인기 많은 페이지를 제외하면 동시에 lock 을 잡으려는 것은 덜해지겠네요. 그런데 카운트만 기록하면 의미가 없으니 카운트별 소트 같은 것을 원하게 될텐데, 소트 한 번 할 때마다 몇 백~ 몇 천 개의 화일을 열었다 닫았다 하는 것도 기분 좋은 일은 아니겠네요. 하긴, 지금도 역링크나 일부 매크로는 모든 화일을 열어야 되니까 이건 상관없을지도 모르겠습니다. 정작 문제는 대문 페이지 같은 곳은 여전히 동시 접속자가 많을 때 문제의 소지가 있을 것 같네요.
그나마 제일 무난한게 세 번째 같습니다만...
-- Raymundo 2003-3-6 8:50 pm
역시 세번째가 제일 무난하겠죠?
-- Bab2 2003-3-6 8:56 pm
페이지카운트하는데 어떤식으로 하면 되죠? 그냥 새로고침해도 페이지카운트가 올라가는식으로 해버리면 될까요?
-- Bab2 2003-3-6 9:03 pm
어라, 이미 작업하고 계신가요? 저도 한 시간 정도 만졌는데 쉽게 끝나긴 하겠습니다. 그런데 내일 할 일이 있어서 지금은 손을 못 대겠으니, Bab2 님이 하신 거 보고 베끼지요. :-) 카운트는 WikiX (벤치마크 대상이로군요 ^^) 에서는 제가 파악한 것은
  • 새로 고침 하면 카운트 증가
  • 페이지의 최종 수정자가 자신일 경우는 몇 번을 봐도 증가하지 않음
  • 로그인 했을 때와 로그인 하지 않았을 때도 위와 동일
  • 로그인 한 상태에서 페이지를 고치고, 로그아웃 한 후에 새로고침 해도 증가하지 않았음
정도였습니다.
-- Raymundo 2003-3-6 9:51 pm

우웅... 그럴려면 마지막수정자의 정보도 저장을 해야겠네요. 지금은 수정자 정보가 kp화일이랑 rclog에만 저장되는거 같으니까요.
-- Bab2 2003-3-6 10:24 pm

아이디는 저장되네요. 아이피만 따로 저장하면 될려나 모르겠네요. 좀이따 올리도록 하겠습니다.
-- Bab2 2003-3-6 10:29 pm

config.pl
### 환경변수 추가
$CountDir    = "$DataDir/counting"; ## 카운트화일이 저장될 경로가 지정된 환경변수 추가.

wiki.pl
## 환경변수 추가
use vars qw(@RcDays @HtmlPairs @HtmlSingle
....
        $CountDir ); ## 변수선언 추가.

## 함수추가/수정.
### 적절한 곳에 출력루틴을 추가.
sub BrowsePage {
....
        $fullHtml .= &GetFooterText($id, $goodRevision);
        $fullHtml .= &GetPageCount($id) . T('Hits') . "\n"; ### 출력루틴추가/페이지카운팅

        print $fullHtml;
        return  if ($showDiff || ($revision ne ''));  # Don't cache special version
#####################################################
### replaced by gypark
### redirect 로 옮겨가는 경우에는 cache 생성을 하지 않게 함
#       &UpdateHtmlCache($id, $fullHtml)  if $UseCache;
        &UpdateHtmlCache($id, $fullHtml)  if ($UseCache && ($oldId eq ''));
###
#####################################################
}

### 함수 새로 추가
sub GetPageCount {
        my ($id) = @_;
        my ($pagecount, $countfile, $status);
        &CreatePageDir($CountDir, $id);
        $countfile = $CountDir . "\/" . &GetPageDirectory($id) . "\/$id.cnt";
        ($status, $pagecount) = &ReadFile($countfile);
        $pagecount = 0 if ($status == 0);
        $pagecount++ if (($UserID ne $Section{'id'})
                && ($ENV{REMOTE_ADDR} ne $Section{'ip'}));
        &WriteStringToFile($countfile, $pagecount);
        return $pagecount;
}

## 페이지 이름변경/삭제 함수 수정
## 적절히 추가 라고 적힌 부분을 알아서 추가해주면 됨. ^_^;

sub DeletePage {
....
### 적절히 추가.
        $fname = $CountDir . "\/" . &GetPageDirectory($page) . "$page.cnt";
        unlink ($fname) if (-f $fname);
### 적절히 추가.

        $fname = &GetPageFile($page);
        unlink($fname)  if (-f $fname);
....
}

sub RenamePage {
....
        unlink($newkeep)  if (-f $newkeep);  # Clean up if needed.
        rename($oldkeep,  $newkeep);
        unlink($IndexFile)  if ($UseIndex);
##########################################################
### added by gypark
### 페이지 이름 변경시, lock 화일도 같이 변경
        my ($oldlock, $newlock);
        $oldlock = &GetLockedPageFile($old);
        if (-f $oldlock) {
                $newlock = &GetLockedPageFile($new);
                rename($oldlock, $newlock) || die "error while renaming lock";
        }
### cache 화일은 삭제
        &UnlinkHtmlCache($old);
###
### 적절히 추가. (카운트화일삭제)
        my ($oldcnt, $newcnt);
        $oldcnt = $CountDir . "\/" . &GetPageDirectory($old) . "$old.cnt";
        $newcnt = $CountDir . "\/" . &GetPageDirectory($new) . "$new.cnt";
        if (-f $oldcnt) {
                rename($oldcnt, $newcnt) || die "error while renaming count";
        }
### 적절히 추가. (카운트화일삭제)
....

근데 저장되는 아이피정보가 로그인한 사용자의 아이피정보가 맞는지 모르겠네요. 아마 맞겠죠.. ㅡ.,ㅡ;

확인한 바로는 위에 적으신 것들은 모두 만족할겁니다.
주의하셔야 될 것은 원래 GetEditGuide 함수정도의 위치에 집어넣어서, 페이지수정, 변경내역 링크랑 한줄로 일치시키면 이쁘게 보일거 같았는데, 환경설정에서 이걸 환경설정에서 위/아래 모두 표시되게 하니까 한 번에 두번씩 카운트가 되네요 -_-; 고민고민 하다가 그냥 페이지 제일 밑에 붙여버렸습니다. 그것만 참고하시면 될겁니다. 편안한 밤 되세염. 페이지 이름변경/삭제부분까지 대충 손봤습니다. 일단 테스트나 한번 해주세요. ^^;
-- Bab2 2003-3-6 10:53 pm

수고하셨네요. 제가 좀 만졌던 것은, BrowsePage 의 앞쪽에서 count 값을 읽어서 새로운 전역 변수에 담아 두고, GetEditGuide 에서는 전역변수를 읽어오게 했습니다. 이러면 두 번 증가될 걱정은 없지요. [여기] 보시면 편집 가이드에 출력시킨 상태입니다. 구경이나~ :-)
-- Raymundo 2003-3-6 11:16 pm
정말 전역변수를 써도 되겠네요. 'o'a
-- Bab2 2003-3-6 11:19 pm
제 홈에서 테스트 들어가겠습니다. 더 이상 수정하지 말아주세요. 수정할 게 있으면 이 아래에..
-- Raymundo 2003-3-6 11:34 pm
아마도 전역변수쪽으로 손을 보실거라 생각해서 제홈도 그렇게 수정해서 쓰기로 했습니다. 수정된 내용은 올릴 필요가 없을 것 같네요. ^^
-- Bab2 2003-3-6 11:48 pm

0 hits, 1 hits 는 좀 이상하지 않습니까? ^^
-- Danny 2003-3-8 12:29 am

그거 생각했다가 if 문 하나 더 쓰기도 귀찮아서 놔뒀더니만... ^^a 고치지 뭐.
-- Raymundo 2003-3-8 9:11 am

페이지 작성자가 조회를 할 때 조회수가 늘지 않게 하는 것이 잘하는 건지 모르겠네요. 글 작성자가 장난으로 조회수를 늘리는 것을 막으려고 하는 의도일 수도 있고, 다른 게시판 CGI 들도 보통은 그렇게들 합니다만... 자기가 작성해 놓고 나중에 자기가 필요해서 보는 경우는 조회수로 쳐 줘야 MostPopular 의 개념에 맞지 않으려나요?
-- Raymundo 2003-3-8 9:32 am

완료.
-- Raymundo 2003-3-10 8:49 pm

10. CD:

핫트랙 그림 주소가 바뀌었나 봅니다.
sub StoreHotTrack {
        my ($id) = @_;

        return "<a target=_blank href=\"http://www.hottracks.co.kr/cgi-bin/hottracks.storefront/Product/View/$id\">" .
        "<img src=\"http://210.123.8.24/hottracks/cdimg/$id.jpg\"></a>";
}
주소를 210.123.8.23에서 210.123.8.24로 바꾸면 됩니다.
-- Bab2 2003-3-3 5:00 pm

지금 고치려고 했는데 보니까 8.23 도 다시 되는 것 같네요. 나중에 또 안 되기 시작하면 알려주세요~
-- Raymundo 2003-3-6 12:47 am
어어.. 잘되네요
-- Bab2 2003-3-6 8:29 pm

별다른 조치를 취하지 않음. 완료.
-- Raymundo 2003-3-10 9:07 pm


위키위키분류

마지막 편집일: 2024-4-29 10:14 am (변경사항 [d])
797 hits | Permalink | 변경내역 보기 [h] | 페이지 소스 보기