| 자료 유형 | 모듈 |
|---|---|
| 간단한 소개 | 게시글에 별모양 평점을 부여하는 모듈입니다. |
| 설치 경로 | ./modules/starpoint |
| 코어 지원 범위 | Rhymix 2.1 이상 |
| PHP 지원 범위 | PHP 7.4 ~ 8.4 |
| 자료 구분 | 공개 자료 GPL v2 |
| 저장소 URL | https://github.com/moonhouse-80san/starpoint |
| 데모 URL | https://moonhouse.co.kr/xemy/598200 |
| 기타 정보 | https://github.com/moonhouse-80san/SketchBook5_MH 의 스케치북 게시판 스킨을 설치하면 모듈만 업데이트 하면 바로 작동합니다. |
| 버전 | 날짜 | 용량 | 다운 |
|---|---|---|---|
| 1.5 | 2026.01.11 | 25.4KB | 12 |
| 1.4 | 2025.03.29 | 16.1KB | 76 |
| 1.3 | 2025.03.22 | 11.9KB | 39 |
| 1.2 | 2025.03.19 | 10.6KB | 48 |
| 1.1 | 2025.03.19 | 10.9KB | 43 |
| 1.0 | 2025.03.17 | 10.5KB | 49 |
얼음조각티님이 기초적인 틀을 만들어 주고, 제가 약간의 디자인을 추가하여
얼음조각티님의 허락을 득한 후 모듈로 배포합니다.
[V 1.5 수정]
* 주의사항 - 기존 사용자는 게시판 설정을 다시 해야합니다.(기본스킨이 Simple 스킨 으로 변경)
1. 스킨 추가 지정 - Simple, Default, black_simple, black_default
• 해당 게시판스킨에 적용
skin.xml 에 추가
<var name="star_point" type="radio">
<title>게시글 별 평점 모듈 사용</title>
<description>게시글 별 평점 모듈이 설치되어 있어야 합니다.
https://moonhouse.co.kr/xemy/598200</description>
<options value="">
<title>모듈 설치 안됨(기본)</title>
</options>
<options value="Y">
<title>모듈 설치</title>
</options>
</var>
<var name="starpoint_skin" type="radio">
<title> ┖ 스킨</title>
<description/>
<options value="">
<title>Simple(기본)</title>
</options>
<options value="d">
<title>Default</title>
</options>
<options value="b_s">
<title>Black Simple</title>
</options>
<options value="b_d">
<title>Black Default</title>
</options>
</var>
<var name="starpoint_text" type="text">
<title> ┖ 타이틀</title>
<description>상단에 들어갈 타이틀(기본문구 : 글)</description>
</var>
<var name="vote_members" type="radio">
<title> ┖ 평가 회원 출력</title>
<description>평점을 투표한 회원 출력</description>
<options value="">
<title>출력(기본)</title>
</options>
<options value="N">
<title>출력 안함</title>
</options>
<options value="A">
<title>관리자만 출력</title>
</options>
</var>
<var name="vm_form" type="radio">
<title> ┖ 평가 회원 출력 형태</title>
<description>평점을 투표한 회원 출력의 형태를 선택</description>
<options value="">
<title>Simple(기본)</title>
</options>
<options value="D">
<title>Default</title>
</options>
<options value="T">
<title>Simple + Default(관리자)</title>
</options>
</var>
2. 평가 회원 출력 추가 - 일반 출력, 관리자만 출력, 출력 안함
평가 회원 출력 형태 - 일반형과 심플형, Simple + Default(관리자)

[Default]

[Simple - 평점은 관리자만 보임]

[Simple + Default(관리자) - Simple은 모두에게 출력 Default형은 관리자만 출력]

