2003년 1월 8일 이후 
모두 명  오늘 명 
메인 페이지  
칼럼 보기  
카툰 보기  
게시판 가기  
사이트맵  
그밖의 것들  

가입하면 정말 편합니다;;
자유 게시판
질답 게시판
유용한 정보
 

Boards
유용한 정보
나중에 보고싶어서 찾아헤맬 것들을 미리 모아두는 곳
(건망증이 심한 저를 위한.....)

 제로보드에 트랙백 기능 넣기 (종합판)  
 리디  posted at 2005-03-11 00:33:23
11171 hits  7 comments
 http://reedyfox.com/fox NeWin reedyfox is level 39  llllllllll 
File #1 : reedyfox_zero_trackback_050310.zip (12.8 KB)   Download : 305
 퍼머링크 : http://reedyfox.com/island.php/later/73  [복사]

이 팁에 포함된 달팽이 모듈은 제로보드 배포 라이센스에 위반되는 내용을 포함하고 있습니다. 임시로 비밀글 설정을 풀어둔 것이니 참고용으로만 사용하시고, 재배포하거나 공개된 곳에 링크 걸지 말아주세요. 제가 무척 난처해집니다.

이 팁은 달팽이님과 파즈 님의 통합팩을 원본으로 하여, 믹스 님, 좋은인연 님의 확장버전까지 종합한 판입니다. 처음에 이분들의 허락을 받아 펌을 허락하지 않는 한도에서 공개를 했으나 세 분 모두 누리집을 통해 더이상 연락이 되지 않는 관계로 이렇게 파일과 함께 공개합니다.

이 팁에서는 오직 원본 제로보드에 트랙백을 보내는 기능과 받는 기능만을 적용하는 것을 목적으로 합니다. RSS 생성은 다른 분들의 팁을 참고하시기 바랍니다.


먼저 첨부된 파일을 다운받아 압축을 푸십시오.


1. zerotb.php 를 제로보드 디렉토리에 업로드합니다.
제로보드 트랙백 핑을 처리하는 파일입니다. 수정할 부분이 몇 군데 있습니다.
$_zb_url 에는 제로보드가 설치된 디렉토리까지의 URL 경로를 적어주십니오. $_zb_path 에는 그 절대경로를 적어주십시오. 이 두 가지는 제로보드 아웃로긴 등을 적용할 때 자주 나오는 것이므로 무슨 말인지 잘 이해하실 것이라 생각합니다. 끝에 '/(슬러시)'가 붙는 것 잊지 마세요.
$maxLength 에는 잘라 줄 글자수를 입력해 주세요. 트랙백을 보내면 원본글에 트랙백 핑을 쏘아보낸 글의 첫 머리가 댓글처럼 보여지게 됩니다. 이때 보여질 글자 갯수를 말합니다.
113행부터 141행까지는 생각하는섬에서 사용하고 있는 '쪽지 알림'을 위한 소스입니다. 생각하는섬에서는 대부분의 경우 쪽지로 글내용을 자동적으로 주고받습니다. 자신이 쓴 글에 트랙백이 달려도 쪽지를 받게 되며, 자신이 댓글을 남겼던 글에 트랙백이 달려도 마찬가지로 쪽지를 받습니다. 이 기능을 원하지 않는다면 그 부분을 삭제해주시면 됩니다.


2. 제로보드 디렉토리의 write_ok.php 파일을 수정합니다.
제로보드 트랙백 팁에서는 일단 글 작성을 완료한 후, 다시 글 수정으로 들어가서 트랙백 주소를 입력하도록 되어 있습니다. 새 글을 작성할 때 아직 DB상에는 아무 것도 저장이 되어 있지 않기 때문에 핑 전송이 곤란해지기 때문입니다. 따라서 글 수정할 때 동작할 수 있도록 write_ok.php 의 글수정 소스 바로 윗부분, 즉 288행에 있는

/************************************
* 수정글일때
************************************/


