트랙백 기능을 네이버 블로그 처럼 하려면?
저는 네이버 블로그 계정(pnk5)을 하나 가지고 있는데 그곳에서 사용하는 트랙백 기능과 그누보드를 기반으로 만든 제 홈페이지의 트랙백 기능이 차이가 나는 듯합니다.
네이버에서는 제가 글(B)을 하나 작성한 후(즉 새 글이 아닌 수정모드에서) 네이버에 있는 다른 글(A)로 트랙백(엮인글)을 걸으면 다른 글(A)에 엮인글이 추가 되면서 제 글(B)의 제목/내용 일부가 A의 본문 아래에 잘 나타납니다. 그리고 제글(B)에도 다른 글 (A)의 제목/내용 일부가 본문 아래에 표시됩니다. 또한 제 글 B에 다른 사람 글 E, F, G와 트랙백을 걸면 마찬가지로 A처럼 모두가 제대로 됩니다.
그런데 제 홈페이지(www.biz-nara.com)에서는 문제는
문제 1.
(수정 모드가 아닌) 새 글(C)을 만들면서 네이버 다른 글(A)의 트랙백 주소를 복사해와 붙여 넣으면 글 A에는 제 글(C)의 제목/내용 일부가 아래에 붙으며 트랙백이 걸린게 확인되지만 제 글C에는 아무것도 나타나지 않는 점입니다. 대신 다른사람 글, 가령 A, E,F,G 에서 제 글(C)로 트랙백을 걸어 주면 C글 본문 아래에 트랙백 건 글의 제목/내용 일부가 나타납니다.
결국 트랙백을 건 다른 글의 정보가 댓글 처럼 본문 아래에 뿌려 주는 PHP 구문을 추가해야 할 것 같은데 어디에서 어떻게해야 할 까요?
문제 2
글 C을 만든 후에 수정 모드에서 글 A의 트랙백 주소를 붙이고 ping을 체크해 전송하면 "올바른 url이 아닙니다"라는 에러 메세지만 나오고 트랙백이 안걸립니다. 다른 사람 글 E, F, G에도 마찬가지
그 이유를 모르겠는데요, 그래서 해당 화일들을 첨부해 올립니다. (같은 주소 복사를 여러번 반복해서 제대로 안 먹히는 것인가?)
위 현상을 보고 저는 네이버 블로그 끼리만 트랙백이 제대로 되는 것이고 그누보드의 제 홈페이지는 새글을 쓰면서 최초의 트랙백 오직 하나에만 가능한 걸로 오해했던 것입니다. (정말로 그런거라면 트랙백을 아예 없애는게 낫겠죠.)
네이버에서는 제가 글(B)을 하나 작성한 후(즉 새 글이 아닌 수정모드에서) 네이버에 있는 다른 글(A)로 트랙백(엮인글)을 걸으면 다른 글(A)에 엮인글이 추가 되면서 제 글(B)의 제목/내용 일부가 A의 본문 아래에 잘 나타납니다. 그리고 제글(B)에도 다른 글 (A)의 제목/내용 일부가 본문 아래에 표시됩니다. 또한 제 글 B에 다른 사람 글 E, F, G와 트랙백을 걸면 마찬가지로 A처럼 모두가 제대로 됩니다.
그런데 제 홈페이지(www.biz-nara.com)에서는 문제는
문제 1.
(수정 모드가 아닌) 새 글(C)을 만들면서 네이버 다른 글(A)의 트랙백 주소를 복사해와 붙여 넣으면 글 A에는 제 글(C)의 제목/내용 일부가 아래에 붙으며 트랙백이 걸린게 확인되지만 제 글C에는 아무것도 나타나지 않는 점입니다. 대신 다른사람 글, 가령 A, E,F,G 에서 제 글(C)로 트랙백을 걸어 주면 C글 본문 아래에 트랙백 건 글의 제목/내용 일부가 나타납니다.
결국 트랙백을 건 다른 글의 정보가 댓글 처럼 본문 아래에 뿌려 주는 PHP 구문을 추가해야 할 것 같은데 어디에서 어떻게해야 할 까요?
문제 2
글 C을 만든 후에 수정 모드에서 글 A의 트랙백 주소를 붙이고 ping을 체크해 전송하면 "올바른 url이 아닙니다"라는 에러 메세지만 나오고 트랙백이 안걸립니다. 다른 사람 글 E, F, G에도 마찬가지
그 이유를 모르겠는데요, 그래서 해당 화일들을 첨부해 올립니다. (같은 주소 복사를 여러번 반복해서 제대로 안 먹히는 것인가?)
위 현상을 보고 저는 네이버 블로그 끼리만 트랙백이 제대로 되는 것이고 그누보드의 제 홈페이지는 새글을 쓰면서 최초의 트랙백 오직 하나에만 가능한 걸로 오해했던 것입니다. (정말로 그런거라면 트랙백을 아예 없애는게 낫겠죠.)
|
댓글을 작성하시려면 로그인이 필요합니다.
댓글 11개
우선 문제 1은, 지난번 글의 댓글에 기본적인 방법을 남겼었습니다.
http://sir.co.kr/bbs/board.php?bo_table=g4_qa&wr_id=226907
문제는 그누보드의 트랙백 주소는 맨 마지막의 트랙백 유니크 키만 삭제하면, 그 자체만으로도 원글에 접속을 할 수 있지만,
다른 트랙백 주소들은, 그 나름대로의 주소 포멧이 있어서 간단하지는 않습니다.
예를 네이버는 http://blog.naver.com/tb/네이버아이디/글아이디 형식인데
실제 글 주소는 http://blog.naver.com/네이버아이디/글아이디 입니다.
즉, 화면에 트랙백을 보낸 원글의 주소를 만들어 뿌려줄때, 위와같은 처리를 해주어야 합니다.
간단히 그누보드와 네이버블로그만 처리하자면,
<? if ($view['wr_trackback']) {
if (preg_match('/blog\.naver\.com\/tb/', $view['wr_trackback'])) { // 네이버 블로그 트랙백
$trackback_url = preg_replace('/tb\//', "", $view['wr_trackback']);
}elseif ( preg_match('/bbs\/tb\.php/', $view['wr_trackback'])) { // 그누보드 트랙백
$trackback_url = preg_replace('/\/[^\/]*$/', "", $view['wr_trackback']);
}
echo "<div>트랙백 보낸주소: <a href='$trackback_url'>$trackback_url</a></div>"; }
?>
정도면 되지 않을까 합니다.
####
문제 2는, 저는 네이버로 트랙백 보내는 것은 잘 작동하는데요? ^^;
네이버 트랙백 주소가 맞는지 한번 더 확인해 보시겠어요?
하지만 더 큰 문제는, 글 수정시 수정된 트랙백은, 글에 저장이 안된다는 점입니다. -_-;
bbs/write_update.php의 412 줄쯤에
$trackback_set = "";
if ($wr_trackback && $re_trackback)
$trackback_set = "wr_trackback = '$wr_trackback',";
를 넣으시고, 그 아래 $sql 만드는 부분 중간쯤에 ( mb_id = '$mb_id', 윗줄 쯤)
$trackback_set
를 추가하면, 수정된 트랙백 주소로 변경됩니다. 음.. 원칙적으로 하자면, 글 작성시 보낸 트랙백주소도 같이 저장해야 되는데.. 이는 이전 글의 복수 트랙백과 같이 함께 구현해야 되지 않을까 합니다.
첨부하신 화일은 열어보지 않았는데, 개인적으로 수정하신 화일들인가요? 아니라면 위 와 같은 방식으로 하시면 될것 같습니다. 테스트 해봤습니다 .^^;
네이버처럼 보낸 쪽이나 받은쪽 양쪽에 자취를 남기는 것은, 사실 일반적이지 않습니다.
네이버는.. 굉장히 닫힌 시스템입니다. 자체적으로, 표준을 변경해서 만든 서비스도 많고요..
반면에 자기들끼리는 잘 연동됩니다. 장단점이 있죠.
수정시 write_update.php 화일에 $wr_trackback_set를 추가해야 한다는 지적에 감사합니다.
저도 수정 후 wr_trackback에 상대 url이 저장이 안되는게 이상했습니다.
그런데 그리 수정하고 나니 저장이 안되고 무한 루프에 빠지더니만 지금은 서버 db 접속에도 이상이 생긴 듯합니다. 이 문제는 서버 디비 부터, tb.php, tb_token.php 등 근본적인 것부터 다시 점검해야 할 듯하네요. 혹시 token하고 상관이 있는 건 아닐가요? tb.php에 보니 2회 이상 trackback 방지를 위해 ....뭐 이런게 있던데 이것이 방해를 하는 건 아닌지 참.
암튼 감사드립니다.
음.. 저는 문제없이 작동하는데 왜 일까요.. 괜히 저때문에 문제가 커지지 않았나 죄송합니다.
말씀하신 (트랙백) 토큰은, 외부 트랙백을 저장하는 쪽은 아니고,
그누보드게시물의 트랙백 주소를 만들때, 여러번 사용하지 못하도록 토큰을 붙히는 형태인것 같습니다. 즉, 다른 그누보드나, 다른 블로그 등에서, 본 사이트의 글쪽으로 트랙백을 보내는 경우에 사용하는 것입니다.
문제라는 것이 원래 생각지 못한 어떤 요인에서 생기는 것이므로 이런 과정을 거치면서 힌트를 얻기도 하고 또 핵심에 보다 가까이 접근하면서 결국은 스스로 해결점을 찾게 되기도 하니까요.
그리고 토큰관련 설명 감사드립니다. 이해가 좀 되었습니다.
사용하시는 그누보드는, 작년 10월 4.34.15 이전 버전같아보입니다.
그것때문에 글수정시 트랙백 보내기가 에러가 나는지는 모르겠지만,
그 이후에 많은 보안패치가 이루어졌고, 특히 얼마전에 cheditor4 관련 심각한 문제가 발생 (cheditor 자체의 문제는 아니고, 코드가 손상된듯) 했기에, 꼭 최신버전으로 업데이트 하시길 권유드립니다. ^^
트랙백 관련건은 따로 손보지 않고 그누보드 것을 그대로 쓰고 있다고 생각하고 있지만 어디선가 나도 모르는 변동이 있을 수도 있으니 버전 update도 하나의 방법일 것 같습니다.
여하튼 트랙백에 대한 저의 오해(새글에서 한번만 가능?)를 푼 것으로도 큰 소득입니다.
그냥 올려놓으신 화일을 비교하면서, 사용하시는 버전을 알게 된것 뿐입니다.
음.. 새 버전의 트랙백 관련 화일에서 업뎃된 부분이, 외부에서 들어온 트랙백 핑을 처리하는 부분이므로, 아마도 현재 문제의 원인은 아닐것 같습니다.
그나저나 다른 문제를 더 일으킨것이 아닌지 걱정되네요. ^^;
최신버전을 설치하는 것도 하나의 방법일것 같습니다. ^^
저 역시 무턱대고 신버전으로 엎어 씌우는데는 엄청나게 조심스러워 집니다.
그것으로 인하여 관련 화일들을 일일이 찾아 다시 수정을 해야한다면 아마 머리에 지진이 날 겁니다. 그런 일을 한 번 크게 겪은 터라 신중이 비교 검토해 가면 진행해 볼 생각입니다.
제가 만든 이 툴을 사용해서 변경된 화일들을 찾으실 수 있습니다. ^^;
http://gnuboard.org/pages/g4svn/
사용하시는 버전을 왼쪽에, 비교하실 최신 버전을 오른쪽 내림버튼으로 선택하시면,
특정 폴더에서 변경된 화일/폴더들이 표시됩니다.
/*실제 변경된 내용까지 보여주면 좋을텐데, 아직 그정도는.. ^^;*/
조금 시간을 들여서 수정해서, 두 버전간의 코드 변경내용을 보이게 했습니다.
결국은 $re_trackback을 처리해 주는 화일로 여기서 다운 받아 설치한 write_update.skin.php내 코드 에러였군요. (line 22)
$arr2 = explode("/", $trackback_url); //원본이 $wr_trackback인 것을 고침
$bo2 = $arr2[5];
$wr2 = $arr2[6];
보내는 내 주소가 되어야 하니까 $trackback_url 이 맞죠.
한데, 위 방식은, 그누보드의 트랙백 포멧에만 맞는 경우일텐데요.. ^^;
네이버블로그 트랙백주소는 다른 형태인데다가, 그누보드인 경우라도
만일 그누보드가 서브폴더에 설치된 경우는, 5번째와 6번째가 아닌 6번째와 7번째 값을 써야해서요..
예: http://mydomain.con/gnuboard/bbs/tb.php/freeboard/99
0 1 2 3 4 5 6 7
그누보드 트랙백은, 마지막 토큰만 잘라버려도 원글로 접근이 가능합니다.
$trackback_url = preg_replace('/\/[^\/]*$/', "", $view['wr_trackback']);