Q&A

CMS/프레임워크 Rhymix 1.9
개발 언어 PHP 7.0

글을 작성하고 그글에 댓글을 남겨 의견을 나누면 

 

댓글을 남긴 사람들을 참여자로 목록 리스트에 출력하려고 합니다.

 

우선 댓글 윤삼님의 댓글을 활용하여 댓글 작성자의 목록은 가지고 왔습니다.

 

헌데, 댓글을 동일한 사람이 여러개 남겼을 때가 문제네요.

 

결국, 댓글을 작성한 사람들의 중복값을 없애야 하는데 중복값을 제거하는 방법이 있을까요?

oxythus Lv. 5

댓글 10

  • 혹시 현재까지 작업하신 소스를 공개해주실 수 있다면 답변이 좀 더 수월할 것 같습니다~
  • @윤삼

    윤삼님이 작성해주셨던 것외에 프로필사진을 출력하기 위해 조금 섞은 것 외엔 없어서요  ㅎㅎ;;

     

    <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 안에 댓글 참여자 이름이 담길 것 같습니다.

  • @윤삼
    이것 저것 검색하다보면 답변자 윤삼님의 글이 정말 많이 보여요
    이런저런 고민들을 라이믹스에서 찾고 같이 고민하고 풀어가는게 정말 행복하네요^^
    정말 감사합니다.
  • 질문을 하실때 답변을 할 수 있는 가장 관련 있는 소스를 주셔야 답변을 해주실 분들이 있을 것 같습니다.

    php에서 array_unique() 함수를 사용하면 배열안의 중복을 재거해 줍니다.
  • @웹지기

    출력된 결과를 배열로 저장할수 있거나 댓글 작성자를 배열로 가져올 수 있다면  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 으로 잡아주면 해당 회원번호로 중복되지 않도록 잡아줍니다.

     

  • @람보
    반복문이냐, DB 쿼리냐, 그것이 문제로다...! 같은 상황이네요.

    <빈 공간 />
    <댓글 출력>
    <댓글작성자 목록에 현재 활성화된 댓글작성자 추가 />
    </댓글 출력>
    <댓글작성자 목록 출력 />
    <스크립트를 통해 댓글작성자 목록을 빈공간으로 이동 />

    같은 방식이면
    서버에 부담은 확 줄지 않을까 싶네요.