묻고답하기
애드온으로 댓글 작성자이름을 변경하려면 어떻게 해야할까요?
2014.04.17 23:44
if($called_position != 'after_module_proc' || Context::get('module') == 'admin') return; if($this->act == "dispBoardContentCommentList"){ $comment_list = Context::get('comment_list'); if($comment_list) { foreach($comment_list as $key=>$comment){ $admin_name = '관리자'; $comment->add('nick_name', $admin_name); $comment->variables['nick_name'] = $admin_name; $DebugScript.= "닉네임 호출 : $comment->nick_name "; } } }
나름 열심히 찾아가면서 해봤지만 전혀 불러오지도 안하네요..ㅡㅡ;;
get으로 불러와야 수정이 먹히는 것 같은데....
아래 것은 정보가 불러오긴 하는데 수정이 먹히질 않네요
if($document_srl) { $commentSrls = Context::get('target_srl'); $DebugScript.="\n\n================================= $commentSrls =================================\n"; $DebugScript.="\n\n=================================코멘트=================================\n"; $oDocumentModel = getModel('document'); $oCommentModel = getModel('comment'); $oDocument = $oDocumentModel->getDocument($document_srl); $comment_list = $oDocument->getComments(); if($comment_list) { foreach($comment_list as $key=>$comment){ $comment->nick_name = '네임이당'; $comment->variables['nick_name'] = '네임이당'; $DebugScript.="\n\n================================= 문서번호 $document_srl $comment->nick_name $comment->comment_srl $comment->content =================================\n"; } } }
게시물에서 이름 바꾸는 건 아주 손쉽게 처리했는데요
댓글은 도저히 답이 안나오네요,...ㅜㅜ
불러오는 것까진 부랴부랴 했지만 결정적으로 변경이 안되었습니다..ㅜㅜ
시점이 잘못된 건지.. 다른 문제인건지... 답답하네용...
댓글 11
-
숭숭군
2014.04.18 11:42
-
애니즌
2014.04.18 11:43
후자가 맞습니다.
이미 작성된 데이터를 단순히 바꿔 보여주려고 합니다. (실제 데이터 변경X)
-
prologos
2014.04.18 11:58
지난번과 마찮가지로 두번째 방법 잘 작동합니다 @.@
-
애니즌
2014.04.18 12:00
게시판에 표시되는 댓글 목록이 변경이 안되더라구요..ㄷㄷ
즉.. 실제 게시물에 출력되었을 때 댓글에서 닉네임이 변경되진 않네요...
-
prologos
2014.04.18 12:02
간단하게 아래처럼 문서번호를 입력해서 테스트 해봤더니 닉네임이 다 변경되서 출력 되던데요. 코멘트는 그대로 출력되고...
$oDocumentModel = getModel('document'); $oCommentModel = getModel('comment'); $oDocument = $oDocumentModel->getDocument(117); $comment_list = $oDocument->getComments(); if($comment_list) { foreach($comment_list as $key=>$comment){ $comment->nick_name = '네임이당'; $comment->variables['nick_name'] = '네임이당'; $DebugScript.="\n\n================================= 문서번호 $document_srl $comment->nick_name $comment->comment_srl $comment->content =================================\n"; } }
-
애니즌
2014.04.18 12:14
혹시 시점을 어떻게 잡으셨나용?
if($this->act != "dispBoardContent" && $this->act != "procBoardInsertDocument" && $this->act != "dispBoardDelete") return;이렇게 해놨는데.. 시점이 잘못된 걸까요?
귀신이 곡할 노릇입니다..-_-;;;
아예 시점 관계없이 걍 전부 실행되게 했는데도
막상 댓글에 출력된 닉네임이 변경되질 않네요..-_-;;
코드 찍어보면 바뀐 걸로 나오지만 실제 출력된 데이터는 바뀌질 않는다는 거죠..-_;;;
<?php if(!defined("__XE__")) exit(); if($this->act != "dispBoardContent" && $this->act != "procBoardInsertDocument" && $this->act != "dispBoardDelete") return; $DebugHeader = '<!-- ************************* DEBUG ******************* '; $DebugFooter = '************************* DEBUG ******************* -->'; // info load $admin_name = $addon_info->admin_name; //$document_srl = Context::get('document_srl'); if(!$admin_name) $admin_name = "관리자"; $oDocumentModel = getModel('document'); $oCommentModel = getModel('comment'); $oDocument = $oDocumentModel->getDocument(129775); $comment_list = $oDocument->getComments(); $DebugScript = '코멘트 출력'; if($comment_list) { foreach($comment_list as $key=>$comment){ $ori_nick = $comment->nick_name; $comment->variables['nick_name'] = "네임이당"; $comment->nick_name = "관리자"; $DebugScript.= "Comment_srl : $comment->comment_srl \n닉네임 : $ori_nick 변경후 : $comment->nick_name \n\n"; } } Context::addHtmlHeader($DebugHeader.$DebugScript.$DebugFooter); ?>
해당 대상글 링크
http://anizen.kr/document_caution_blind/129775
소스보기 하시면 DEBUG 로 검색하면 정상적으로 변경은 되는 걸로 나옵니다.
다만 실제 게시판에선 바뀌진 않았죠..ㄷㄷ
-
prologos
2014.04.18 12:40
헛! 저도 디버그만 찍어보고 말씀 드렸습니다. 죄송합니다 ㅠㅠ
게시물 출력할때는 게시판 스킨에서 코멘트를 다시 불러오니 애드온에서 변경한것은 적용이 안될꺼란 생각이드네요.
-
애니즌
2014.04.18 13:33
제 생각엔
$oDocument->getComments() 이건 같은 시점이라 소용이 없는 코드인 것 같고
좀 더 앞단에서 처리를 해야 적용이 될 것 같은데..
그 앞단이 아마 첫번째 코드인
function dispBoardContentCommentList(){ $oDocumentModel = getModel('document'); $document_srl = Context::get('document_srl'); $oDocument = $oDocumentModel->getDocument($document_srl); $comment_list = $oDocument->getComments(); // setup the comment list if(is_array($comment_list)) { foreach($comment_list as $key => $val) { if(!$val->isAccessible()) { $val->add('content',Context::getLang('thisissecret')); } } } Context::set('comment_list',$comment_list); }
이게 아닐까 싶은데
여기서 Context::set('comment_list',$comment_list); comment_list를 세팅해주더군요..
-
애니즌
2014.04.18 14:10
원인을 안 것 같습니다...-_-;;
애초에 모듈단에서 저런 걸 지원하질 않습니다.
말씀하신 것처럼 스킨에서 직접 호출하는 것이기 때문에
그 어느단에서든 불러봤자 소용이 없는 거더군요...-_-;;;
방법은 딱하나 밖에 없을 것 같습니다
before_display_content 에서 $output 으로 패턴 만들어서 replace 하는 수 밖에...
애초에 안되는 건데 엄청난 삽질을 한 거였네요...............-_-
어쨌든 덕분에 원인을 알게 된 것 같아 기쁩니다.
정말 감사합니다.
-
prologos
2014.04.18 14:46
회원 확장 정보 출력 애드온, 포인트 레벨 아이콘 표시 애드온이 해당 작업 비슷하게 닉네임에 그룹아이콘이나 레벨아이콘 추가 표시하니 참고하시면 될듯하고 더불어 충돌? 같은것도 신경 쓰셔야 겠습니다 @.@ -
애니즌
2014.04.18 15:05
넵 오늘 퇴근하고서 한번 만들어봐야 겠습니다. ㅎ
용도가 무엇인가요? 댓글작성시 닉네임을 변경하는건지 그냥 게시글 리스트에 있는 닉네임을 변경하는건지..