태터툴즈 절대 주소 패치(1/3/1087)


얼마 전 태터툴즈들 1.1.2로 판올림하면서 블로그의 환경 설정대로 모든 주소가 숫자가 아닌 제목으로 표시될 수 있도록 blog/entry/index.php 파일을 패치했다. 이렇게 패치한 이유는 블로그 설정에서 숫자 대신 문자를 사용하도록 설정하면 모든 주소가 제목으로 표시되어야 하는데 접근하는 주소만 제목으로 표시되고 내부 주소는 여전히 숫자로 표시되기 때문이었다. 사실 숫자로 표시한 주소가 문자로 표시한 주소보다는 간단하며, URL 인코딩에 의해 글자가 깨지는 것처럼 보이지 않기 때문에 더 유리할 것 같지만 검색 엔진으로 검색할 때에는 의미없는 숫자 보다는 문자가 더 잘 검색되기 때문이다.

처음에는 문자로 표시하는 주소는 모두 blog/entry/index.php에서 처리하므로 이 파일만 패치하면 될 것으로 생각했다. 그러나 맑게개인오후 님의 답글 처럼 blog/entry/index.php 파일 외에 상당히 많은 파일을 패치해야 모든 주소가 문자로 표시되었다. 그러나 문제는 blog/entry/index.php 파일은 어차피 문자 주소로 찾아올 경우 글의 내용을 표시하는 파일이라 모두 문자로 표시하도록 패치해도 상관없지만 다른 파일들은 블로그의 환경 설정에 따라 동작해야 하기 때문에 결국 오늘 다시 태터툴즈 를 패치하게 되었다.

이 패치는 지난번 패치와 비슷하다. 아울러 모든 파일에 같은 패치를 적용할 수 있다. 다만 blog/search/index.php 파일은 검색 결과를 표시하는 파일로 찾은 글의 목록외에 댓글 목록을 표시하는 부부이 더 있다. 따라서 이 댓글 목록도 블로그 환경 설정에 따라 숫자, 또는 제목으로 표시할 수 있도록 추가로 패치 이 패치는 가급적 blog/index.php 파일까지 패치하는 것이 좋다. blog/index.php 파일의 패치는 지난 번 글에서 설명했지만 MSIE 6과 MSIE 7에서 문자 주소를 처리하는 방법이 달라 두 브라우저 모두에서 동작할 수 있도록 패치했다.

blog/index.php
보통 http://offree.net/처럼 블로그의 주소를 입력하면 관리도구/스킨/출력 설정에서 설정한 한 쪽당 글 수에 따라 블로그 페이지가 표시된다. 그러나 필자는 한 쪽당 글 수를 1로 설정하고 있고 블로그에 접속하면 바로 가장 최근 글로 가도록 패치해서 사용하고 있다. 예를들어 주소에서 http://offree.net/을 치고 들어오면 자동으로 최근 글인 http://offree.net/entry/블로그-방문자- ··· EB%8B%A4로 연결된다.

이렇게 하는 이유는 간단하다. 글에 있는 모든 링크를 절대 주소로 만들기 위해서이다. 이 패치를 하지않으면 블로그 아래쪽의 페이저(|1|2|3|...|697|)의 링크는 http://offree.net/?page=1 처럼 표시되지만 이 패치를 해주면 아래쪽 페이저에도 http://offree.net/entry/Me2Day에-가입했습니다처럼 절대 주소로 표시되기 때문이다.

페이지도 절대 주소로 표시

이렇게 패치하는 방법은 간단하다. 일단 FTP를 지원하는 편집기(예: EditPlus )로 /blog/index.php 파일을 열고 가장 마지막의 print $view를 주석으로 처리한 뒤 다음처럼 세 줄을 추가하면된다.

패치
//print $view;
if(ereg('MSIE 6',$_SERVER['HTTP_USER_AGENT'])) 
	$slogan=iconv('UTF-8', 'EUC-KR', $entries[0]['slogan']);
else $slogan=$entries[0]['slogan'];
header("Location:".$blogURL."/entry/".$slogan);
?>

절대 주소
필자는 얼마 전부터 절대 주소를 표시하는 방법을 숫자가 아닌 문자로 하고 있다. SEO에서 주장하는 것처럼 검색 엔진에 더 잘 검색되는지 확인하기 위한 것이다. 그런데 문제는 페이지의 절대 주소는 다 문자로 표시되는데 페이지 내의 최근 글, 댓글, 걸린 글은 문자가 아니라 숫자로 표시된다. 따라서 필자는 이 부분 역시 패치해서 사용하고 있다.

페이지내의 모든 링크를 문자로 표시

