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

게시판 리스트에서 비밀글 노출하지 않기

· 6년 전 · 5956 · 14

관리자가 게시글 작성시, 비밀글에 체크하면 일반회원에게 비밀글이 리스트에서 노출되지 않습니다.

단, 관리자에게는 보입니다.

 

일반회원 접속시

 

관리자접속시

 

bbs/list.php파일을 수정해 줍니다.

 

1.상단

비밀글을 설정하면 wr_option에 secret이 저장되더라고요. 그래서 관리자와 그 외 멤버를 구분하여 하단에 추가될 구문을 만들고, 목록생성시 목록넘버 때문에 숨겨진 목록 갯수를 구해줘서 빼줍니다.

 

if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가

$secret = 'secret';
$secretSQL = " and wr_option NOT LIKE '%$secret%'"; 
$getSecretCount = "select COUNT(*) from {$write_table} WHERE wr_option LIKE '%$secret%'";
$secretRow = sql_fetch($getSecretCount);
$secretNumber = $secretRow['COUNT(*)'];

if ($is_admin) {
    $secretSQL = ""; 
    $secretNumber = 0;
}

 

 

2.mysql구문 추가 및 카운트조절

검색시 비밀글 제외를 시키기위하여 수정해줍니다

if ($sca || $stx || $stx === '0') {     //검색이면
    $is_search_bbs = true;   
    $secretNumber = 0; 
    $sql_search = get_sql_search($sca, $sfl, $stx, $sop);

    // 가장 작은 번호를 얻어서 변수에 저장 (하단의 페이징에서 사용)
    $sql = " select MIN(wr_num) as min_wr_num from {$write_table} ";
    $row = sql_fetch($sql);
    $min_spt = (int)$row['min_wr_num'];

    if (!$spt) $spt = $min_spt;

    $sql_search .= " and (wr_num between {$spt} and ({$spt} + {$config['cf_search_part']}){$secretSQL}";

    // 원글만 얻는다. (코멘트의 내용도 검색하기 위함)
    // 라엘님 제안 코드로 대체 http://sir.kr/g5_bug/2922
    $sql = " SELECT COUNT(DISTINCT `wr_parent`) AS `cnt` FROM {$write_table} WHERE {$sql_search} ";
    $row = sql_fetch($sql);
    $total_count = $row['cnt'];
}else {
    $sql_search = "";

    $total_count = $board['bo_count_write']-$secretNumber;
}

 

if ($is_search_bbs) {
    $sql = " select distinct wr_parent from {$write_table} where {$sql_search} {$sql_order} limit {$from_record}, $page_rows ";
} else {
    $sql = " select * from {$write_table} where wr_is_comment = 0 {$secretSQL}";
    if(!empty($notice_array))
        $sql .= " and wr_id not in (".implode(', ', $notice_array).") ";
    $sql .= " {$sql_order} limit {$from_record}, $page_rows ";
}

 

관리자에게만 노출되는 기능이지만, 특정권한이상 회원에게만 노출되는 기능으로 발전 시킬 수 있을 것 같습니다. 저처럼 초보분들께 조금이나마 도움이 되면 좋겠습니다.

 

댓글 작성

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

로그인하기

댓글 14개

비밀글 숨김을 여러번 시도해보앗는데
혹시 이렇게 처리하면 혹시 게시글이 많으면 뻗어버리진 않겟죠
그러면 like구문대신 =secret 이나 에디터 쓰시면 html1,secret으로 쿼리 검색문을 변경하는건 어떨까요?
제가 짜집기수준이라서 퀴리문을 수정해서 테스트는 못햇읍니다
일단 이걸로 테스트사이트에 적용하면서 지켜보겟읍니다
정말 많은 도움이 되었습니다.
감사합니다.
감사합니다 ㅠㅠ 찾던 내용이었어요 ㅠ
감사합니다.ㅠㅠㅠ
좋은 팁 감사합니다.
덕분에 어려운 것 해결했습니다 ^^
혹시 이거 적용하면 분류 선택시 게시글이 안나오는데 어떻게 하면 좋을까요ㅠㅠ
분류기능이 안되네요
분류시 퀘리가 안돌아 가네요.. if를 써야할까요?

이거 검색이나 분류하면 안돌아가는데 방법이 있을까요..ㅠ

분류 나오는 법!!

2.mysql구문 추가 및 카운트조절

검색시 비밀글 제외를 시키기위하여 수정해줍니다

if ($sca || $stx || $stx === '0') {     //검색이면
    $is_search_bbs = true;   
   $secretNumber = 0; 
    $sql_search = get_sql_search($sca, $sfl, $stx, $sop);

    // 가장 작은 번호를 얻어서 변수에 저장 (하단의 페이징에서 사용)
    $sql = " select MIN(wr_num) as min_wr_num from {$write_table} ";
    $row = sql_fetch($sql);
    $min_spt = (int)$row['min_wr_num'];

    if (!$spt) $spt = $min_spt;

    $sql_search .= " and (wr_num between {$spt} and ({$spt} + {$config['cf_search_part']}){$secretSQL}";

    // 원글만 얻는다. (코멘트의 내용도 검색하기 위함)
    // 라엘님 제안 코드로 대체 http://sir.kr/g5_bug/2922
    $sql = " SELECT COUNT(DISTINCT `wr_parent`) AS `cnt` FROM {$write_table} WHERE {$sql_search} ";
    $row = sql_fetch($sql);
    $total_count = $row['cnt'];
}else {
    $sql_search = "";

   $total_count = $board['bo_count_write']-$secretNumber;
}


이 부분 때문에 오류가 생깁니다.
 

if ($sca || $stx || $stx === '0') {     //검색이면
    $is_search_bbs = true;   
    $secretNumber = 0; 
    $sql_search = get_sql_search($sca, $sfl, $stx, $sop);

    // 가장 작은 번호를 얻어서 변수에 저장 (하단의 페이징에서 사용)
    $sql = " select MIN(wr_num) as min_wr_num from {$write_table} ";
    $row = sql_fetch($sql);
    $min_spt = (int)$row['min_wr_num'];

    if (!$spt) $spt = $min_spt;

    $sql_search .= " and (wr_num between {$spt} and ({$spt} + {$config['cf_search_part']})){$secretSQL}";

    // 원글만 얻는다. (코멘트의 내용도 검색하기 위함)
    // 라엘님 제안 코드로 대체 http://sir.kr/g5_bug/2922
    $sql = " SELECT COUNT(DISTINCT `wr_parent`) AS `cnt` FROM {$write_table} WHERE {$sql_search} ";
    $row = sql_fetch($sql);
    $total_count = $row['cnt'];
    
    $sql = " select distinct wr_parent from {$write_table} where {$sql_search} ";
    $result = sql_query($sql);
    $total_count = sql_num_rows($result);
}else {
    $sql_search = "";

   $total_count = $board['bo_count_write']-$secretNumber;
}

 

이거 넣으세요.

 

  $sql_search .= " and (wr_num between {$spt} and ({$spt} + {$config['cf_search_part']})){$secretSQL}";

이부분에 ")" 소괄호가 빠져있었어요!!
 

비밀글 노출하지 않기
감사합니다

게시판 목록

그누보드5 팁자료실

글쓰기
🐛 버그신고