테스트 사이트 - 개발 중인 베타 버전입니다

문의드립니다. 채택완료

개애비 8개월 전 조회 1,443

https://sir.kr/qa/552646

 

위와같이 질문을 하엿는데

답변을 원작자에게 받기는 햇는데

순위변동적용시 문제되는부분이 잇어 서요

댓글보면 잇거든요

 

 

댓글을 작성하려면 로그인이 필요합니다.

답변 1개

채택된 답변
+20 포인트
8개월 전

안녕하세요...

@개애비 님

 

제가 SIR에 실시간으로 접속해 있는게 아니다 보니 늦게 확인할 수 있는 점 너그러운 양해 부탁드립니다.

요청하신 부분을 반영하였고, 기능 까지 개선하여 코드를 공유하겠습니다.

 

조금만 더 다듬어서 최근 게시물 스킨에 다시 업로드 해야 겠습니다^0^
수정된 버전은 다음과 같습니다.

기존과 동일하게 아래 코드를 통째로 교체 해주시면 됩니다.

 

오늘도 행복한 하루 보내세요

채택은 잊지 마시구요^^

 

</span></p>

<p> </p>

<p><?php</p>

<p>include_once('./_common.php');</p>

<p> </p>

<p>// 날짜 간격 설정 (오늘과 비교할 과거 날짜, -1은 하루 전)</p>

<p>$days_ago = -1;</p>

<p> </p>

<p>// 오늘과 비교 날짜 계산</p>

<p>$today = date('Y-m-d');</p>

<p>$compare_date = date('Y-m-d', strtotime($days_ago.' days'));</p>

<p> </p>

<p>// 출력 인원수</p>

<p>$limit = 10;</p>

<p> </p>

<p>// 제외할 아이디</p>

<p>$exclude_ids_array = ['webmaster', 'test3'];</p>

<p>$exclude_ids = implode("','", $exclude_ids_array);</p>

<p> </p>

<p>// 오늘의 총 포인트와 오늘 획득 포인트를 가져오는 쿼리</p>

<p>$sql_today = "</p>

<p>    SELECT</p>

<p>        m.mb_id,</p>

<p>        m.mb_nick,</p>

<p>        m.mb_point as total_points,</p>

<p>        IFNULL(SUM(CASE WHEN DATE(p.po_datetime) = '{$today}' THEN p.po_point ELSE 0 END), 0) as today_points</p>

<p>    FROM</p>

<p>        {$g5['member_table']} m</p>

<p>    LEFT JOIN</p>

<p>        {$g5['point_table']} p ON m.mb_id = p.mb_id</p>

<p>    WHERE</p>

<p>        m.mb_id NOT IN ('{$exclude_ids}')</p>

<p>    GROUP BY</p>

<p>        m.mb_id</p>

<p>    ORDER BY</p>

<p>        m.mb_point DESC</p>

<p>    LIMIT {$limit}</p>

<p>";</p>

<p>$today_result = sql_query($sql_today);</p>

<p> </p>

<p>// 어제의 총 포인트를 가져오는 쿼리</p>

<p>$sql_compare = "</p>

<p>    SELECT</p>

<p>        m.mb_id,</p>

<p>        m.mb_point - IFNULL(SUM(CASE WHEN DATE(p.po_datetime) = '{$today}' THEN p.po_point ELSE 0 END), 0) as yesterday_points</p>

<p>    FROM</p>

<p>        {$g5['member_table']} m</p>

<p>    LEFT JOIN</p>

<p>        {$g5['point_table']} p ON m.mb_id = p.mb_id</p>

<p>    WHERE</p>

<p>        m.mb_id NOT IN ('{$exclude_ids}')</p>

<p>    GROUP BY</p>

<p>        m.mb_id</p>

<p>    ORDER BY</p>

<p>        yesterday_points DESC</p>

<p>";</p>

<p>$compare_result = sql_query($sql_compare);</p>

<p> </p>

<p>// 비교 날짜의 랭킹과 포인트를 계산</p>

<p>$compare_ranking = [];</p>

<p>$compare_points = [];</p>

<p>$rank = 1;</p>

<p>while ($row = sql_fetch_array($compare_result)) {</p>

<p>    $compare_ranking[$row['mb_id']] = $rank++;</p>

<p>    $compare_points[$row['mb_id']] = (float)$row['yesterday_points'];</p>

<p>}</p>

<p> </p>

<p>// 순위 변동 계산 함수</p>

<p>function get_rank_change($mb_id, $current_rank, $compare_ranking) {</p>

<p>    if (isset($compare_ranking[$mb_id])) {</p>

<p>        $compare_rank = $compare_ranking[$mb_id];</p>

<p>        $change = $compare_rank - $current_rank;</p>

<p>        if ($change > 0) {</p>

<p>            return "<span style='color:green'>▲ {$change}</span>";</p>

<p>        } elseif ($change < 0) {</p>

<p>            return "<span style='color:red'>▼ " . abs($change) . "</span>";</p>

<p>        } else {</p>

<p>            return "-";</p>

<p>        }</p>

<p>    } else {</p>

<p>        return "<span style='color:blue'>New</span>";</p>

<p>    }</p>

<p>}</p>

<p>?></p>

<p><style></p>

<p>    .ranking-container {</p>

<p>        max-width: 800px;</p>

<p>        margin: 0 auto;</p>

<p>        padding: 20px 0;</p>

<p>    }</p>