_read.html 에 추가
<!--// 글 별평점 모듈 --> <include cond="!$mi->star_point =='' && $mi->starpoint_skin ==''" target="/modules/starpoint/skins/simple/rating.html" /> <include cond="!$mi->star_point =='' && $mi->starpoint_skin =='d'" target="/modules/starpoint/skins/default/rating.html" /> <include cond="!$mi->star_point =='' && $mi->starpoint_skin =='b_s'" target="/modules/starpoint/skins/black_simple/rating.html" /> <include cond="!$mi->star_point =='' && $mi->starpoint_skin =='b_d'" target="/modules/starpoint/skins/black_default/rating.html" /> <!-- 평가 회원 출력 --> <include cond="!$mi->star_point =='' && $mi->vote_members ==''" target="vote_members.html" /> <include cond="!$mi->star_point =='' && $mi->vote_members =='A' && $logged_info->is_admin == 'Y'" target="vote_members.html" />
vote_members.html 파일 추가 vote_members.zip
{@
$oStarPointModel = getModel('starpoint');
$rating_list = $oStarPointModel->getRatingList($oDocument->document_srl);
}
<!--@if($rating_list && count($rating_list) > 0)-->
<!--@if($mi->vm_form =='D')-->
<div style="margin-bottom:10px; display:flex; <!--@if($mi->starpoint_skin =='' || $mi->starpoint_skin =='b_s')-->justify-content:center;<!--@elseif($mi->starpoint_skin =='d' || $mi->starpoint_skin =='b_d')-->justify-content:flex-end; margin-right:10px;<!--@end-->">
<div class="vm_body" style="clear:both; padding:5px; border: 1px solid #e0e0e0; border-radius:5px; max-width::400px; min-width:370px; text-align:center;">
<div cond="$mi->vote_members =='A' && $logged_info->is_admin == 'Y'" style="padding:5px 10px; background:#ff9800; color:white; display:inline-block; border-radius:3px; font-size:12px; cursor:pointer; " onclick="jQuery('#rating_detail_list').slideToggle();">
<strong>???? 관리자 전용</strong>
</div>
<div class="vm_top" style="cursor:pointer; padding:5px 0; text-align:center;" onclick="jQuery('#rating_detail_list').slideToggle();">
<h4 style="margin:0; font-size:14px; font-weight:bold; display:inline-block;">
평가 참여 회원 ({count($rating_list)}명)
</h4>
<span style="margin-left:10px; font-size:12px;"><font color="#ffb400">▼</font> 클릭하여 펼치기/접기</span>
</div>
<div id="rating_detail_list" style="display:none; margin-top:10px;">
<table style="width:100%; border-collapse:collapse;">
<thead>
<tr class="vm_tr" style="background:#f0f0f0; border-bottom:2px solid #ddd;">
<th style="padding:8px; text-align:left;">회원</th>
<th style="padding:8px; text-align:center; max-width:170px;">평점</th>
<th style="padding:8px; text-align:center; max-width:150px;">평가일시</th>
</tr>
</thead>
<tbody>
<!--@foreach($rating_list as $rating)-->
<tr style="border-bottom:1px solid #e0e0e0;">
<td style="padding:8px;">
<!--@if($rating->nick_name)-->
<strong>{$rating->nick_name}</strong>
<!--@else-->
<span>탈퇴회원</span>
<!--@end-->
</td>
<td style="padding:8px; text-align:center;">
<span style="color:#ffb400; font-size:16px;">
<!--@for($i=1; $i<=5; $i++)-->
<!--@if($i <= $rating->star_rate)-->★<!--@else-->☆<!--@end-->
<!--@end-->
</span>
<span style="margin-left:5px; font-weight:bold;">{$rating->star_rate}점</span>
</td>
<td style="padding:8px; text-align:center; font-size:12px;">
{zdate($rating->regdate, 'Y-m-d H:i')}
</td>
</tr>
<!--@end-->
</tbody>
</table>
</div>
</div>
</div>
<!--@elseif($mi->vm_form =='T')-->
<div class="vm_area">
<div class="vm_box">
<strong style="font-weight:bold">평가 참여 :</strong>
<!--@foreach($rating_list as $idx => $rating)-->
<!--@if($rating->nick_name)-->
{@
$oMemberModel = getModel('member');
$profile_image = $oMemberModel->getProfileImage($rating->member_srl);
$profile_url = $profile_image->src ? $profile_image->src : '$tpl_path/img/ico_default.jpg';
}
<span style="position:relative; display:inline-block; margin:0 2px;">
<img src="{$profile_url}" onerror="this.src='{$tpl_path}/img/ico_default.jpg'" title="{$rating->nick_name}" class="pr_tooltip" pr_color="dark" pr_position="top" style="width:30px; height:30px; border-radius:50%; object-fit:cover; cursor:pointer; vertical-align:middle; border:2px solid #ffb400;">
<!--@if($logged_info->is_admin == 'Y')-->
<span style="position:absolute; top:50%; left:50%; transform:translate(-50%, -50%); color:#fff; text-shadow:1px 1px 0 #444,1px 1px 0 #222; font-weight:bold; font-size:10px;">{$rating->star_rate}점</span>
<!--@end-->
<div cond="$mo">{$rating->nick_name}</div>
</span>
<!--@else-->
<span style="position:relative; display:inline-block; margin:0 2px;">
<img src="{$tpl_path}/img/ico_default.jpg" title="탈퇴회원" class="pr_tooltip" pr_color="dark" pr_position="top" style="width:30px; height:30px; border-radius:50%; object-fit:cover; cursor:pointer; vertical-align:middle; border:2px solid #666;">
<!--@if($logged_info->is_admin == 'Y')-->
<span style="position:absolute; top:50%; left:50%; transform:translate(-50%, -50%); color:#fff; text-shadow:1px 1px 0 #444,1px 1px 0 #222; font-weight:bold; font-size:10px;">{$rating->star_rate}점</span>
<!--@end-->
</span>
<!--@end-->
<!--@end-->
</div>
</div>
<!--@if($logged_info->is_admin == 'Y')-->
<div style="margin-bottom:10px; display:flex; <!--@if($mi->starpoint_skin =='' || $mi->starpoint_skin =='b_s')-->justify-content:center;<!--@elseif($mi->starpoint_skin =='d' || $mi->starpoint_skin =='b_d')-->justify-content:flex-end; margin-right:10px;<!--@end-->">
<div class="vm_body" style="clear:both; padding:5px; border: 1px solid #e0e0e0; border-radius:5px; max-width::400px; min-width:370px; text-align:center;">
<div style="padding:5px 10px; background:#ff9800; color:white; display:inline-block; border-radius:3px; font-size:12px; cursor:pointer; " onclick="jQuery('#rating_detail_list').slideToggle();"
<strong>???? 관리자 전용</strong>
</div>
<div class="vm_top" style="cursor:pointer; padding:5px 0; text-align:center;" onclick="jQuery('#rating_detail_list').slideToggle();">
<h4 style="margin:0; font-size:14px; font-weight:bold; display:inline-block;">
평가 참여 회원 ({count($rating_list)}명)
</h4>
<span style="margin-left:10px; font-size:12px;"><font color="#ffb400">▼</font> 클릭하여 펼치기/접기</span>
</div>
<div id="rating_detail_list" style="display:none; margin-top:10px;">
<table style="width:100%; border-collapse:collapse;">
<thead>
<tr class="vm_tr" style="background:#f0f0f0; border-bottom:2px solid #ddd;">
<th style="padding:8px; text-align:left;">회원</th>
<th style="padding:8px; text-align:center; max-width:170px;">평점</th>
<th style="padding:8px; text-align:center; max-width:150px;">평가일시</th>
</tr>
</thead>
<tbody>
<!--@foreach($rating_list as $rating)-->
<tr style="border-bottom:1px solid #e0e0e0;">
<td style="padding:8px;">
<!--@if($rating->nick_name)-->
<strong>{$rating->nick_name}</strong>
<!--@else-->
<span>탈퇴회원</span>
<!--@end-->
</td>
<td style="padding:8px; text-align:center;">
<span style="color:#ffb400; font-size:16px;">
<!--@for($i=1; $i<=5; $i++)-->
<!--@if($i <= $rating->star_rate)-->★<!--@else-->☆<!--@end-->
<!--@end-->
</span>
<span style="margin-left:5px; font-weight:bold;">{$rating->star_rate}점</span>
</td>
<td style="padding:8px; text-align:center; font-size:12px;">
{zdate($rating->regdate, 'Y-m-d H:i')}
</td>
</tr>
<!--@end-->
</tbody>
</table>
</div>
</div>
</div>
<!--@end-->
<!--@else-->
<div class="vm_area">
<div class="vm_box">
<strong style="font-weight:bold">평가 참여 :</strong>
<!--@foreach($rating_list as $idx => $rating)-->
<!--@if($rating->nick_name)-->
{@
$oMemberModel = getModel('member');
$profile_image = $oMemberModel->getProfileImage($rating->member_srl);
$profile_url = $profile_image->src ? $profile_image->src : '$tpl_path/img/ico_default.jpg';
}
<span style="position:relative; display:inline-block; margin:0 2px;">
<img src="{$profile_url}" onerror="this.src='{$tpl_path}/img/ico_default.jpg'" title="{$rating->nick_name}" class="pr_tooltip" pr_color="dark" pr_position="top" style="width:30px; height:30px; border-radius:50%; object-fit:cover; cursor:pointer; vertical-align:middle; border:2px solid #ffb400;">
<!--@if($logged_info->is_admin == 'Y')-->
<span style="position:absolute; top:50%; left:50%; transform:translate(-50%, -50%); color:#fff; text-shadow:1px 1px 0 #444,1px 1px 0 #222; font-weight:bold; font-size:10px;">{$rating->star_rate}점</span>
<!--@end-->
<div cond="$mo">{$rating->nick_name}</div>
</span>
<!--@else-->
<span style="position:relative; display:inline-block; margin:0 2px;">
<img src="{$tpl_path}/img/ico_default.jpg" title="탈퇴회원" class="pr_tooltip" pr_color="dark" pr_position="top" style="width:30px; height:30px; border-radius:50%; object-fit:cover; cursor:pointer; vertical-align:middle; border:2px solid #666;">
<!--@if($logged_info->is_admin == 'Y')-->
<span style="position:absolute; top:50%; left:50%; transform:translate(-50%, -50%); color:#fff; text-shadow:1px 1px 0 #444,1px 1px 0 #222; font-weight:bold; font-size:10px;">{$rating->star_rate}점</span>
<!--@end-->
</span>
<!--@end-->
<!--@end-->
</div>
</div>
<!--@end-->
<!--@end-->
[V 1.4 수정]
1. 스킨 지정 - Default, Simple
평점모듈 이지만 게시판 스킨에서 설정과 수정이 많습니다.
어느 것이 정답인지는 모르겠지만 게시판 스킨 수정이 활용 범위가 더 넓은 것 같네요.
스킨을 지정할려면 게시판 스킨의 skin.xml 와 _read.html 에 코드를 추가해야 합니다.
skin.xml 에 starpoint_skin 설정 추가
<var name="starpoint_skin" type="radio">
<title> ┖ 스킨</title>
<description/>
<options value="">
<title>Default(기본)</title>
</options>
<options value="s">
<title>Simple</title>
</options>
</var>
_read.html 에 스킨 추가
<!--// 글 별평점 모듈 -->
<include cond="!$mi->star_point =='' && $mi->starpoint_skin ==''" target="/modules/starpoint/tpl/rating.html" />
<include cond="!$mi->star_point =='' && $mi->starpoint_skin =='s'" target="/modules/starpoint/tpl/simple/rating.html" />
2. 평가하기시 별에 마우스 오버시 평가점 출력
[Simple 스킨] https://moonhouse.co.kr/xetip/598109

