Extra Form
PHP PHP 7.0
CMS Rhymix

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

 

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

 

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

 

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

 

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

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

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

     

    <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>

     

  • profile profile

    악, 이건 흑역사네요ㅋㅋㅋㅋㅋ

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

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

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

    출력된 결과를 배열로 저장할수 있거나 댓글 작성자를 배열로 가져올 수 있다면  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>

     

  • profile
    {@
        $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>

     

    코드의 효율성은 둘째치면...
    뭐, 이 정도면 되겠네요.

  • profile profile
    정말 감사합니다.
    라이믹스는 정말 능력자 분들이 많네요...
    불가능 한게 뭘까요 정말 감사합니다.
  • profile profile

    모든 댓글을 반복돌리지 않고, 새롭게 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 으로 잡아주면 해당 회원번호로 중복되지 않도록 잡아줍니다.

     

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

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

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