의 윗부분에 다음 소스를 넣어주시면 됩니다.

http://reedyfox.com/cont/050310_1.phps새창으로 열기

수정해야 할 곳이 한 군데 있습니다.

$blogname = "생각하는섬"; 자기 블로그 이름으로 수정...

소스 설명을 드리겠습니다.

첫째, 원래 제로보드 트랙백에서는 tb_functions.php 파일을 사용합니다. 하지만 이 파일을 가지고 트랙백을 보내면 에러가 뜨고 제대로 전송되지 않는 문제점이 있더군요. 이글루스와 온블로그, b2의 경우가 그랬습니다. 그래서 이 세 블로그의 경우에는 믹스새창으로 열기 님의 소스인 send_trackback.php 를 사용하게 되었습니다.

둘째, 기본적으로 제로보드 트랙백 팁은 무버블타입의 레퍼런스를 따르고 있습니다. 핑을 주고 받을 때 글 제목과 글 내용뿐만이 아니라 블로그 정보와 원본글 정보까지 나누게 되어 있습니다. 그래서 트랙백을 보낸 글 링크를 글 머리에 표시할 때, 제로보드 블로그의 경우에는 링크가 제대로 표시되지만, 그밖의 많은 경우에는 퍼머링크(원본글 진짜 주소)가 아닌, 트랙백 주소가 표시되는 문제가 생겼습니다.

이런 이유로, 트랙백 주소를 퍼머링크로 치환해주는 소스가 여기에 들어가게 되었습니다. 치환은 여러분 각자의 취향에 맞게(자주 들르는 블로그에 맞도록) 수정하시면 됩니다. 치환이 가능한 이유는, 대부분의 블로그에서 트랙백 주소와 퍼머링크가 일정한 패턴으로 통일성을 갖기 때문입니다. 예를 들어 네이버의 경우,

트랙백 주소가 http://블로그주소/tb/글번호 이면
퍼머링크는 http://블로그주소/글번호입니다.

따라서 네이버는 트랙백 주소의 /tb/ 부분만 / 로 치환하면 제대로 된 퍼머링크가 보여지게 되겠죠? 쉽습니다. 소스를 잘 들여다 보세요.


3. send_trackback.php 파일과 tb_functions.php 파일을 업로드합니다.
물론 제로보드 디렉토리를 말하는 것이며 tb_functions.php 파일은 올리기 전에 맨 앞부분을 수정해주어야 합니다. 아까 수정한 것과 중복인 것 같은데 귀찮음으로 테스트를 해보진 않았습니다. -_-;;;


4. 스킨 파일중 write.php 를 수정합니다.
트랙백 주소를 입력하는 부분을 삽입합니다. 다음은 제목을 입력하는 곳 아래에 붙인 모습입니다. (검은 부분은 원래 있는 부분이고, 빨간 부분이 추가한 것 - nzeo_ver4 스킨)

<tr valign=top>
  <td><font class=list_eng><b>Subject</b></font></td>
  <td><input type=text name=subject value="<?=$subject?>" <?=size(60)?> maxlength=200 style=width:99% class=input></td>
</tr>

<tr>
        <td width=80 align=right class=list_eng><b>Trackback </b></td>
        <? if($mode == "modify"){?>
        <td><input type=text name=trackback_url class=input style=width:70%></td>
        <? }else {?>
        <td><input type=hidden name=trackback_url> 트랙백으로 작성하시려면 먼저 작성완료하고 저장하셔야 합니다</td>
        <? }?>
</tr>



5. 다음은 스킨에서 트랙백을 보여줄 부분입니다.
스킨 파일 중 view.php 를 수정합니다.
파일 맨 마지막에 다음을 추가하시면 됩니다. 스킨에 따라 디자인은 수정해야 할 수도 있습니다.

http://reedyfox.com/cont/050310_2.phps새창으로 열기

그리고 스킨 파일 디렉토리에 다음 파일을 업로드합니다.

