채택완료

공지사항 포인트 안 빠지게 하는 방법

2026-08-19 (수) 14:15:23 179
수고 하십니다.
게시판 글읽기에 포인트를 사용하게 끔 설정하였는데요.

공지사항을 읽어도 포인트가 빠지는 현상이 있네요.
아래 팁을 찾아 수정해보려 했는데

오래된 팁이라 적용이 안되는 것 같습니다.
https://sir.kr/boards/g5_tip/4766

어떻게 해야 공지사항을 읽어도 포인트가 안빠지게 할 수 있을까요?

조언 좀 부탁드립니다.

감사합니다.
|

답변 5개 / 댓글 5개

채택된 답변
+20 포인트
2026-08-19 (수) 16:12:12
bbs/board.php 128번 라인을 아래 처럼 변경 해주세요
// 공지글이라면 글읽기 포인트를 0으로 설정 (공지글은 그냥 읽을 수 있도록)
            $read_point = $board['bo_read_point'];
            if (isset($board['bo_notice']) && !empty($board['bo_notice']) && isset($write['wr_id'])) {
                $notice_ids = preg_split('/\s*,\s*/', trim($board['bo_notice']));
                if (in_array($write['wr_id'], $notice_ids)) {
                    $read_point = 0;
                }
            }
            // 글읽기 포인트가 설정되어 있다면
            if ($config['cf_use_point'] && $read_point && $member['mb_point'] + $read_point < 0)
                alert('보유하신 포인트('.number_format($member['mb_point']).')가 없거나 모자라서 글읽기('.number_format($read_point).')가 불가합니다.\\n\\n포인트를 모으신 후 다시 글읽기 해 주십시오.');
            insert_point($member['mb_id'], $read_point, ((G5_IS_MOBILE && $board['bo_mobile_subject']) ? $board['bo_mobile_subject'] : $board['bo_subject']).' '.$wr_id.' 글읽기', $bo_table, $wr_id, '읽기');

1787123558_fNjLX3RqDb.webp

답변에 대한 댓글 1개

2026-08-24 (월) 09:41:07
답변 감사합니다. 알려주신 방법으로 수정하니 공지에서 포인트가 빠지지 않네요. 감사합니다.
현재 그누보드5의 bbs/board.php 글읽기 포인트 처리에는 공지 여부를 제외하는 기본 분기가 없습니다. 또 bo_notice는 현재 쉼표로 구분된 wr_id 목록이므로, 오래된 팁처럼 줄바꿈 기준으로 처리하면 공지 판별이 되지 않을 수 있습니다.
 
bbs/board.php에서 ‘글읽기 포인트가 설정되어 있다면’ 부분의 잔액 검사와 insert_point() 호출을 다음처럼 공지 여부 조건 안에 함께 넣어야 합니다.
 
```php
$notice_ids = array_filter(
    array_map('intval', explode(',', (string) $board['bo_notice']))
);
$is_notice = in_array((int) $wr_id, $notice_ids, true);
 
if (!$is_notice) {
    if (
        $config['cf_use_point']
        && $board['bo_read_point']
        && $member['mb_point'] + $board['bo_read_point'] < 0
    ) {
        alert(
            '보유하신 포인트('.number_format($member['mb_point']).')가 없거나 모자라서 '.
            '글읽기('.number_format($board['bo_read_point']).')가 불가합니다.'
        );
    }
 
    insert_point(
        $member['mb_id'],
        $board['bo_read_point'],
        ((G5_IS_MOBILE && $board['bo_mobile_subject'])
            ? $board['bo_mobile_subject']
            : $board['bo_subject']).' '.$wr_id.' 글읽기',
        $bo_table,
        $wr_id,
        '읽기'
    );
}
```
 
중요한 점은 새 코드를 별도로 추가하는 것이 아니라 기존 잔액 검사와 기존 insert_point() 블록을 이 코드로 교체하는 것입니다. 기존 insert_point()가 아래에 남아 있으면 계속 차감됩니다.
 
테스트할 때는 실제로 ‘공지’ 체크된 새 글을 글쓴이가 아닌 일반 회원 계정으로 열고, 관리자 포인트 내역에서 ‘읽기’ 기록이 생성되지 않는지 확인하세요. 같은 글은 세션과 포인트 관계키 때문에 반복 테스트 결과가 헷갈릴 수 있습니다.
 
