묻고답하기
스킨 개발 질문
2010.03.14 12:53
네이버스타일 지식인XE 스킨을 개발하는데요....
채택을 하면 리스트에 '채택됨'이라고 나오게 하고,
채택이 안된 질문은 리스트에 '미채택'이라고 나오게 하고 싶은데
도대체 어떻게 해야하는지.... ㅜㅜ댓글 2
-
현원
2010.03.14 12:59
-
하연울
2010.03.14 13:01
어떻게 하라는건지 잘 모르겠습니다 ;;; -
현원
2010.03.14 14:09
모듈의 kin.view.php 파일을 열어서 kinView 클래스의 dispKinIndex 멤버에 보시면
주어진 action 값에 대해서 리스트를 가져오는 부분이 있습니다.
각 action은 swtich 문으로 분기되고
맨 처음 리스트를 보여줄때는 default로 빠집니다.
default 부분에
Context::set('oKinModel', $oKinModel); 를 추가합니다.
oKinModel 인스턴스에 document srl이 주어지면 선택된 코멘트 값을 가져오는 메서드가 존재합니다. (getModel로 부르더군요 ㅡ,.ㅡ)
여하간 원래는 data 멤버만 Context::set을 사용해서 스킨으로 넘기는데
ㅡ,.ㅡ 귀찮으니 저 인스턴스를 통째로 뜯어옵니다. (이 부분이 보안적으로 문제가 될지 않될지는 모르겠습니다 ㅡ,.ㅡ)
그러면 이제 스킨에서 사용이 가능합니다.
그럼 이제 스킨의 index.html로 가서 리스트 받아서 순회하는 foreach문 안에서 원하는 곳에
$oKinModel->getSelectedReply($oDocument->document_srl)
를 부르면 자동으로 현재 질문에 대한 답변이 있으면 그 코멘트의 srl을 들고 오게 됩니다.
이 구문이 바로 selected_reply를 초기화 시키는 구문입니다.
이게 false 나 null이 아니면 채택된 답변이 있다고 출력하면 됩니다.
1> 목록 리스트 화면입니다.
2> 선택된 답변은 밑에꺼 입니다.
3> 선택되지 않은 부분입니다.
<div class="roundBox" id="comment_{$reply->comment_srl}">
<div class="roundBoxGuide"><span class="roundBoxTl"></span><span class="roundBoxTr"></span></div>
<div class="roundContents content">
<div class="titleArea">
<a href="#" onclick="return false;" class="author member_{$reply->get('member_srl')}">{$reply->getNickName()}</a>
<span class="date"><strong>{$reply->getRegdate('Y.m.d')}</strong> {$reply->getRegdate('H:i')}</span>
</div>
<div class="infoArea">
<!--@if($oDocument->isGranted() && !$selected_reply)-->
<a href="#" onclick="if(confirm('{$lang->msg_select_reply}')) doSelectReply('{$reply->comment_srl}'); return false;" class="button blue"><span>{$lang->cmd_select_reply}</span></a>
<!--@end-->
</div>
<div class="docContent">
<!--@if($selected_reply == $reply->comment_srl)-->
<div class="selectedReply">
{$lang->msg_selected_reply}
</div>
<!--@end-->
지식인 1.0 스킨의 view 에서 때온 부분입니다. 보시면 아시겠지만 도큐먼트 오브젝트로부터 코멘트만 꺼내서 순회합니다. 딱 보면 의심가는 부분은 하나로 압축되죠. selected_reply.. 보통 프로그래밍하면 그렇듯이 변수명은 그 변수가 담는 내용, 클래스면 그 인스턴스가 할 내용을 함축하는 이름을 짓는 것이 관례이고 xe 역시 그런 기본적인건 이미 따르고 있습니다. selected_reply 라면 보나마나 이게 선택된 답변일거고 무슨 값일까를 보면 그 옆에 equal then 나오고 comment_srl 이라네요. 그렇다면 코멘트의 srl을 저장하고 있다는 거겠죠.
그럼 답은 나왔네요. comment 리스트를 순회해서 selected_reply와 같은게 존재하는 걸 확인한다면 답변이 완료된 질문으로 아니면 아니라고 하면 되겠지요.