comment_view.php
view_tback.php
__head.php


comment_view.php 파일 14행에는 수정해야 할 부분이 있습니다.


6. 다음은 include/list_check.php 파일을 수정합니다.
소스를 보면 68행쯤

$comment_num="[".$data[total_comment]."]"; // 간단한 답글 수
if($data[total_comment]==0) $comment_num="";


이렇게 된 부분이 있습니다. 그것을 다음과 같이 바꿉니다.

// 새로운 코멘트 표시
        $trackback_cnt = mysql_fetch_array(mysql_query("select count(*) cnt from zetyx_board_comment"."_$id where parent=$data[no] and password='TrackBack'"));
        $data[total_comment] = $data[total_comment] - $trackback_cnt[cnt];
        if($data[total_comment]=="0") $data[total_comment] = "";                
    if($trackback_cnt[cnt]=="0") $trackback_cnt[cnt] ="";

        if($data[total_comment]||$trackback_cnt[cnt]) {
                $comment_num = $data[total_comment]."+<font color=red>".$trackback_cnt[cnt]."</font>";
        } else $comment_num="";


이것은 트랙백의 숫자를 표시해주는 것입니다. 트랙백은 결국 댓글(코멘트)로 저장이 되므로 '전체 댓글 갯수' 빼기 '순수한 댓글 갯수' 가 바로 '순수한 트랙백 갯수'가 됩니다. 디자인은 취향에 따라 달리 수정하셔도 좋습니다.


이상은 글목록을 수정해주는 것이었으므로 최근게시물을 사용할 경우, 최근게시물에서 보여지는 트랙백 갯수 부분도 수정을 해주어야겠지요. outlogin.php 를 열면 if($data[total_comment]) $comment = "[".$data[total_comment]."]"; else $comment=""; 라고 된 부분이 딱 하나 나옵니다.(237행쯤) 그것을 다음과 같이 바꿔줍니다. 방식은 똑같습니다.

                // 트랙백 갯수를 빼주기
                $trackback_cnt = mysql_fetch_array(mysql_query("select count(*) cnt from zetyx_board_comment"."_$id where parent=$data[no] and password='TrackBack'"));
            $data[total_comment] = $data[total_comment] - $trackback_cnt[cnt];
            if($data[total_comment]=="0") $data[total_comment] = "";
            if($trackback_cnt[cnt]=="0") $trackback_cnt[cnt] ="";

                if($data[total_comment]||$trackback_cnt[cnt]) {
                $comment = $data[total_comment]."+<font color=red>".$trackback_cnt[cnt]."</font>";
        } else $comment="";


(↑ 이건 테스트 안해봤는데 에러 안 날란가 모르겠습니다;;)


자, 그리고 중요한 부분입니다. 트랙백은 댓글로 저장된다고 말씀드렸습니다. 그러므로 일반 댓글을 출력할 때는 트랙백에 해당하는 것들을 제외해줘야 합니다. 따라서 제로보드 디렉토리의 (스킨 파일 아님!!) view.php 를 열어 40행 부분을 다음과 같이 추가해줍니다.

// 간단한 답글의 데이타를 가지고옴;;
        $_dbTimeStart = getmicrotime();
        $view_comment_result=mysql_query("select * from $t_comment"."_$id where parent='$no' and password!='Trackback' order by no asc");
        $_dbTime += getmicrotime()-$_dbTimeStart;




7. 트랙백 현황을 보기 좋게 표시해주기 위한 수정입니다.
앞에서 write_ok.php 를 수정할 때 소스 중에 'hyperlink' 어쩌고....하는 이상한 문자들이 들어가 있는 것을 보셨을 겁니다. 왜 그런 게 들어갔느냐.... 제로보드에서 글을 쓸 때는 'html 기능'을 쓸 수도, 쓰지 않을 수도 있습니다. 그런데 그것에 관계없이 일괄적으로 트랙백 링크를 달아주려면 html 태그가 아닌 정규표현식 등을 이용한 치환(또 나왔다;;) 방법을 사용해주는 방법밖에 없습니다. 그래서 쓰는 거예요.

