글을 작성하고 그글에 댓글을 남겨 의견을 나누면
댓글을 남긴 사람들을 참여자로 목록 리스트에 출력하려고 합니다.
우선 댓글 윤삼님의 댓글을 활용하여 댓글 작성자의 목록은 가지고 왔습니다.
헌데, 댓글을 동일한 사람이 여러개 남겼을 때가 문제네요.
결국, 댓글을 작성한 사람들의 중복값을 없애야 하는데 중복값을 제거하는 방법이 있을까요?
PHP | PHP 7.0 |
---|---|
CMS | Rhymix |
글을 작성하고 그글에 댓글을 남겨 의견을 나누면
댓글을 남긴 사람들을 참여자로 목록 리스트에 출력하려고 합니다.
우선 댓글 윤삼님의 댓글을 활용하여 댓글 작성자의 목록은 가지고 왔습니다.
헌데, 댓글을 동일한 사람이 여러개 남겼을 때가 문제네요.
결국, 댓글을 작성한 사람들의 중복값을 없애야 하는데 중복값을 제거하는 방법이 있을까요?
윤삼님이 작성해주셨던 것외에 프로필사진을 출력하기 위해 조금 섞은 것 외엔 없어서요 ㅎㅎ;;
<block loop="array_values($document->getComments())=>$key,$comment" cond="$document->getComments()"> {@ $oMemberModel = &getModel('member'); $member_info = $oMemberModel->getMemberInfoByMemberSrl($oMemberModel->getMemberSrlByNickName($comment->getNickName())); $profile_image = $member_info->profile_image; } <li><img src="{$profile_image->src}" alt="Avatar"></li> </block>
악, 이건 흑역사네요ㅋㅋㅋㅋㅋ
{@
$oMemberModel = getModel('member');
$commenters = array();
}
<block loop="$document->getComments()=>$key,$comment" cond="$document->getCommentCount()">
{@
if ( !array_key_exists($comment->member_srl, $commenters) ) :
$commenters[$comment->member_srl] = $comment->getNickName();
endif;
$member_info = $oMemberModel->getMemberInfoByMemberSrl($comment->member_srl);
$profile_image = $member_info->profile_image;
}
<li><img src="{$profile_image->src}" alt="Avatar"></li>
</block>
대강 이렇게 하면 $commenters 안에 댓글 참여자 이름이 담길 것 같습니다.
출력된 결과를 배열로 저장할수 있거나 댓글 작성자를 배열로 가져올 수 있다면 array_unique() 사용하면 될 것 같은데... 단순히 출력만 한 경우라 그게 안되는 것 같습니다.
<block loop="array_values($document->getComments())=>$key,$comment" cond="$document->getComments()"> {@ $oMemberModel = &getModel('member'); $member_info = $oMemberModel->getMemberInfoByMemberSrl($oMemberModel->getMemberSrlByNickName($comment->getNickName())); $profile_image = $member_info->profile_image; } <li><img src="{$profile_image->src}" alt="Avatar"></li> </block>
{@ $comment_author_list = []; foreach($document->getComments() as $comment): $comment_author_list[] = $comment->member_srl; endforeach; $comment_author_list = array_unique($comment_author_list); } <block loop="$comment_author_list => $member_srl" cond="count($comment_author_list)"> {@ $oMemberModel = &getModel('member'); $member_info = $oMemberModel->getMemberInfoByMemberSrl($member_srl); $profile_image = $member_info->profile_image; } <li> <img src="{$profile_image->src}" alt="Avatar"> </li> </block>
코드의 효율성은 둘째치면...
뭐, 이 정도면 되겠네요.
모든 댓글을 반복돌리지 않고, 새롭게 DB 쿼리를 만들어서 댓글 가져오는 것이 더 효율적일지도 모릅니다.
<query id="getOtherCommentByDocumentSrl" action="select">
<tables>
<table name="comments" />
</tables>
<columns>
<column name="*" />
</columns>
<conditions>
<condition operation="equal" column="document_srl" var="document_srl" notnull="notnull" />
</conditions>
<groups>
<group column="member_srl" />
</groups>
</query>
$args = new stdClass();
$args->document_srl = $oDocument->document_srl;
$output = executeQuery('설치한경로.getOtherCommentByDocumentSrl', $args);
쿼리에서 마지막에 Group으로 member_srl 으로 잡아주면 해당 회원번호로 중복되지 않도록 잡아줍니다.