커뮤니티

게시글에 평점 부여 애드온을 만들면서 어려워서 자문을 구합니다.

2025.02.14 10:30
409
2
CMS/프레임워크 Rhymix 2.1
개발 언어 PHP 7.4
문제 페이지 주소 비공개 (작성 후 5일 경과)

라이믹스 게시글 마다 로그인 회원이 평점을 부여 하는 기능을 만들어 볼려고 애드온을 만들다 보니

애드온으로는 DB에 테이블을 생성 시킬 수가 없어서 테이블 생성만 하게 간단한 모듈을 만들었고

애드온에서 모든 것을 처리하게 했다.

만들다 보니 이래 저래 참 어렵네... 모듈은 더욱 더 어려워 내 힘으로는...

 

애드온에서 게시글 본문 아래 자리를 잡을려고 하니 이상하게 자리를 잡으면 평점이 클릭 안되고

평점이 클릭되게 하니 자리에 없고

그래서 직접 게시글 본문안에 코드를 넣는 방법을 적용했다.(비급한 변명입니다!!!)
 

<div cond="!$mi->rating_stars == ''" class="rating-wrapper">
<div class="rating-title">
<span>이 글의 평점</span>
<span class="count">({number_format($rating_count)}명 참여)</span>
</div>

<div class="rating-stars">
<!-- 평균 평점 표시 -->
<div class="avg-rating">
<span class="label">평균 평점:</span>
<span id="avg_rating_stars" class="stars">
<!--@for($i=1; $i<=10; $i++)-->
<span class="star {$avg_rating >= $i ? 'filled' : ''}" data-value="{$i}">★</span>
<!--@end-->
</span>
<span id="avg_rating">{number_format($avg_rating, 1)}</span>
</div>

<!-- 사용자 평점 입력 -->
<!--@if($logged_info)-->
<div class="user-rating">
<span class="label">내 평점:</span>
<span id="user_rating_stars" class="stars">
<!--@for($i=1; $i<=10; $i++)-->
<label class="star {$user_rating >= $i ? 'filled' : ''}" data-value="{$i}">
<input type="radio" name="rating" value="{$i}" style="display:none;" {$user_rating == $i ? 'checked' : ''}>

</label>
<!--@end-->
</span>
<span id="user_rating">{$user_rating ? number_format($user_rating, 1) : '평가하기'}</span>
</div>
<!--@else-->
<div class="login-required">
<p>평점을 남기려면 로그인이 필요합니다.</p>
</div>
<!--@end-->
</div>
</div>

이리 저리 해서 거의 완성을 했는데 이번에 AJAX가 작동을 안한다.

그것이 내 실력으로는 AJAX 때문인지 다른데서 문제를 일으키는지도 알 수가 없다

며칠을 고민하고 A.I들에게 물어봐도 정답이 없네 으으으~

001.JPG

002.png

 

이 글을 보시는 고수님들이랑 이 기능이 필요하신 분들이 코딩을 보시고 답을 주시기를 고대합니다.

테스트 사이트 : https://moonhouse.co.kr/book

Github 주소 https://github.com/moonhouse-80san/rating

 

증상 :

테스트 페이지에서 평점을 주면 오류 메세지가 츨력됩니다. 

F5 눌러 리로드하면 정상적으로 부여된 평점이 보입니다.

DB의 테이블에도 정상적으로 잘 적용 됩니다.

 

p.s 이렇게 혼자만 코드 짜서 낑낑 거리다보니 새로 오픈하는 사이트에서는 이런 게시판이 하나 생겼으면 좋겠네요.

일명 "단체지성 게시판" 