먼저 다시 write_ok.php 로 돌아가서, 565행쯤에 다음과 같은 부분이 있습니다.

                $next_no=$next_data[no];
                $child="0";
                $depth="0";
                $arrangenum="0";
                $father="0";
                $division=add_division();


이것을 다음과 같이 딱 한 줄만 추가해주세요.

                $memo = "[ br] ".$memo; // [와 b 사이에 공백 붙일 것!!!! 치환을 막기 위해 일부러 띄운 것임
                $next_no=$next_data[no];
                $child="0";
                $depth="0";
                $arrangenum="0";
                $father="0";
                $division=add_division();


소스를 설명하자면, 새글을 쓰면 글 맨 앞에 '[ br]'이라는 문자를 하나 삽입해줍니다. 이것을 곧 등장하겠지만 <br> 이라는 태그로 치환됩니다. 이렇게 줄띄우기 태그를 넣은 것은 트랙백을 보내면 글머리에 트랙백 보낸 곳 링크가 표시되는데, 본문과 딱 달라붙어서 보기가 안 좋거든요. 그걸 막으려고 하는 겁니다.

include/list_check.php 99행쯤을 보시면

                if($data[use_html]<2) $memo=$data[memo]=nl2br($data[memo]);
                $memo=$data[memo];


이런 부분이 있습니다. 그 아래에 다음을 넣어주세요.

$memo=str_replace("|[","|[", $memo);
$imageBoxPattern = "/\[hyperlink\|([^[]*)\|([^[]*)\|hyperlink\]/i";
$memo=preg_replace($imageBoxPattern,"<a href=\"\\1\">\\2</a><a href=\"\\1\" target=\"_blank\"><img src=\"새창을 나타낼 적당한 이미지 주소.gif\" style=\"margin:0 0 6 2\" width=\"11\" border=\"0\" align=\"absmiddle\" alt=\"새창으로 열기\"></a>", $memo);
$memo = str_replace("【 b】" ,"<b>", $memo); // b 앞에 공백 없앨 것
$memo = str_replace("【  /b】" ,"</b>", $memo);// /b 앞에 공백 없앨 것
$memo = str_replace("[ br]" ,"<br />", $memo);// 역시 b 앞에 공백 없앨 것


마지막으로 outlogin.php 도 수정해주어야 합니다. 앞에서도 설명했듯이 최근게시물을 통해 불러올 경우를 대비해야하기 때문이죠.

outlogin.php 에서 // 공지사항 형식을 만들때 사용 이라는 부분을 찾아 거기에서 10줄 정도 내려가면

                        if($data[ismember]) {
                                $imageBoxPattern = "/\[img\:(.+?)\.(jpg|gif)\,align\=([a-z]){0,}\,width\=([0-9]+)\,height\=([0-9]+)\,vspace\=([0-9]+)\,hspace\=([0-9]+)\,border\=([0-9]+)\]/i";
                                $memo=preg_replace($imageBoxPattern,"<img src='".$_zb_url."icon/member_image_box/$data[ismember]/\\1.\\2' align='\\3' width='\\4' height='\\5' vspace='\\6' hspace='\\7' border='\\8'>", stripslashes($memo));
                        }


