댓글+평점 기능

댓글+평점 기능이 필요해서 찾는 중입니다.

 

1. boardDX는 찬반으로 별점을 매기는 것 같습니다.

2. 코노리님의 콘텐츠판 모듈은 구매 후 평점을 댓글로 남기는 것 같습니다.

 

1점부터 10점까지 선택할 수 있고

각 점수를 몇명이나 선택했는지 뽑아보려고 합니다.

 

혹시 가능한 모듈이나 애드온 혹은 제작이 가능한지 궁금합니다.

 

참조 : https://xe1.xpressengine.com/forum/20803096

  • ?
    php연습하는 겸 직접 짜보는건 어떨까 싶습니다.
    프론트 백엔드 DB구성까지 포함해서 1, 2시간이면 만들 것 같은데
  • ? profile
    혹시 참고할 소스라도 있을까요?;
    백엔드 쪽은 전혀 몰라서요 ㅠ;;
  • profile ?

    triggerInsertCommentBefore($obj){

    $module_srl = $obj->module_srl
    $module_config = 댓글 평점 모듈(혹은 애드온) 설정을 가져옴.
    $allow_list = $module_config에서 평점기능을 사용하는 게시판 리스트(array)를 가져옴.
    if(!in_array( $module_srl, $allow_list ) {
    return 허용되지 않은 게시판입니다.
    }

    $comment_srl = $obj->comment_srl;
    $logged_info - Context::get('logged_info');
    if(!$logged_info) {
    return 로그인 후 평점 가능합니다.
    }

    $grade = Context::get('grade');
    if(!$grade || !(0 초과 10 이하의 자연수 혹은 소수) ) { // 정규식을 사용하거나 따로 소수로 파싱해서 체킹.
    return 이상한 값.
    }

    $document_srl = Context::get('document_srl');
    $docGrade = 현재 모듈의 model에서 $document_srl값의 문서번호로 문서의 평점 상태를 가져옴
    $grade_count = $docGrade->count;
    $grade_average = $docGrade->average;

    $args = new stdClass();
    $new_grade = ($grade_count*$grade_average+$grade) / ($grade_count+1);

    executeQuery(DB에 저장할 값들을 입력);

    return true;
    }


    간단히 수도코드로 평점 저장하는 부분 끄적여 봤습니다..

  • ? profile

    감사합니다. 이걸 모듈 쪽에 결합하면 되는 건가요?;;
    예를 들어 board 모듈이라면 이걸 어디에 넣어야 하는 건가요;

    아니면 애드온으로 동작하는 건가요 ㅠ;

  • profile ?
    저건 따로 모듈을 만들어서 댓글 작성 트리거를 사용하였을 때의 예시이고 위 코드를 그대로 쓰면 에러납니다 ㅠㅠ

    + 지금 다시보니 트리거 시점이 before보단 after가 더 적합한듯 하네요
  • profile
    보통 추천(공감)기능을 잘 사용하지 않기때문에 XE 자체 기능을 이용하신다면
    간단하게 별점 기능을 넣으실 수 있습니다.
    jquery star등으로 구글 검색하시면 많은 플러그인을 찾으실 수 있을것이며,
    별 스코어를 선택하는것은 jquery로 처리하시고 별점 선택시 선택된 값을 코멘트에 저장시 같이
    전달해 주시면 될것입니다.
    코멘트 쓰기 스킨에 별점선택을 잘 배치하시고 폼에 <input type="hidden" name="voted_count" value="" id="voted_count"> 히든값을 이렇게 하나 넣어두시고 별점 클릭 이벤트에서 값을
    voted_count로 넣으세요. 반대로 코멘트에 불러올경우에 $comment->get('voted_count')의 값을
    별점 플러그인을 로딩할때 넘겨주시면 됩니다.
    웹사이트를 제작하시는분이시니 잘하실것이라 생각듭니다.
  • profile profile
    프론트단에서 표현하는 것은 할 줄 아는데,
    코멘트 저장시 같이 전달해서 저장하는 걸 모르겠습니다;;

    폼에 그냥 input 히든값으로 넣어두고,
    별점 클릭 이벤트에서 값을 voted_count로 넣은 다음에....

    이렇게만 하면 코멘트 저장할 때 voted_count 도 같이 저장이 되나요?
    따로 comment 쪽 모듈이나 게시판 모듈 쪽에서 따로 건들일 게 없나요;
  • profile profile
    일단 도전! 해 보시기 바랍니다.
    그래야 자기꺼가 됩니다.
  • profile
    전 입력 부분은 게시판 스킨을 수정했던 것 같고

    백엔드는 애드온으로 처리했습니다.

    추천수를 활용하였고 1~10점으로 했네요
  • profile profile
    혹시 도와주실 수 있으신가요 ㅠ
  • profile profile

    그냥 프론트에서 voted_count 로 넘기면 됩니다. ( <select name="voted_count"> or <input name="voted_count"> )

    다만 위변조 방지차원에서 애드온에서 별도 처리했던거네요

  • profile profile
    <?php
    if(!defined("__XE__")) exit();
    
    /**
     * @file document_stars.addon.php
     * @author anizen
     * @brief 평점 위변조 방지 애드온
     *
     **/
    
    if($called_position == 'before_module_proc' && Context::get('act') == 'procBoardInsertComment'){
    
    if(Context::get('voted_count') === NULL) return;
    
    $voted_count = (int)Context::get('voted_count');
    
    if(gettype($voted_count) != "integer") $this->stop('잘못된 평점을 입력하셨습니다.');
    
    if($voted_count < 1) Context::set('voted_count', 1);
    if($voted_count > 10) Context::set('voted_count', 10);
    
    }
    ?>

     

    참고로 이렇게 만들었던 것 같습니다.. 실제 변조를 막는지 확인은 안해봤지만..-_-;;ㅋㅋ

  • profile profile
    제가 xe 구조를 몰라서 그런데 이렇게 애드온만 있으면 스킨 단이니 모둘 단에서는 따로 수정할 사항이 없는 건가요? ㅠ
  • profile profile

    네 제가 했을 땐 그랬던 것 같아요.

     

    아마 평점? 기능을 위해서 그렇게 만든 거 아닌 가 싶더라구요.

     

    참고로 추천수 같은 경우 별도로 db로 저장되는데, 이 사람이 1점을 줬는데 10점을 줬는지 준 점수까지 기록이 되기 때문에

    이를 활용하면 평점?을 구현할 수 있더라구요..

     

    예전 리뷰 모듈? 인가 공식모듈이었던 것 같은데, 거기서 참고해서 제작했던 것 같습니다.

     

    코멘트 쓰기 form 안에 추가만 하며 됩니다.

     

    전 이렇게 했었네요

     

    평점 선택 : <select name="voted_count">
    <option value="10">10점</option>
    <option value="9">9점</option>
    <option value="8">8점</option>
    <option value="7">7점</option>
    <option value="6">6점</option>
    <option value="5">5점</option>
    <option value="4">4점</option>
    <option value="3">3점</option>
    <option value="2">2점</option>
    <option value="1">1점</option>
    </select>

     

  • profile profile
    그리고 게시판 스킨에서 표시할 때는

    $comment->get('voted_count');

    이렇게 불러오면 됩니다.
  • ?
    평점 애드온 어디서 파는 사람 없나요 ㅠㅠ