[V 1.3 수정]
1. 평가가 DB에 저장되지 않는다는 이슈가 있어서 수정했습니다.
2. 기존의 사용자중 평가가 없거나 중요하지 않으면 DB에 접속해서 rx_document_star 테이블 삭제해서
초기화후 관리자 설정에서 모듈 업데이트후 사용하면 깔끔합니다. (그냥 사용하셔도 별 문제 없음)
3. DB 오류나 다른 문제가 있으면 댓글이나 깃허브 이슈로 남겨주세요.
[V 1.2 수정]
V1.1 이 평가가 안되는 오류 수정 - DB 테이블 문제 (socialskyo)
[V 1.1 수정]
- 본인의 글은 평가할 수 없게 수정 (socialskyo)
- 디자인을 심플하게 수정


- skin.xml 에 빨간색 부분 추가 - 타이틀(글)부분 변경 가능
sketchbook5 게시판스킨이 아니면 _read.html 파일의 상단에 아래 파란색 코드 추가해야 정상 작동합니다.
$module_info로 작성시 starpoint모듈의 설정을 가져 올려고 하다보니 타이틀 변경이 안되고
$mi로 작성해야 해당 게시판 스킨의 설정을 가져 옵니다.
{@ $mi = $module_info; }
[설치 방법]
1. 다운 받은 모듈을 설치 - 관리자 설정 없음
2. 게시글 별 평점 모듈을 적용할 게시판 스킨의 파일에 아래의 코드를 작성
(예 : /modules/board/skins/sketchbook5)
/modules/board/skins/sketchbook5/skin.xml 에 추가
<var name="star_point" type="radio">
<title>게시글 별 평점 모듈 사용</title>
<description>게시글 별 평점 모듈이 설치되어 있어야 합니다.</description>
<options value="">
<title>모듈 설치 안됨(기본)</title>
</options>
<options value="Y">
<title>모듈 설치</title>
</options>
</var>
<var name="starpoint_text" type="text">
<title> ┖ 타이틀</title>
<description>상단에 들어갈 타이틀(기본문구 : 글)</description>
</var>
/modules/board/skins/sketchbook5/_read.html 의 적당한 위치에 추가
<include cond="!$module_info->star_point ==''" target="/modules/starpoint/tpl/rating.html" />
3. 게시판 스킨 설정에서 "게시글 별 평점 모듈 사용" 에서 "모듈 설치"를 선택하면 됩니다.
[비로그인]