<p>    .ranking-title {</p>

<p>        background: #6f809a;</p>

<p>        color: #fff;</p>

<p>        text-align: center;</p>

<p>        padding: 12px;</p>

<p>        font-size: 1em;</p>

<p>        margin: 0 0 20px;</p>

<p>        border-radius: 4px;</p>

<p>    }</p>

<p>    .ranking-table {</p>

<p>        background: #fff;</p>

<p>        border-radius: 8px;</p>

<p>        box-shadow: 0 2px 8px rgba(0,0,0,0.1);</p>

<p>        overflow: hidden;</p>

<p>    }</p>

<p>    .ranking-table ul {</p>

<p>        display: flex;</p>

<p>        align-items: center;</p>

<p>        padding: 15px 10px;</p>

<p>        border-bottom: 1px solid #eee;</p>

<p>        margin: 0;</p>

<p>    }</p>

<p>    .ranking-table ul:first-child {</p>

<p>        background: #f8f9fa;</p>

<p>        font-weight: 600;</p>

<p>        border-bottom: 2px solid #e9ecef;</p>

<p>    }</p>

<p>    .ranking-table ul:last-child {</p>

<p>        border-bottom: none;</p>

<p>    }</p>

<p>    .ranking-table ul:hover:not(:first-child) {</p>

<p>        background: #f8f9fa;</p>

<p>    }</p>

<p>    .ranking-table li {</p>

<p>        flex: 1;</p>

<p>        text-align: center;</p>

<p>        white-space: nowrap;</p>

<p>        overflow: hidden;</p>

<p>        text-overflow: ellipsis;</p>

<p>        padding: 0 5px;</p>

<p>    }</p>

<p>    .ranking-table li:first-child {</p>

<p>        flex: 0 0 8%;</p>

<p>    }</p>

<p>    .ranking-table li:last-child {</p>

<p>        flex: 0 0 10%;</p>

<p>    }</p>

<p>    .point-change-positive {</p>

<p>        color: #28a745;</p>

<p>    }</p>

<p>    .point-change-negative {</p>

<p>        color: #dc3545;</p>

<p>    }</p>

<p></style></p>

<p> </p>

<p><div class="ranking-container"></p>

<p>    <h2 class="ranking-title">포인트 랭킹</h2></p>

<p>    <div class="ranking-table"></p>

<p>        <ul></p>

<p>            <li>순위</li></p>

<p>            <li>닉네임</li></p>

<p>            <li>어제 포인트</li></p>

<p>            <li>오늘 포인트</li></p>

<p>            <li>변동 포인트</li></p>

<p>            <li>총 포인트</li></p>

<p>            <li>순위변동</li></p>

<p>        </ul></p>

<p>        <?php</p>

<p>        $rank = 1;</p>

<p>        while ($row = sql_fetch_array($today_result)) {</p>

<p>            $mb_id = $row['mb_id'];</p>

<p>            $mb_nick = $row['mb_nick'];</p>

<p>            $total_points = (float)$row['total_points'];</p>

<p>            $today_points = (float)$row['today_points'];</p>

<p>            $yesterday_points = isset($compare_points[$mb_id]) ? $compare_points[$mb_id] : 0;</p>

<p>            $point_change = $today_points;</p>

<p>            $rank_change = get_rank_change($mb_id, $rank, $compare_ranking);</p>

<p>           </p>

<p>            $point_change_class = $point_change >= 0 ? 'point-change-positive' : 'point-change-negative';</p>

<p>            $point_change_symbol = $point_change >= 0 ? '+' : '';</p>

<p> </p>

<p>            echo "<ul>";</p>

<p>            echo "<li>{$rank}</li>";</p>

<p>            echo "<li>{$mb_nick}</li>";</p>

<p>            echo "<li>" . number_format($yesterday_points) . "</li>";</p>

<p>            echo "<li>" . number_format($total_points) . "</li>";</p>

<p>            echo "<li class='{$point_change_class}'>{$point_change_symbol}" . number_format($point_change) . "</li>";</p>

<p>            echo "<li>" . number_format($total_points) . "</li>";</p>

<p>            echo "<li>{$rank_change}</li>";</p>

<p>            echo "</ul>";</p>

<p>           </p>

<p>            $rank++;</p>

<p>        }</p>

<p>        ?></p>

<p>    </div></p>

<p></div></p>

<p>

로그인 후 평가할 수 있습니다

답변에 대한 댓글 5개

웅푸
8개월 전
미니님 닉네임 사이드뷰 함수 적용할려면요? 프리즈 ㅎㅎ
미니님a
8개월 전
사이드 뷰 적용하실려면 사이드 뷰 적용 함수만 적용해주시면 되세요

[code]
$point_change_class = $point_change >= 0 ? 'point-change-positive' : 'point-change-negative';
$point_change_symbol = $point_change >= 0 ? '+' : '';
[/code]

요기 바로 밑에 넣어주세요
[code]
$mb = get_member($mb_id);
$member_name = get_sideview($mb['mb_id'], $mb['mb_nick'], $mb['mb_email'], $mb['mb_homepage']);
[/code]

그리고 이름 부분을 찾아주세요

[code]
echo "<li>{$mb_nick}</li>";
[/code]

아래처럼 변경 해주세요

[code]
echo "<li>{$member_name}</li>";
[/code]

잘 되는 것 테스트 했습니다.
미니님a
8개월 전
@웅푸 님 @개애비 님

https://sir.kr/g5_plugin/13259

업로드 하였습니다.
웅푸
8개월 전
오호 감사합니다. ~^^
개애비
8개월 전
천사가 따로없네요 감사합니다.

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인