웹마스터 팁
board.js 안의 ret_obj 로 추가변수 받아오기
2013.12.20 02:35
-----------------------------------------------------------------------서론 -----------------------------------------------------------------------------------------
modules/board/tpl/js/board.js
이 파일이 게시판의 공통JS 를 관리하는 곳입니다.
댓글입력 완료 후 해야할 행동 등을 규정해 놓은 곳입니다.
그 중에서 각종 함수들의 변수 중에 ret_obj 형식으로 XE 단에서 JS 로 변수를 받아오는게 있습니다.
예를 들어 댓글입력완료 후의 JS 기능을 살펴 보겠습니다.
board.js 에 다음과 같은 함수가 있습니다.
completeInsertComment(ret_obj)
var mid = ret_obj['mid'];
var document_srl = ret_obj['document_srl'];
var comment_srl = ret_obj['comment_srl'];
...자. 우리는 저기서 mid,document_srl,comment_srl 이외의 다른 변수들을 받아오고자 합니다.
ex) 게시물 제목이라던가 member_srl 등등
이 예제에서는 document 를 작성한 회원의 member_srl 과 comment 를 작성한 회원의 member_srl 을 받아오는 작업을
해보도록 하겠습니다.
-----------------------
원리 및 작업순서
------------------------------------
filter 단에서 리스판스 콜백 정의 - controller 에서 콜백으로 쏴주기
(그 위의 param 들은 controller 에서 처리할 모든 변수들을 기입하는 곳입니다.
controller 단에서 추가변수를 입력받아 처리하려면 저 부분에 삽입하셔야 합니다.)
1. modules/board/tpl/filter/insert_comment.xml
이곳에서 리스판스 콜백에 받아오고 싶은 것들을 작성합니다.
response callback_func="completeInsertComment"
이곳에다가
tag name="cmt_member_srl"
tag name="doc_member_srl"
을 추가해 줍니다.
2. modules/board/board.controller.php
procBoardInsertComment()
함수를 찾아서 함수 제일 마지막 쪽에 다음과 같이 삽입합니다.
아마 밑과 똑같이 생긴 놈들이 보이실 겁니다. mid,document_srl ,comment_srl..바로 그 밑에 던져 주시면 됩니다.
$this->add('cmt_member_srl', abs($obj->member_srl));
$this->add('doc_member_srl', abs($oDocument->get('member_srl')));
3. modules/board/tpl/js/board.js
completeInsertComment(ret_obj)
로 찾아갑니다.
거기서 변수를 선언해 줍니다.
var doc_msrl = Math.abs(ret_obj['doc_member_srl']);
var cmt_msrl = Math.abs(ret_obj['cmt_member_srl']);
abs() 절대값을 이용한 이유는 익명게시판에서도 써먹기 위해서입니다.
이미 controller 에서 넘겨줄 때 절대값 적용을 했지만 확인사살을 위해 한번 더 절대값 먹여줍니다.
* 익명게시판에서는 member_srl 을 음수값으로 처리합니다 *
다 됐습니다.
이제 completeInsertComment 함수 에서
alert('글쓴이의 회원번호는 '+doc_msrl+'이며 댓쓴이의 회원번호는 '+cmt_msrl+'입니다.');
라고 뙇 넣어주시면
댓글 입력 후에 얼럿창이 뙇 하고 뜰것입니다.
이를 응용하여 title,parent_srl, content 등을 board.js 로 받아올 수가 있습니다.
다만 그 변수들이 게시판단에서 사용가능해야 하고
없으면 this->add 하기 전에 받고자 하는 내용의 모델을 임의호출 해야합니다.
P.S 크누파크 제작 당시의 옛 기억을 끄집어 내어 팁을 작성했습니다.
옛 기억이라 말이 좀 횡설수설했는데 잘 알아 보시려나 모르겠네요 ^^;;
댓글 10
-
멀티비타민
2013.12.23 20:21
-
KS
2013.12.23 23:26
멀티비타민님 사이트도 깔끔하고 이쁜걸요 저희 사이트는 조금 조잡......한.. ^^;
우선 질문에 답변해 드리겠습니다.
1. 소켓 서버 구성
-> 아쉽게도..제가 만들 당시 Canto 님의 실시간 글 알림 애드온 버전이 1 일때라서 (이 당시는 ajax polling 방식)
따로 서버를 자체적으로 구성하였습니다.
CentOS + Nginx + php + node.js + socket.io + elephant.io
조합으로 구성하였습니다. 저사양 서버인데도 두달 정도 뻗지 않고 뻑없이 잘 버텨주네요.
사이트 자체는 호스팅 받는 중이구요.
2. 오토링크 애드온 대체..
-> 이거 제가 며칠전에 팁으로 올렸는데 글 수정하다가 자꾸 소스가 날아가서 짜증나서 지워버렸네요.
오토링크 애드온의 문제점이 이미 js 가 로딩되어 있는 상태에서 ajax 로 불러오면 링크가 먹히지 않는 점이지요.
그래서 저는 스킨 단에서 해결을 봤습니다.
view_document.html 파일에서
{$oDocument->getContent(true);}
을
{@ $autolink = $oDocument->getContent(true);}
{@ $pattern = "/([^\"\'\=])(mms|Mms|MMS|http|Http|HTTP|https|Https|HTTPS|ftp|Ftp|FTP|telnet|Telnet|TELNET)\:\/\/(.[^ \n\<\"\']+)/"; }
{$autolink = preg_replace($pattern,"\\1<a href=\\2://\\3 target=_blank>\\2://\\3</a>", " ".$autolink); }
으로 php 단에서 링크로 치환해버렸습니다.
코멘트도 마찬가지,
{$comment->getContent(false);}
이 부분을
{@ $autolink = $comment->getContent(false);}
{@ $pattern = "/([^\"\'\=])(mms|Mms|MMS|http|Http|HTTP|https|Https|HTTPS|ftp|Ftp|FTP|telnet|Telnet|TELNET)\:\/\/(.[^ \n\<\"\']+)/"; }
{$autolink = preg_replace($pattern,"\\1<a href=\\2://\\3 target=_blank>\\2://\\3</a>", " ".$autolink); }
이렇게 하면 됩니다.
기본으로 새창으로 띄우게 되어 있습니다. 원하시지 않으면 target=_blank 부분을 지우시면 됩니다.
저는 오토링크 애드온을 안쓰고 저렇게 해서 쓰는 중이구요.
이걸 애드온으로 만들어서 처리해 버릴려다가 그냥 스킨 수정으로 끝내버렸습니다.
궁금증이 해결되셨는지..
-
멀티비타민
2013.12.24 00:19
아 이 방법이 있었네요
정말 좋은 팁입니다. ㅎㅎ
그리고 마지막으로 질문하나만 할게요.
node.js socket.io 관련해서 정보는 어디서 얻으면 좋을까요?
구현된 소스를 분석하기, 구글링해서 예제하나씩 따라하기.. 등등
-
KS
2013.12.24 00:44
저는 구글링으로 해결봤습니다. stackoverflow 등등..
구현된 소스는 socket.io 등의 채팅예제 등에서 참조도 하구요.
-
멀티비타민
2013.12.24 01:08
아 그렇군요
마지막 질문이라 했지만.. 진짜 마지막 질문할께요 ㅋ.ㅋ
common/tpl/default layout으로 잡아놓고 html을 날리는데
html요소 말고 스크립트 등등 잡다한 요소들도 다 달라붙는데
이거 제거 하는 방법이 없을까요? 기존 코어를 건드려야하는건지
php에 정의된 함수안에서 해결 할 수 있는건지 궁금합니다.
-
KS
2013.12.24 01:14
죄송하지만 html 을 날린다는게 어떤 의미인지 잘 모르겠네요, 조금만 더 상세히 써주시면 안될까요?
-
멀티비타민
2013.12.24 01:15
https://github.com/lansi951/xe-comment-refresh
이 팁으로 따라해본건데 템플릿에 설정된 html로
mid document_srl 를 넘겨줘서 load하는 방식인거같습니다.
-
KS
2013.12.24 01:45
저는 그냥 exec_xml 로 써서...해당 부분은 잘 모르겠습니다.
-
멀티비타민
2013.12.24 02:30
exec_xml 쓰니 html만 불러오는듯하네요
음 감사합니다.
-
Summer
2014.03.10 18:18
유용한 팁 감사합니다!
그런데 xe에서 제공하는 변수들은 잘 되는데
제가 url에 추가로 붙인 xe.com/?myvar=myvalue
myvar 와 같은 변수들은
Context::get('myvar')로 해도 읽어오질 못하는데 무엇이 문제일까요?
제목 | 글쓴이 | 날짜 |
---|---|---|
타이머 | *이종민* | 2008.11.29 |
즐겨찾기 추가 소스 | *이종민* | 2008.11.29 |
F5 방지 | *이종민* | 2008.11.29 |
펌방지(펌방제해제우회) [13] | *이종민* | 2008.11.29 |
팁이라고 할 수 없는 [이미지안투명박스] [2] | 엔시™ | 2007.12.23 |
css 간단한 박스 레이아웃입니다. [8] | stryper | 2007.11.21 |
[초간단 팁] 글씨에 음영효과를 주는 태그 [2] | 이유 | 2007.05.02 |
문법적으로 이상이 없는데 빈틈이 생길 때...해결 방법 [5] | 이명우 | 2006.12.16 |
셀렉트박스 트리메뉴인데 참 이뻐요(링크타켓 - new/blank) [8] | 뽀因㉦ㅓо Ø Γ | 2006.09.19 |
게임차트에서 가져오는 실시간 게임순위 [2] | 絶世美男@ | 2005.12.11 |
필터 효과들 [1] | keymove | 2005.07.08 |
스킨작업에 중요하게 쓰이는 것들 [2] | ProSense™ | 2005.04.12 |
XE 어플 개발시 키보드위에 입력창 올리기 [4] | 웹빌드 | 2014.03.11 |
폰갭 처리시 뒤로가기 종료 처리 방법 | 웹빌드 | 2014.03.11 |
board.js 안의 ret_obj 로 추가변수 받아오기 [10] | KS | 2013.12.20 |
게시판에 대해 닉네임,이름 등의 정렬을 추가하는 방법 [1] | sejin7940 | 2014.03.09 |
사이트접속시 모바일기기 접속이면 설정한 페이지로 이동시키기 | 홈피닥터 | 2014.03.09 |
홈페이지 주소창 상세 링크 안보이게 설정 | 헤이즈디자인 | 2014.03.09 |
유동아이피로 고정아이피 만들수있는 유틸 [27] | 론건맨 | 2003.10.10 |
xp어플 개발시 사진 회원 바로잡아 주는 함수 | 웹빌드 | 2014.03.09 |
본문과는 상관없는점 죄송합니다
크누파크 들려봤더니 상당히 잘만들었네요
혹시 소켓 서버는 어떻게 돌리시는건지 궁금합니다.
실시간 글 알림 애드온 처럼 NITROUS.IO 같은 곳에서 돌리는건지요?
그리고 댓글 ajax 구현시에 오토링크 애드온 말고 구현하는 방법도 알수있을까요..?