board.php는 코어 파일이므로 업데이트 때 덮어써질 수 있습니다. 수정 내역을 패치로 보관하고 업그레이드 후 재적용 여부를 확인하는 것이 좋습니다.

답변에 대한 댓글 1개

2026-08-24 (월) 09:42:07
답변 감사합니다. 위에 미니님a님 방식으로 처리 배보니 잘 되어서 저장해 두었다가 다음에 수정해 보겠습니다. 감사합니다.

올려주신 후기(코드를 붙여도 여전히 차감됨)를 보면, 코드 내용보다 적용 방식이나 테스트 방법 쪽 문제일 가능성이 높습니다. 아래 순서로 확인해 보세요.

1. 기존 차감 블록을 교체했는지 확인
새 코드를 추가만 하고 원래 있던 차감 코드(alert 체크 + insert_point 호출)가 그대로 남아 있으면, 새 코드와 무관하게 원래 코드가 계속 포인트를 차감합니다. bbs/board.php에서 insert_point 로 검색해 글읽기 관련 호출이 실제로 몇 군데 실행되는지 확인하시고, 기존 블록은 반드시 주석 처리한 뒤 새 블록으로 대체해야 합니다. 버전에 따라 라인 번호가 달라서 128라인이 아닐 수 있습니다.

2. 테스트 방법 확인
그누보드 글읽기 포인트는 같은 글에 대해 1회만 차감되고(중복 차감 방지), 본인이 쓴 글은 차감하지 않는 것이 기본 동작입니다. 그래서 이미 읽었던 글이나 관리자(글쓴이) 계정으로 테스트하면 결과 판단이 헷갈립니다. 새로 등록한 공지글을 글쓴이가 아닌 일반 회원 계정으로 열어보고, 관리자 페이지의 포인트 내역에서 글읽기 기록이 생기는지로 확인하는 것이 정확합니다.

3. 공지 등록 상태 확인
적용하신 코드가 참조하는 값은 해당 게시판 설정의 bo_notice(공지 wr_id 목록)입니다. 글쓰기에서 공지 체크가 실제로 되어 있는지, 테스트 중인 글이 그 게시판의 공지가 맞는지 확인해 보세요. 공지 해제 후 재등록하면 wr_id 목록이 갱신됩니다.

참고로 board.php는 코어 파일이라 나중에 그누보드를 업데이트하면 수정 내용이 덮어써질 수 있습니다. 수정한 파일과 위치를 따로 기록해 두시길 권장드립니다.

답변에 대한 댓글 1개

2026-08-24 (월) 09:42:31
답변 감사합니다. 위에 소스 알려주셔서 잘 처리하였습니다.

답변에 대한 댓글 1개

2026-08-24 (월) 09:37:26
답변 감사합니다. 공지사항 포인트는 따로 설정하는게 없더라구요.

답변에 대한 댓글 1개

2026-08-19 (수) 15:31:27
답변 감사합니다.

bbs/board.php
에 다른 것 수정없이 그대로 붙여 봤지만 포인트는 여전히 빠집니다.

// 공지사항 여부 확인
$is_notice = false;
$arr_notice = explode(',', trim($board['bo_notice']));
if (in_array($wr_id, $arr_notice)) {
$is_notice = true;
}

// 공지사항이 아닐 때만 포인트 차감
if (!$is_notice) {
if ($config['cf_use_point'] && $board['bo_read_point'] && $member['mb_point'] + $board['bo_read_point'] < 0) {
alert('보유하신 포인트('.number_format($member['mb_point']).')가 없거나 모자라서 글읽기('.number_format($board['bo_read_point']).')가 불가합니다.\\n\\n포인트를 모으신 후 다시 글읽기 해 주십시오.');
}

insert_point(
$member['mb_id'],
$board['bo_read_point'],
((G5_IS_MOBILE && $board['bo_mobile_subject']) ? $board['bo_mobile_subject'] : $board['bo_subject']).' '.$wr_id.' 글읽기',
$bo_table,
$wr_id,
'읽기'
);
}

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