최초작성일: 2004-05-24 02:42
수정 : 2004-06-26 14:07
수정2 : 2005-01-15
우리가 만약 구글 사이트에서 mdiwebma 라는 검색어를 입력했다고 하자. 그러면 그 페이지의 URL이 http://www.google.co.kr/search?q=mdiwebma&ie=UTF-8&hl=ko&lr= 로 표시가 된다. 두 번째 페이지는 http://www.google.co.kr/search?q=mdiwebma&hl=ko&lr=&ie=UTF-8&newwindow=1&start=10&sa=N 로 표시가 되는데 URL을 찬찬히 보면 알겠지만 start=10 이라는 부분이 있다. 구글 검색 결과는 한 페이지에 10개의 검색결과를 화면에 출력해 주므로 두 번째 URL에서 start=10을 start=20 으로 바꿔 주기만 하면 세 번째 페이지의 URL이 되는 것이다. 이 원리를 이용해서 검색결과가 있는 페이지에서 Ctlr+ 마우스 더블 클릭(1.3.4버전부터 , 이전버전에서는 그냥 더블클릭으로 동작을 시작하였으나 불편해서 Ctrl+더블클릭으로 변경함)으로 스마트 네비게이션을 시작하고 나서 마우스 더블 클릭을 하기만 하면, start=10을 찾아서 10을 20으로 바꾼 URL로 자동으로 항해하도록 하는 기능이다. 이 기능을 이용하면 검색 결과의 다음 페이지로 이동하기 위해서 페이지를 맨 마지막 까지 스크롤 하지 않아도 되기 때문에 더 편리하게 웹 서핑을 할 수 있다.
이 기능에 대한 아이디어는 아래 URL에서 얻었습니다.
http://ietoy.co.kr/bbs/zboard.php?id=ietoy&page=1&sn1=&divpage=1&sn=off&ss=on&sc=on&select_arrange=headnum&desc=asc&no=1884
http://winbbs.intizen.com/board/content.asp?db=WXPTIP&number=4552
설정은 웹마 실행화일이 있는 폴더에 SmartN.ini 라는 텍스트 파일을 편집하여 직접 설정합니다. 스마트 네비게이션은 기능이 크게 3개가 있는데 nType=1부터 2, 3 으로 지정하여 사용할 수 있습니다. 위 구글의 예가 타입 1 형식입니다. 위 구글의 설정 내용을 보면 아래처럼 된다.
[www.google.co.kr]
nType=1
strUrlMatch=search?
strFindMatch=start=([0-9]+)
nPlusMinus=10
vkreturn=0
구글의 예를 보면 섹션은 해당 페이지의 도메인을 사용합니다. 따라서 위의 구글의 예를 들어 설정을 한다면 [www.google.co.kr] 와 같은 섹션을 사용하면 됩니다.
한가지 주의 할 점이 있는데 섹션에 사용되는 도메인이 항상 주소바에 있는 URL의 도메인과 같은 것은 아닙니다. 주소바에의 URL에 있는 도메인과 실제로 우리가 원하는 섹션란에 적어줘야 도메인은 다를 수 있다. 다시 말해서 www.dcinside.com을 가보면 www.dcinside.com은 변하지 않지만 제로보드 게시판의 도메인주소는 hit 겔러리의 경우엔 dc3.donga.com 으로 되어 있다. 실제로 게시판을 보여주는 페이지의 도메인이 섹션에 와야 한다. 웹마에서 이 실제 게시판이나 페이지의 주소를 가장 잘 파악하는 방법은 게시판 페이지 위에서 Alt + 마우스 우클릭을 하는 것이다. 마우스가 위치한 프레임만 새 탭으로 열기 때문에 거기서 실제로 섹션에 사용될 도메인을 파악할 수 있다.
구글의 검색결과는 프레임이 아닌 하나의 페이지 이므로 [www.google.co.kr]을 그대로 사용한다.
nType= 의 값으로는 0, 1, 2, 3 중에 지정 할 수 있다. 기본 값은 0 이다. 0이면 이 사이트에서는 스마트 네비게이션 기능을 사용하지 않도록 하는 것이므로 설정을 하지 않는 것이나 다름이 없다. 따라서 의미가 있는 설정값은 1 ,2 ,3 중에 하나로 하면 된다. 구글의 경우에는 URL을 조작하는 것이므로 nType=1 로 지정한다. 2와 3은 나중에 계속 설명합니다.
해당되는 도메인에서라도 더블클릭만 하면 매번 이 기능이 동작하면 오히려 불편이 생길 수 있다. 예를들어 게시판의 경우라면 게시판의 글 리스트를 보는 페이지가 있을 수 있고, 글 하나를 보고 있는 페이지가 있을 수 있다. 글 리스트를 보는 페이지에서는 더블클릭으로 이 기능을 사용하되 글 내용을 보여주는 페이지에서는 사용하고 싶지 않을 수도 있다. 리스트를 보여주는 페이지의 URL은 list.php? 로 시작하고 글 내용을 보는 페이지는 view.php? 로 시작한다면
strUrlMatch=list.php?
로 지정하면 되는 것이다. 그러면 view.php?.... URL에서는 이 기능이 동작하지 않고 특정 URL에서만 동작하도록 할 수 있다.
strUrlMatch의 값은 정규식 표현식이다. 정규식 표현식에 대해서는 나중에 다시 설명한다.
우리가 관심을 가지는 URL에서 더블클릭을 했다면 그 URL에서 우리가 관심을 가지는 변수가 있을 것이다. 구글 사이트에서는 그것이 start=10 인데, 다른 게시판의 경우에는 page=2 와 같은 것일 수도 있다. 이 경우에 우리가 찾고자 하는 값은 정확히 start=10 이라는 문자열이 아니라 "start=어떤숫자" 와 같은 표현식이다. 따라서 이렇게 표현할 수 있는 정규식으로 표현해 주어야 하는 이것을 정규식으로 표현하면 start=([0-9]+) 와 같이 된다. 잘 모른다면 숫자가 들어갈 자리에 ([0-9]+) 라고 설정해 주면 된다. page=1 이나 page=2 , page=345 등은 모두 page=([0-9]+) 로 표현될 수 있다.
숫자를 증가 시키거나 감소 시킬 때 사용한다. 구글의 경우에는 nPlusMinus=10 으로 설정했기 때문에 start=10 은 start=20 으로 + 10 이 되어 바뀐 URL로 네비게이션을 하는 것이다. 이 값을 -10 으로 지정한다면 이전 페이지로 동작을 할 것이다.
이 값이 1 이면 Ctrl+마우스 더블클릭으로 스마트 네비게이션 기능을 켜고 나서, 키보드 엔터키로도 이 기능을 계속 사용할 수 있습니다. 어떤 게시판의 글 하나를 읽을 때 단지 엔터만 눌러도 다음 글을 계속해서 볼 수 있습니다. 0으로 지정하면 마우스 더블클릭으로만 이 기능을 사용합니다.
정규식은 매우 복잡하고 어려운 분야입니다. 프로그래머들이나 알면 유용할까 일반인은 알 필요도 없고 이해하기도 쉽지 않습니다. 하지만 스마트 네비게이션을 설정하기 위해서는 한 3가지 정도만 알면 됩니다.
1) 정규식에서 숫자는 ([0-9]+) 로 표시합니다. 우리가 관심을 가지는 것은 숫자이기 때문에 이것은 확실히 알고 있어야 합니다.
2) 정규식에서 . (점) 은 \. (역슬래시 점)으로 표시합니다. 따라서 zero/view.php 라는 문자열을 찾고자 한다면 zero/view\.php 으로 strUrlMatch항목에 설정하여야 합니다.
3) 정규식에서 .* (점 별표)는 아무 문자나 계속된다는 의미입니다. 예를 들면 zero/view.php?a=123&b=456&c=678 라는 URL에 있을 때 zero/view 라는 문자열이 꼭 들어가고 c=어떤숫자 도 꼭 들어가는 URL을 찾는다고 한다면 그 정규식은 zero/view.*c=([0-9]+) 로 표시될 수 있습니다. zero/view와 c=([0-9]+) 사이에 .* (점 별표)를 붙이면 그 사이에 아무 문자가 와도 상관이 없다는 뜻이 됩니다.
사실상 우리에게는 1) 2)정도로도 거의 모든 설정을 할 수 있습니다.1) 2)의 내용도 어렵지 않습니다.
지금 까지 설명한 방식이 nType=1 입니다. 이 것은 게시판의 URL에 기반하여 동작하는 방식입니다.
이 방식은 뭐냐면 링크의 타이틀과 매칭을 검사하는 방식입니다. 다음 까페를 예를 들어 설명하겠습니다. 다음 까페의 게시물을 하나 읽어 보면 맨 하단에 항상 "아랫글" 링크가 있습니다. 마우스를 가져가 보면 자바스크립트로 된 링크인데 변하지 않는 것은 이 "아랫글" 이라는 타이틀이기 때문에 페이지의 모든 링크의 타이틀을 검사해서 타이틀이 "아랫글" 인 링크를 네비게이션 시키는 방식입니다.
[cafe101.daum.net]
nType=2
strFindMatch=아랫글
vkreturn=1
이 타이틀 매칭은 ?, * 문자와 같은 와일드 카드 문자를 사용할 수 있습니다. 예를들어 어떤 글 하나를 읽으면 다음글의 링크 타이틀이 "다음글1", "다음글2", "다음글3" 과 같은 형식으로 나온다면
strFindMatch=다음글*
로 설정하면 타이틀이 "다음글" 로 시작하는 첫 번째 링크를 클릭해 줍니다. 다음글* 은 정규식이 아니라 ? (한글자 대체), *(여러문자 대체) 와 같은 와일드카드 문자만 사용가능한 보통 문자열입니다.
매니안 사이트를 예로 들겠습니다.
[manian.intizen.com]
nType=3
strUrlMatch=board/view\.asp
strFindMatch=<IMG
src="/img/common/board_content_next.gif"
nCount=1
vkreturn=1
nNext=1
주로 매니안 사이트의 유머 게시판의 글을 맨 위에서 차례로 읽어 나가는데 전에는 nTyp=1 방식을 썼었습니다. 이 방식이 잘 동작을 하나
문제가 있는데 바로 지워진 글 번호에 대해서는 다음글로 가지지 않는다는 것이었습니다. 그래서 같은 글 번호가 한번더 들어오면 글번호를
다시한번 감소시켜서 다음 다음 글을 보게 했었는데 이것조차 잘 되지 않는 문제가 있었습니다. 근본적으로 이 문제를 해결하기 위해서는
페이지내의 다음글 링크를 마치 사용자 직접 클릭하는 수 밖에 없었습니다.
그런데 게시판의 다음글의 링크가 고정된 것이 아니고 항상 변해서 문제입니다.
링크도 계속 변하고 링크 제목도 글 제목이기 때문에 계속 변합니다. 그래서 링크의 제목으로 다음 까페 게시판 처럼 다음글로 갈수 있는
기능인 nType=2 방식을 사용할 수가 없습니다.
따라서 세번째 방식을 고안했는데 동작은 간단합니다.
예를 들어 보겠습니다.
매니안 사이트의 유머게시판의 글을 하나 읽으면 아래쪽에 이전글, 다음글 이라는 링크가 있습니다.
그 두줄의 HTML 소스를
쳐다보면
<IMG src="/img/common/board_content_prev.gif" align=absMiddle
vspace=3> : 이전글이
없습니다.<BR><IMG
src="/img/common/board_content_next.gif" align=absMiddle vspace=3>
:
<A
href="view.asp?bid=A060101&no=32993&page=1&cate=0">xp보다
2천이 짱인
이유..</A>
이렇게 됩니다. 이전글, 다음글은 이미지 이기 때문에 <IMG 태그가
두번나오고 실제적인 글의 링크가
<A href로 나옵니다.
이제부터 각 항목에 대한 설명입니다.
아래 섹션을 정해줍니다. 전에도 말씀드렸듯이 이 도메인은
주소바에 있는 것이 아니라 실제 게시판이
프레임안에 있다면 프레임안의 문서의 주소가 들어가야 한다는 것입니다. 간단하게 아는
방법은
게시글위세서 Alt+마우스 우클릭해서 게시글 페이지만 따로 뽑아서 주소를 보면 됩니다.
대부분은 같지만, 게시판만 다른
사이트의 게시판을 링크해서 쓴다면 다르게 됩니다.
[manian.intizen.com]
;그리고 타입3이라고 지정해
줍니다.
nType=3
;이것도 전하고 같습니다.
strUrlMatch=board/view\.asp
;이
부분인데 보시만 알겠지만 태그가 그대로 들어가 있습니다. 우리가 원하는 링크인
<A
href="view.asp?bid=A060101&no=32993&page=1&cate=0">
이거 바로 전에 오는 태그를 복사
해서 붙여넣기 한 것입니다. 즉 웹마는 마우스가 위치한 페이지의 소스를 열어서 이 문자열을 찾습니다.
찾기가 성공하면 이 문자열 다음에 처음 오는 href 링크를 우리가 원하는 링크로 인식을 하는 것입니다.
문자가 하나로도 틀리면
안되기 때문에 복사해서 붙여넣기 하는것이 제일 안전합니다.
strFindMatch=<IMG
src="/img/common/board_content_next.gif"
;이것은 지정하지 않아도 됩니다. 위 문자열을 한번 찾는
것입니다. 기본값은 1입니다. 페이지에서 특정
HTML 문자열을 지정하기 어려울 때 사용하면 됩니다. 보통은 우리가 원하는 링크 바로
전에오는 페이지내에서
하나밖에 없는 문자열을 찾을 예정이기 때문에 대부분은 이 값은 1입니다.
nCount=1
;한번
수행하고나서 그 다음 부터는 엔터키로 스마트 네비게이션한다는 뜻
vkreturn=1
요약하면 어떤 페이지에서 strFindMatch 에 지정한 태그 문자열을 찾고 찾은 문자열 바로 다음에 오는 <a href 의 링크 주소를 네비게이션 하도록 하는 기능이 nType=3 방식입니다.
nNext는 태그를 찾은 후에 그 다음에 오는 몇 번째 <a 태그의 href의 주소를 네비게이션할건지를 정한다. 정하지 않으면 기본 값은 1 입니다. 이 값의 사용법은 아래 DC의 임요환 갤러리를 참고하자. 사실 임요환갤러리때문에 추가된 옵션이다.
-한 사이트에서 최대 10개까지의 네비게이션을 설정할 수 있음
섹션명이
도메인이라면 [도메인][도메인1][도메인2]~~~[도메인9]까지 사용
예제는 아래와 같다. 어느 페이지에서 어떤것을 시도할 지 모르기 때문에 맨 처음부터 시도를 하다가 매치가 되고, 네비게이션이 성공하면 네비게이션을 종료한다. 따라서 가능하다면 strUrlMatch를 까다롭게 지정을 하는 것이 필요하다. strUrlMatch를 지정하지 않으면 URL 검사를 하지 않기 때문에 항상 처음 섹션에서 성공해 버리게되고 두번째 이후의 섹션은 시도하지 않게 된다.
|
[kr.dcinside5.imagesearch.yahoo.com] [kr.dcinside5.imagesearch.yahoo.com1] |
|
no=숫자 은 no=([0-9]+) = 은 = 그대로 . 은 \. & 은 & 그대로 ? 은 \? 아무문자열을 표현하려면 .* |
제 나름대로 이 기능을 유용하게 사용하고 있다. 하지만 설정하기가 까다롭고, 약간의 지식이 필요해서 이 기능을 쓰면서 편리함을 느낄 사용자가 몇 명이나 될지는 의심이 간다. 그래서 내가 할 수 있는 최선의 일은 이런 설명서를 작성하거나 질문에 답을 해주는 일이 되어 버렸다. 가끔은 사용자인터페이스의 중요성을 절실히 느낀다면서 이런 어려운 인터페이스를 만들고야 만 내 자신이 별로 맘에 안든다.