이런 부분이 있습니다. 거기에 다음과 같이 추가해주세요.

                        if($data[ismember]) {
                                $imageBoxPattern = "/\[img\:(.+?)\.(jpg|gif)\,align\=([a-z]){0,}\,width\=([0-9]+)\,height\=([0-9]+)\,vspace\=([0-9]+)\,hspace\=([0-9]+)\,border\=([0-9]+)\]/i";
                                $memo=preg_replace($imageBoxPattern,"<img src='".$_zb_url."icon/member_image_box/$data[ismember]/\\1.\\2' align='\\3' width='\\4' height='\\5' vspace='\\6' hspace='\\7' border='\\8'>", stripslashes($memo));
                                $memo=str_replace("|[","|& #91;", $memo); // # 앞의 공백 지울 것
                                $imageBoxPattern = "/\[hyperlink\|([^[]*)\|([^[]*)\|hyperlink\]/i";
                                $memo=preg_replace($imageBoxPattern,"<a href=\"\\1\">\\2</a><a href=\"\\1\" target=\"_blank\"><img src=\"새창을 나타낼 적당한 이미지 주소.gif\" style=\"margin:0 0 6 2\" width=\"11\" border=\"0\" align=\"absmiddle\" alt=\"새창으로 열기\"></a>", $memo);
                                $memo = str_replace("【 b】" ,"<b>", $memo);// b 앞에 공백 없앨 것
                                $memo = str_replace("【 /b】" ,"</b>", $memo);// /b 앞에 공백 없앨 것
                                $memo = str_replace("[ br]" ,"<br />", $memo); // 역시 b 앞에 공백 없앨 것
                        }


아까와 똑같습니다. 치환해주는 것이죠.


8. 끝으로 트랙백 삭제 루틴을 위한 수정입니다.
트랙백은 아이프레임 안에 출력되어 보여집니다. 문제는 삭제를 하면 아이프레임 안에서 페이지 전체가 다시 로딩이 된다는 겁니다. 그것을 막기 위해 del_comment_ok.php 를 열어 44행부터 46행까지를 다음과 같이 바꿔줍니다.

// 페이지 이동
        switch ($gowhere) {
                case tback:
                        echo "<script>
                                        parent.location.reload();
                                        </script>";
                        break;
                default:
                        if($setup[use_alllist]) movepage("zboard.php?id=$id&page=$page&page_num=$page_num&select_arrange=$select_arrange&desc=$des&sn=$sn&ss=$ss&sc=$sc&keyword=$keyword&no=$no");
                        else movepage("view.php?id=$id&page=$page&page_num=$page_num&select_arrange=$select_arrange&desc=$des&sn=$sn&ss=$ss&sc=$sc&keyword=$keyword&no=$no");
        }


그러나 이대로만 하면 삭제시의 변수가 넘어가지 않습니다. 그래서 del_comment.php 를 열어 $target="del_comment_ok.php"; 를 다음과 같이 수정합니다.

        switch ($gowhere) {
                case tback:
                        $target="del_comment_ok.php?gowhere=tback";
                        break;
                default:
                        $target="del_comment_ok.php";
        }


스위치문으로 된 이유는 제가 사용하고 있는 소스에서 저 부분만 남기고 지웠기 때문입니다.


오류가 나거나 문제가 있으면 바로 알려주시기 바랍니다. 질문은 질답게시판에서만 받으며 질문 댓글은 삭제하겠습니다.


  PRINT Text  PRINT HTML  

  Trackbacks for this Posting (18)
'생각하는섬 바닷가 - 제로보드에 트랙백 기능 넣기 (종합판)'

LIST ALL               GO TO THE TOP

- 이글 위에 있는 글 : 게시물 신고 시스템 추가판
- 이글 아래 있는 글 : 접속하면 항상 최근 글이 펼쳐진 상태가 되기

Copyright 1999-2020 Zeroboard

 
생각하는 섬, 바닷가는 리디가 운영하는 개인 칼럼 사이트이며 일부 컨텐츠는 리디 외의 필진에 의해 작성되었습니다. 이곳의 모든 컨텐츠는 출처(Deep Link URL) 및 작가를 명시하는 조건으로 비상업적 용도의 전제/복제가 가능합니다. 그러나 이곳에 게재된 컨텐츠의 취지 또는 작가의 의도가 왜곡되어 해석될 수 있는 컨텐츠 변형은 금지합니다. 이곳에 기재된 전자우편주소에 대한 일체의 수집행위를 거부합니다.(게시일 2008년 1월 1일)
Google
  위쯔  
Window close