목록

Thumbnail
등록 2025.03.17
최근 릴리즈 2026.01.11
6
355

자료 정보

쉬운 설치 쉬운 설치 지원
간단한 소개 게시글에 별모양 평점을 부여하는 모듈입니다.
설치 경로 ./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 47회 다운로드 1. 스킨 추가 지정 - Simple, Default, black_simple, black_default 2. 평가 회원 출력 추가 - 일반 출력, 관리자만 출력, 출력 안함 평가 회원 출력 형태 - 일반형과 심플형, Simple + Default(관리자)
  • 1.4 2025.03.29 16.1KB 86회 다운로드
  • 1.3 2025.03.22 11.9KB 49회 다운로드
  • 1.2 2025.03.19 10.6KB 61회 다운로드
  • 1.1 2025.03.19 10.9KB 53회 다운로드
  • 1.0 2025.03.17 10.5KB 59회 다운로드

상세 설명

얼음조각티님이 기초적인 틀을 만들어 주고, 제가 약간의 디자인을 추가하여

얼음조각티님의 허락을 득한 후 모듈로 배포합니다.

 

[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(관리자)

image.png

[Default]

image.png

 

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

image.png

 

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

image.png

_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

image.png

 

[V 1.3 수정]

1. 평가가 DB에 저장되지 않는다는 이슈가 있어서 수정했습니다.

2. 기존의 사용자중 평가가 없거나 중요하지 않으면 DB에 접속해서 rx_document_star 테이블 삭제해서

초기화후 관리자 설정에서 모듈 업데이트후 사용하면 깔끔합니다. (그냥 사용하셔도 별 문제 없음)

3. DB 오류나 다른 문제가 있으면 댓글이나 깃허브 이슈로 남겨주세요.

 

[V 1.2 수정]

V1.1 이 평가가 안되는 오류 수정 - DB 테이블 문제 (socialskyo)

 

[V 1.1 수정]

- 본인의 글은 평가할 수 없게 수정 (socialskyo)

- 디자인을 심플하게 수정

image.png

image.png

- 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. 게시판 스킨 설정에서 "게시글 별 평점 모듈 사용" 에서 "모듈 설치"를 선택하면 됩니다.
 

[비로그인]

image.png

 

[로그인 회원]

image.png

 

[평점후]

image.png

 

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

image.png

image.png

사용자 피드백 11

  • 먼저 좋은 자료 감사합니다.

    방금 받아서 설치를 해보았는데

    스케치북 스킨에서만 동작하나요?

    rx-flextagram 스킨에서는 평점 후 적용이 안됩니다.

  • @BIGBOSS

    그렇지는 않을걸요...

    OrangeDay_board,  default, xedition에서도 작동 확인했습니다. 

  • rx-flextagram 스킨에서는 평점 후 적용이 안되네요. ㅠㅠ

  • @BIGBOSS

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

     

    이렇게 적용하니 작동하는데요

  • @팔공산

    저도 똑같이 했는데

    별점을 클릭하면 평점 후 내용이 적용되지 않더라구요. 

    아이고 제가 바보 였네요.

    잘 됩니다. 도움 감사드립니다.

    잘 사용하겠습니다.

  • @BIGBOSS

    default 나 xedition 스킨에도 적용을 한번 해 보시고

    적용안되면 DB의 테이블이 생성이 안되었거나 시스템의 문제 같고

    적용된다면 rx-flextagram 스킨에서의 문제인 것 같습니다.  

  • 항상 열일하시는 팔공산님 이번에도 좋은자료 감사합니다~~~

     

  • rx-flextagram 스킨에서도 잘 됩니다.

    그런데 모듈 설치 안됨(기본) 으로 되어 있는 게시판에서도 출력이 되고 있습니다.

    버그인가요?

    저는 일단 아래와 같이 사용하고 있습니다.

     

    <div cond="$module_info->star_point !== 'N'">
    <include target="/modules/starpoint/tpl/rating.html" />
     </div>

  • @BIGBOSS

    skin.xml 에서도 star_point 에도 추가하여 설정을 해주신게 맞는지요?

     

    <pre>

    {var_dump($module_info)}

    </pre>

    하여 star_point의 변수 값이 N인지 Y인지 Null인지 체크해보시기 바랍니다.

  • 너무 좋습니다^^ slow 테마에서도 적용됩니다

  • OrangeDay _board 잘 작동하네요 감사합니다~~