태터툴즈 절대 주소 패치

얼마 전 태터툴즈들 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

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

이렇게 하는 이유는 간단하다. 글에 있는 모든 링크를 절대 주소로 만들기 위해서이다. 이 패치를 하지않으면 블로그 아래쪽의 페이저(|1|2|3|...|697|)의 링크는 https://offree.net/?page=1 처럼 표시되지만 이 패치를 해주면 아래쪽 페이저에도 https://offree.net/entry/Join-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
글쓴이
author image
운영체제의 모든 것을 운영하고 있는 IT 블로거. IT 블로거라는 이름은 현재 시국때문에 시사 블로거로 바뀐 상태다. 그러나 나는 아직도 시사와 사회에 관심이 많은 IT 블로거일 뿐이다. 컴퓨터, 운영체제, 시사, 가족, 여행, 맛집, 리뷰등과 살면서 느끼는 소소한 일상이 블로그의 주제이다. 왼쪽의 아이콘은 둘째 딸 다예가 그린 내 모습이다.
오늘의 글
인기있는 글
조회수 많은 글 | 베오베
댓글 많은 글 | 베오베

Trackback

Trackback Address :: http://offree.net/trackback/775

Facebook

Comments

  1. 유마 2007/03/24 07:29

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

    perm. |  mod/del. reply.
    • 도아 2007/03/24 07:32

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

  2. 유마 2007/03/26 14:58

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

    perm. |  mod/del. reply.
    • 도아 2007/03/26 16:27

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

  3. 유마 2007/04/01 23:09

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

    perm. |  mod/del. reply.
    • 도아 2007/04/02 09:30

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

댓글로 기쁨을 나눠요!

(옵션: 없으면 생략)

글을 올릴 때 [b], [i], [url], [img]와 같은 BBCode를 사용할 수 있습니다.