공통 패치
블로그의 환경 설정에 따라 모든 링크를 숫자 또는 문자로 표시하려면 상당히 많은 파일을 패치해야 한다. 그러나 패치하는 방법은 모두 같으며 패치해야 하는 파일은 다음과 같다.
패치할 파일
blog/archive/index.php
blog/archive/item.php
blog/category/index.php
blog/entry/index.php
blog/guestbook/index.php
blog/location/index.php
blog/notice/index.php
blog/notice/item.php
blog/page/index.php
blog/page/item.php
blog/search/index.php
blog/tag/index.php

  • 최근글
    변경전
    getRecentEntries 함수
    $result=DBQuery::query("SELECT e.id, e.title, e.comments
    		FROM {$database['prefix']}Entries e
    		LEFT JOIN {$database['prefix']}Categories c ON e.owner = c.owner 
    		AND e.category = c.id
    		WHERE e.owner = $owner AND e.draft = 0 $visibility AND e.category >= 0
    		ORDER BY published DESC LIMIT {$skinSetting['entriesOnRecent']}");
    
    getRecentEntriesView 함수
    global $blogURL,$skinSetting;
    
    dress('rctps_rep_link',"$blogURL/{$entry['id']}",$view);
    변경후
    getRecentEntries 함수
    $result=DBQuery::query("SELECT e.id, e.title, e.comments, e.slogan
    		FROM {$database['prefix']}Entries e
    		LEFT JOIN {$database['prefix']}Categories c ON e.owner = c.owner 
    		AND e.category = c.id
    		WHERE e.owner = $owner AND e.draft = 0 $visibility AND e.category >= 0
    		ORDER BY published DESC LIMIT {$skinSetting['entriesOnRecent']}");
    
    getRecentEntriesView 함수
    global $blogURL,$skinSetting,$blog;
    
    $subURL=$blog['useSlogan']?"entry/{$entry['slogan']}":"{$entry['id']}"; 
    dress('rctps_rep_link',"$blogURL/$subURL",$view);

  • 댓글
    변경전
    getRecentComments 함수
    	$sql=doesHaveOwnership()?"SELECT * FROM
    			{$database['prefix']}Comments
    		WHERE
    			owner = $owner".($isGuestbook!=false?" AND entry=0":" AND entry>0")."
    			AND isFiltered = 0
    		ORDER BY
    			written
    		DESC LIMIT ".($count!=false?$count:$skinSetting['commentsOnRecent']):
    		"SELECT r.* 
    		FROM
    			{$database['prefix']}Comments r
    			LEFT JOIN {$database['prefix']}Entries e ON r.owner = e.owner 
    			AND r.entry = e.id
    			LEFT JOIN {$database['prefix']}Categories c ON e.owner = c.owner
    			AND e.category = c.id
    		WHERE
    			r.owner = $owner AND e.draft = 0 AND e.visibility >= 2 AND
    			(c.visibility > 1 OR e.category = 0) ".($isGuestbook!=false?"
    			AND r.entry = 0":" AND r.entry > 0")." AND isFiltered = 0
    		ORDER BY
    			r.written
    		DESC LIMIT
    			".($count!=false?$count:$skinSetting['commentsOnRecent']);
    
    getRecentCommentsView 함수
    global $blogURL,$skinSetting;
    
    dress('rctrp_rep_link',"$blogURL/{$comment['entry']}#comment{$comment['id']}",$view);
    변경후
    getRecentComments 함수
    	$sql=doesHaveOwnership()?"SELECT r.*, e.slogan
    		FROM
    			{$database['prefix']}Comments r, {$database['prefix']}Entries e
    		WHERE
    			r.owner = $owner".($isGuestbook!=false?" AND r.entry=0":" 
    			AND r.entry>0")."AND r.isFiltered = 0 AND r.entry = e.id
    		ORDER BY
    			r.written
    		DESC LIMIT ".($count!=false?$count:$skinSetting['commentsOnRecent']):
    		"SELECT r.*, e.slogan
    		FROM
    			{$database['prefix']}Comments r
    			LEFT JOIN {$database['prefix']}Entries e ON r.owner = e.owner 
    			AND r.entry = e.id
    			LEFT JOIN {$database['prefix']}Categories c ON e.owner = c.owner
    			AND e.category = c.id
    		WHERE
    			r.owner = $owner AND e.draft = 0 AND e.visibility >= 2 AND
    			(c.visibility > 1 OR e.category = 0) ".($isGuestbook!=false?"
    			AND r.entry = 0":" AND r.entry > 0")." AND isFiltered = 0
    		ORDER BY
    			r.written
    		DESC LIMIT
    			".($count!=false?$count:$skinSetting['commentsOnRecent']);
    
    getRecentCommentsView 함수
    global $blogURL,$skinSetting,$blog;
    
    $subURL=$blog['useSlogan']?"entry/{$comment['slogan']}":"{$comment['entry']}"; 
    dress('rctrp_rep_link',"$blogURL/$subURL#comment{$comment['id']}",$view);

  • 걸린글
    변경전
    getRecentTrackbacks 함수
    	$sql=doesHaveOwnership()?"SELECT *
    		FROM
    			{$database['prefix']}Trackbacks
    		WHERE
    			owner = $owner AND isFiltered = 0
    		ORDER BY
    			written
    		DESC LIMIT ".($count!=false?$count:$skinSetting['trackbacksOnRecent']):
    		"SELECT t.*
    		FROM
    			{$database['prefix']}Trackbacks t
    			LEFT JOIN {$database['prefix']}Entries e ON t.owner = e.owner 
    			AND t.entry = e.id
    			LEFT JOIN {$database['prefix']}Categories c ON e.owner = c.owner
    			AND e.category = c.id
    		WHERE
    			t.owner = $owner AND e.draft = 0 AND e.visibility >= 2 AND
    			(c.visibility > 1 OR e.category = 0) AND t.isFiltered = 0
    		ORDER BY
    			t.written
    		DESC LIMIT ".($count=false?$count:$skinSetting['trackbacksOnRecent']);
    
    getRecentTrackbacksView 함수
    dress('rcttb_rep_link',"$blogURL/{$trackback['entry']}#trackback{$trackback['id']}",$view);
    변경후
    getRecentTrackbacks 함수
    	$sql=doesHaveOwnership()?"SELECT t.*, e.slogan
    		FROM
    			{$database['prefix']}Trackbacks t, {$database['prefix']}Entries e
    		WHERE
    			t.owner = $owner AND t.isFiltered = 0 AND t.entry = e.id
    		ORDER BY
    			t.written
    		DESC LIMIT ".($count!=false?$count:$skinSetting['trackbacksOnRecent']):
    		"SELECT t.*, e.slogan
    		FROM
    			{$database['prefix']}Trackbacks t
    			LEFT JOIN {$database['prefix']}Entries e ON t.owner = e.owner 
    			AND t.entry = e.id
    			LEFT JOIN {$database['prefix']}Categories c ON e.owner = c.owner
    			AND e.category = c.id
    		WHERE
    			t.owner = $owner AND e.draft = 0 AND e.visibility >= 2 AND
    			(c.visibility > 1 OR e.category = 0) AND t.isFiltered = 0
    		ORDER BY
    			t.written
    		DESC LIMIT ".($count=false?$count:$skinSetting['trackbacksOnRecent']);
    
    getRecentTrackbacksView 함수
    global $blogURL,$skinSetting,$blog;
    
    $subURL=$blog['useSlogan']?"entry/{$trackback['slogan']}":"{$trackback['entry']}"; 
    dress('rcttb_rep_link',"$blogURL/$subURL#trackback{$trackback['id']}",$view);

    blog/search/index.php
    blog/search/index.php 파일은 검색한 결과를 보여주는 파일로서 글을 검색한 글 목록댓글 목록을 표시해준다. 문제는 글 목록은 정상적으로 문자로 표시되는데 댓글 목록은 문자가 아니라 숫자로 표시된다. 따라서 댓글 목록 역시 블로그 설정에 따라 숫자 또는 문자로 표시하고 싶다면 다음처럼 패치하면 된다.
    변경전
    dress('rplist_rep_regdate',fireEvent('ViewCommentListDate',
    	Timestamp::format3($item['written'])),$itemView);
    dress('rplist_rep_link',"$blogURL/{$item['entry']}#comment{$item['id']}",$itemView);
    변경후
    $subURL=$blog['useSlogan']?"entry/{$item['slogan']}":"{$item['entry']}"; 
    dress('rplist_rep_regdate',fireEvent('ViewCommentListDate',
    	Timestamp::format3($item['written'])),$itemView);
    dress('rplist_rep_link',"$blogURL/$subURL#comment{$item['id']}",$itemView);
  • 지난 번과 마찬가지로 프로그램에 대한 지식이 전혀 없어 소스를 패치할 수 없는 사람은 다음 링크에서 내려받아 사용하기 바란다.

    내려받기

    한 가지 주의할 것은 이 패치느 태터툴즈 1.1.2.1에만 사용할 수 있다.

    "태터툴즈" 카테고리의 다른 글

    2007/03/24 06:12 2007/03/24 06:12
    촛불 문화제 소식
    컴관련
    오늘의글
    인기글

    걸린글 0 댓글 6

    RSS : http://offree.net/rss/response/775

    걸린글 : http://offree.net/trackback/775

    1. 유마 2007/03/24 07:29 address edit & del reply

      오, 이거는... 메인페이지로 접속했을 때, 주소값이 제대로 나오네요~

      • 도아 2007/03/24 07:32 address edit & del

        그렇게 수정한 것입니다. MSIE 6과 7의 기본 문자 집합이 달라서 발생하는 것 같습니다.

    2. 유마 2007/03/26 14:58 address edit & del reply

      아, 이걸 패치 하고 나니... 오픈 아이디로 로그인 할 수 있도록 해주는 플러그인이 안되는 군요.
      그게, 블로그의 메인을 읽어와야 되는데 아무래도 메인을 못 읽으니깐 안되는 것 같습니다. OTL

      • 도아 2007/03/26 16:27 address edit & del

        blog/index.php 파일만 원래의 파일로 바꾸면 됩니다.

    3. 유마 2007/04/01 23:09 address edit & del reply

      이번에 나온 버전 패치를 기다리고 있어요. 밑에 있던 myeolin 이랑 다 같이~ +_=a
      도아님 패치 나오면 저도 업데이트를.. --a

      • 도아 2007/04/02 09:30 address edit & del

        바로 패치하기는 힘듭니다. 일요일을 다른 곳에 투자하니 월요일이 바쁘군요.