댓글 15

  • 2025.02.14 11:57 #1858927

    예전에 숭숭군님이 배포하셨던 평점 애드온인데 이거 참고하시면 되지 않을까요?

    PHP7에서 작동했는데 PHP8에서는 작동하지 않아서 사용못하고 있어요.

    숭숭군님 사이트가 지금 정상작동하고 있지 않아서 파일 첨부합니다.

    다운 받으시면 삭제하겠습니다.

  • 2025.02.14 12:10 #1858932
    이 애드온은 저도 가지고 있는데 좋아요를 평점으로 치환하는 형식이라 어딘가 애매 하더라구요.
    그래도 한번 다시 봐야 겠네요.
    감사합니다.
  • 2025.02.14 12:37 #1858940

    exec_json 으로 rating.procRatingInsert 호출시 rating 모듈을 호출할텐데, module.xml 에 해당 proc 에 관한 액션정의가 없어서 문제가 생기는것 같습니다. module.xml 에 해당 액션을 정의후 테스트 해보세요. (컨트롤러도 모듈쪽으로 옮겨기는것이 더 나을것 같습니다.)

  • 2025.02.14 14:13 #1858955
    너무 애드온으로 처리하려 하지 마시고 모듈로 해보세요.
    애초에 테이블 생성부터 모듈이 해야될 일이라고 생각되는데 너무 애드온으로 처리하려고 하시는것같아요.
    구 XE 모듈 형태면 저도 시도 못했는데 현재 라이믹스 새 모듈 구조로는 저도 만들었습니다.
    몇가지 규칙들만 조심하면 대부분 너무 쉽게 몇줄 안쓰고도 작동합니다.
  • 2025.02.14 14:51 #1858969
    그러니까 애드온으로는 구현이 쉽지 않다는 거네요.
    근데 모듈에 대한 이해가 부족하여 설치된 모듈에 설정 자체를 들어가는 것 부터 어려워서 힘드네요.
    저는 이 애드온에 대한 모든 권리도 주장하지 않겠으니 누가 모듈로 만들어 주면 좋겠네요.
  • 2025.03.13 16:29 #1903137

    moonhouse라는 모듈을 만들고

    schema에

    document_srl, ratio_star, member_srl, regdate
    를 만들어서

    각 document_srl에 별점을 member_srl에 주고, 이미 그 전에 별점을 준 경우 못바꾸게 하면 되지 않을까요?

     

    물론 스킨에 대한 설정까지는 안만들어봤지만.. 혼자 쓸것이라면 getModel해서 DB에 있는 값 가져와 출력해도 좋을 듯 합니다.

  • 2025.03.13 22:00 #1903173

    테스트 사이트 : https://moonhouse.co.kr/book

    Github 주소 https://github.com/moonhouse-80san/rating

    모듈로 해 봤는데 정상 작동이 안되고 있습니다.

    모듈을 만들 실력이 되질 않아서 AI에게 의존하다 보니 어렵네요ㅠㅠ 

  • 2025.03.14 08:56 #1903218

    게시판에 별점을 선택하는 것은 게시판 스킨으로 두시고,

    Controller로 json_exec('모듈명.proc이름') 으로 요청을 보내 처리하는것은 어떤지요?

     

    그러면, 모듈 view를 별도로 구현할 필요는 없고, Model, Controller만 구현하면 됩니다.

  • 2025.03.14 12:08 #1903249

    일단 아주 가볍게 만들었습니다.

    starpoint.zip

     

    모듈을 설치하고 DB를 만든다음

    게시판 스킨에 아래 Step에 따라 작업하시면 됩니다.

     

    1. 게시판 스킨에 rate.js 만들고 스킨에 include하기 (이름은 상관없습니다.)

    자바스크립트 파일에 아래와 같이 내용을 추가 합니다.

     

    function doRate(document_srl, rate_srl){

        if (!confirm("한번 평가한 점수는 취소되지 않습니다.\n정말 평가 하시겠습니까?")) return;

     

        exec_json("starpoint.procStarpointDoRateDocument", { doc_srl: document_srl, star_srl: rate_srl }, function () {

            alert("평가 완료 하였습니다. ");

        });

    }

     

    2. 게시판 스킨에서 평점 점수와 내가 평가한 정보를 출력하는 방법

    스킨 상단 또는 적절한 곳에 아래 코드를 입력합니다.

    {@

                $my_s = 'N';

                //평점 모듈

                $oStarPointModel = getModel('starpoint');

     

                //평점을 평가 했는지 여부를 체크하고, 게시글의 전체 평균 점수를 제공합니다.

                $my_starpoint = $oStarPointModel->getIsRated($oDocument->document_srl);

                $total_point = $oStarPointModel->getDocumentRatedTotalPoint($oDocument->document_srl);

     

                if($my_starpoint) $my_s = 'Y';

           

            }

     

    평가 여부 : {$my_s}<br>

    게시글 총 점수 : {$total_point->sum}<br>

    게시글 평균 점수 : {$total_point->avg}<br>

    게시글 평가 참여 인수 : {$total_point->count_members}<br><br>

     

    <a onclick="doRate({$oDocument->document_srl}, 3)">평가하기 (3점)</a>

     

    평가 여부에 따라서 버튼을 비활성화 해도 되고, 그대로 두되 내가 몇점을 평가했는지 보여줘도 되겠죠 ㅎㅎ.

    게시글이 실제로 있는지 여부는 체크하지 않고, 그냥 POST보내면 입력되게 되어 있으니 조금만 손 보면 되겠습니다.

     

  • 2025.03.15 06:39 #1903361

    감사합니다.

    한줄기 빛이 되었습니다.

  • 2025.03.17 15:18 #1903925

    @얼음조각티 님 덕분에 모듈을 완성할 수 있었네요.

    감사합니다.

    허락하신다면 제가 수정한 버전 공개할려고 하는데 어떠신지요?  

  • 2025.03.17 15:46 #1903929

    매우 좋습니다~!!

  • 2025.03.13 16:51 #1903141

    평점 기능이 모듈로 만들어진게 아직 없나요?!

  • 2025.03.13 22:03 #1903177

    평점 기능 모듈이 있나요?

    제가 본적이 없어서

    스케치북 스킨에는 비슷한 기능이 있는데 그건 글 작성자가 자체 평점을 주는 거라 좀 다르고

    예전에 숭숭군님이 배포하셨던 평점 애드온은 좋아요를 평점으로 치환하는 형식이라 아쉽고

  • 2025.03.17 19:18 #1903947

    자료실에 "게시글 별 평점" 모듈 배포했습니다.

    https://rhymix.org/pds/1903941

    얼음조각티님 감사합니다.