댓글 작성자의 목록을 출력하려고 합니다.
CMS/프레임워크 | Rhymix 1.9 |
---|---|
개발 언어 | PHP 7.0 |
글을 작성하고 그글에 댓글을 남겨 의견을 나누면
댓글을 남긴 사람들을 참여자로 목록 리스트에 출력하려고 합니다.
우선 댓글 윤삼님의 댓글을 활용하여 댓글 작성자의 목록은 가지고 왔습니다.
헌데, 댓글을 동일한 사람이 여러개 남겼을 때가 문제네요.
결국, 댓글을 작성한 사람들의 중복값을 없애야 하는데 중복값을 제거하는 방법이 있을까요?
oxythus
Lv. 5
댓글 10
윤삼님이 작성해주셨던 것외에 프로필사진을 출력하기 위해 조금 섞은 것 외엔 없어서요 ㅎㅎ;;
{@
$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 안에 댓글 참여자 이름이 담길 것 같습니다.
이런저런 고민들을 라이믹스에서 찾고 같이 고민하고 풀어가는게 정말 행복하네요^^
정말 감사합니다.
php에서 array_unique() 함수를 사용하면 배열안의 중복을 재거해 줍니다.
출력된 결과를 배열로 저장할수 있거나 댓글 작성자를 배열로 가져올 수 있다면 array_unique() 사용하면 될 것 같은데... 단순히 출력만 한 경우라 그게 안되는 것 같습니다.
{@
$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 으로 잡아주면 해당 회원번호로 중복되지 않도록 잡아줍니다.
<빈 공간 />
<댓글 출력>
<댓글작성자 목록에 현재 활성화된 댓글작성자 추가 />
</댓글 출력>
<댓글작성자 목록 출력 />
<스크립트를 통해 댓글작성자 목록을 빈공간으로 이동 />
같은 방식이면
서버에 부담은 확 줄지 않을까 싶네요.