게시글에 평점 부여 애드온을 만들면서 어려워서 자문을 구합니다.
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>
<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들에게 물어봐도 정답이 없네 으으으~
이 글을 보시는 고수님들이랑 이 기능이 필요하신 분들이 코딩을 보시고 답을 주시기를 고대합니다.
테스트 사이트 : https://moonhouse.co.kr/book
Github 주소 https://github.com/moonhouse-80san/rating
증상 :
테스트 페이지에서 평점을 주면 오류 메세지가 츨력됩니다.
F5 눌러 리로드하면 정상적으로 부여된 평점이 보입니다.
DB의 테이블에도 정상적으로 잘 적용 됩니다.
p.s 이렇게 혼자만 코드 짜서 낑낑 거리다보니 새로 오픈하는 사이트에서는 이런 게시판이 하나 생겼으면 좋겠네요.
일명 "단체지성 게시판"
댓글 5
예전에 숭숭군님이 배포하셨던 평점 애드온인데 이거 참고하시면 되지 않을까요?
PHP7에서 작동했는데 PHP8에서는 작동하지 않아서 사용못하고 있어요.
숭숭군님 사이트가 지금 정상작동하고 있지 않아서 파일 첨부합니다.
다운 받으시면 삭제하겠습니다.
그래도 한번 다시 봐야 겠네요.
감사합니다.
exec_json 으로 rating.procRatingInsert 호출시 rating 모듈을 호출할텐데, module.xml 에 해당 proc 에 관한 액션정의가 없어서 문제가 생기는것 같습니다. module.xml 에 해당 액션을 정의후 테스트 해보세요. (컨트롤러도 모듈쪽으로 옮겨기는것이 더 나을것 같습니다.)
애초에 테이블 생성부터 모듈이 해야될 일이라고 생각되는데 너무 애드온으로 처리하려고 하시는것같아요.
구 XE 모듈 형태면 저도 시도 못했는데 현재 라이믹스 새 모듈 구조로는 저도 만들었습니다.
몇가지 규칙들만 조심하면 대부분 너무 쉽게 몇줄 안쓰고도 작동합니다.
근데 모듈에 대한 이해가 부족하여 설치된 모듈에 설정 자체를 들어가는 것 부터 어려워서 힘드네요.
저는 이 애드온에 대한 모든 권리도 주장하지 않겠으니 누가 모듈로 만들어 주면 좋겠네요.