UseModWiki소스수정/PrevUpNext매크로 페이지의 소스 보기
마지막으로 [b]
-- Loading page list... --
내용출력
로그인[l]
Diary
[f]
최근변경내역
[r]
페이지목록[i]
횡설수설[2]
게시판[3]
링크
수정할 수 없습니다: UseModWiki소스수정/PrevUpNext매크로 는 읽기 전용 페이지입니다.
== <prevupnext(페이지)> 매크로 == [[Diary]]와 같이 하위페이지들이 날짜별로 소팅되어 있는 경우는 [[/사용자추가매크로]]에 있는 <prevnextdiary>를 써서 이전 페이지와 다음 페이지로 가는 링크를 달 수가 있는데, PalmWiki:DateBk5매뉴얼""와 같이 하위페이지들의 이름과 순서가 전혀 연관이 없는 경우는 자동으로 링크를 달 수가 없다. 이런 경우 일일이 링크를 달아주거나, 아니면 매번 목차 페이지로 되돌아가서 다음 페이지로 넘어가야 한다. 이 매크로는 목차 페이지를 보고 현재 읽고 있는 페이지의 다음 페이지를 자동으로 찾아준다. * 필수 요구 사항: 없음 * 선택 요구 사항: ** 이 패치는 [[/매크로모듈화]]가 되어 있는 상태에서 작성된 것이다. 모듈화가 되어 있지 않으면 아래 소스를 wiki.pl에 직접 추가해 줄 것 * 사용법: <prevupnext(페이지이름)> ** "페이지이름"은 자신이 목차를 작성해 둔 페이지의 이름을 적어준다. ** 목차 페이지는 다음과 같이 작성한다. {{{ 주저리주저리... <-- 다른 줄은 무시된다. * [[/서문]] <-- 왼쪽과 같이, "*"나 "#"로 시작하는 리스트들만이 목차로 사용된다. # [[/요약]] # [[/목차]] <-- 이런 식으로 [[/하위페이지]]의 형태들은 전부 [[목차/하위페이지]]또는 # [[/서론]]입니다. [[목차페이지의 상위페이지/하위페이지]]로 처리된다. # [[/본론]] # 주러지주저리... <-- 페이지에 대한 링크가 없는 줄도 무시된다. 주저리주저리.. <-- 역시 무시되고 ## [[/작은절하나]] <-- 여기부터 다시 목차에 포함 ## /SubSctionTwo <-- [[ ]]형태가 아니라 WikiName을 이용한 링크도 가능 # AnotherPage <-- 반드시 하위페이지가 아니라도 상관없다 # [[/결론]] }}} ** 이 매크로가 들어 있던 페이지로 가는 링크를 해당 목차에서 찾아서, 그 이전 항목과 다음 항목을 출력해준다. * 부작용: 딱히 부작용의 여지는 없으나, 목차가 복잡할 경우 오동작할 가능성도 있어 보임. 테스트하는 동안은 별 문제 없었음. === wiki.pl 수정 === 수정할 것 없음 === macros/prevupnext.pl 추가 === ([[/매크로모듈화]]를 적용하지 않은 경우는 기존의 다른 매크로를 참조해서 wiki.pl에 직접 추가해 준다) {{{#!vim perl $MacroFunc{"prevupnext"} = \&prevupnext; sub prevupnext { my ($txt) = @_; $txt =~ s/(&__LT__;prevupnext\((.*?)\)&__GT__;)/&MacroPrevUpNext($1,$2)/gei; return $txt; } sub MacroPrevUpNext() { my ($itself, $tocpage) = @_; my $temp; my ($mainpage, $subpage); my $txt; $temp = $tocpage; $temp = &RemoveLink($temp); $temp = &FreeToNormal($temp); if (&ValidId($temp) ne "") { return "[Invald id: ".&ValidId($temp)."]"; } $tocpage = $temp; my ($toc_mainpage, $toc_subpage); if ($tocpage =~ m|(.*)/(.*)|) { ($toc_mainpage, $toc_subpage) = ($1,$2); } else { $toc_mainpage = $tocpage; } # 목차 페이지를 읽음 my ($fname, $status, $data); $fname = &GetPageFile($tocpage); if (!(-f $fname)) { return "[No such page: $tocpage]"; } ($status, $data) = &ReadFile($fname); if (!$status) { return "[Error in read pagefile: $tocpage]"; } my %temp_Page = split(/$FS1/, $data, -1); my %temp_Section = split(/$FS2/, $temp_Page{'text_default'}, -1); my %temp_Text = split(/$FS3/, $temp_Section{'data'}, -1); my $tocpage_Text = $temp_Text{'text'}; # 라인 별로 분리 my @tocpage_Lines = split('\n',$tocpage_Text); my @tocitem_List; # 유효한 라인만 추출 foreach my $line (@tocpage_Lines) { if ($line =~ m/^(\*|#)+\s*(.*)\s*$/) { my $item = $2; if ($item =~ m/$LinkPattern|(\[\[$FreeLinkPattern(|[^]]+)?\]\])/) { push(@tocitem_List, $item); } } } if ($OpenPageName =~ m|(.*)/(.*)|) { ($mainpage, $subpage) = ($1,$2); } else { $mainpage = $OpenPageName; } # 목차에서 현재 페이지의 위치를 찾음 my $idx = 0; for ($idx = 0; $idx <= $#tocitem_List; $idx++) { my $line = $tocitem_List[$idx]; if ($line =~ m/\[\[$FreeLinkPattern(\|[^\]]+)?\]\]/) { my $link = $1; $link =~ s/ /_/g; if (($link eq $OpenPageName) || ($link eq "/$subpage")) { last; } } elsif ($line =~ m/$LinkPattern/) { my $link = $1; $link =~ s/ /_/g; if (($link eq $OpenPageName) || ($link eq "/$subpage")) { last; } } } # 이전,다음,위,목차 링크 생성 my ($prev, $toc, $next); if ($idx > $#tocitem_List) { return "[Not found this page:$OpenPageName in TOC]"; } # "/서브페이지" 형태의 경우 링크가 잘못 걸리는 것을 막기 위해 MainPage # 변수를 바꿔치기해야 함 my $mainPage_backup = $MainPage; $MainPage = $toc_mainpage; $prev = &CommonMarkup($tocitem_List[$idx-1],0,1) if ($idx > 0); $next = &CommonMarkup($tocitem_List[$idx+1],0,1) if ($idx < $#tocitem_List); $up = &GetPageLink($mainpage) if ($subpage ne ''); $toc = &GetPageLink($tocpage); $MainPage = $mainPage_backup; # 출력 $txt = "
"; $txt .= &T('Prev')." : $prev
"; $txt .= &T('Next')." : $next
"; $txt .= &T('Up')." : $up
" if ($up ne ''); $txt .= &T('TOC')." : $toc"; $txt .= "
"; return $txt; } 1; }}} === translations/korean.pl 수정 === 다음 항목 추가 {{{ Prev 이전 Next 다음 TOC 목차 Up 위 }}} === 추가 업데이트 내역 === === 사용자 의견 === <이전페이지 | 위 | 목차 | 다음페이지> \\ 이런식으로 표시할 수는 없을까요?
모양을 바꾸고 싶은 거라면 저기 "# 출력"이라고 되어 있는 아래 부분이 html 출력하는 부분이니 적당이 고쳐주시면 되고, 아예 페이지 이름이 나오는게 아니라 "이전페이지"라는 명칭이 나오게 하고 싶은 거라면... 좀 애매하네요.
:알겠습니다. 감사.
---- [[위키위키분류]]
UseModWiki소스수정/PrevUpNext매크로
페이지로 돌아가기 |
다른 수정본 보기