[로그인 회원]

[평점후]

Tip 게시글 목록 & 위젯에 별 평점 출력하기 링크로 보기


댓글 11
먼저 좋은 자료 감사합니다.
방금 받아서 설치를 해보았는데
스케치북 스킨에서만 동작하나요?
rx-flextagram 스킨에서는 평점 후 적용이 안됩니다.
그렇지는 않을걸요...
OrangeDay_board, default, xedition에서도 작동 확인했습니다.
rx-flextagram 스킨에서는 평점 후 적용이 안되네요. ㅠㅠ
/modules/board/skins/rx-flextagram/components/article/article.html
<include target="article-grantform.html"/>
<!--@else-->
{$oDocument->getContent(false)}
<!--@end-->
<include target="/modules/starpoint/tpl/rating.html" />
이렇게 적용하니 작동하는데요
저도 똑같이 했는데
별점을 클릭하면 평점 후 내용이 적용되지 않더라구요.
아이고 제가 바보 였네요.
잘 됩니다. 도움 감사드립니다.
잘 사용하겠습니다.
default 나 xedition 스킨에도 적용을 한번 해 보시고
적용안되면 DB의 테이블이 생성이 안되었거나 시스템의 문제 같고
적용된다면 rx-flextagram 스킨에서의 문제인 것 같습니다.
항상 열일하시는 팔공산님 이번에도 좋은자료 감사합니다~~~
rx-flextagram 스킨에서도 잘 됩니다.
그런데 모듈 설치 안됨(기본) 으로 되어 있는 게시판에서도 출력이 되고 있습니다.
버그인가요?
저는 일단 아래와 같이 사용하고 있습니다.
<div cond="$module_info->star_point !== 'N'">
<include target="/modules/starpoint/tpl/rating.html" />
</div>
skin.xml 에서도 star_point 에도 추가하여 설정을 해주신게 맞는지요?
<pre>
{var_dump($module_info)}
</pre>
하여 star_point의 변수 값이 N인지 Y인지 Null인지 체크해보시기 바랍니다.
너무 좋습니다^^ slow 테마에서도 적용됩니다
OrangeDay _board 잘 작동하네요 감사합니다~~