2026, 새로운 도약을 시작합니다.

특정글의 페이지 get값이 없을때 글번호만으로 페이지 위치 찾아주기

원문 : https://ye-ah.net/coding/65?sca=%EA%B7%B8%EB%88%84%EB%B3%B4%EB%93%9C

게시글 상세보기했을때 아래에 게시글 리스트 보이기를 쓰시는분이 많을거라 생각됩니다

리스트에서 페이지를 넘어갈때 주소에는 page get값을 들고가 현재 사용자가 보고있는 page위치를 잡아줍니다

3731597438_1604547046.6392.png

(주소창에 page get값이 나타남)

3731597438_1604547062.6499.png

이렇게 page get값을 들고감으로써 현재 사용자가 위치하고있는(보고있는) 페이지위치를 알아내고 표시해줄 수 있죠

하지만 저 page 값이 없다면 어떻게 될까요?

홈페이지 내 검색이나 검색사이트를 통해 접속 또는 특정한 상황에서 게시물을 들어올때 모두 page get값을 들고 올 수는 없습니다(페이징 되는 버튼을 눌러야 현재 사용자의 page get값을 알아낼 수 있기때문입니다)

그렇기에 값이없다면 무조건 해당 글의 위치가 어디가 됐든 무조건 1페이지를 보여주게 되어있습니다

(page값이 없다면 page=1로 지정해두었기 때문)

이럴 경우를 방지 하기 위해서 아래와 같은 함수를 사용하면 그누보드에서 글번호만으로도 현재 페이지 위치를 잡아 자동으로 page값을 줄 수 있습니다.

lib/common.lib.php 에 아래와 같은 함수를 작성해 주세요

[code]

// 해당 글번호의 페이지위치
function get_board_page($wr_id, $bo_table){
  global $g5, $board, $sca, $sfl, $stx, $sop;
  if(G5_IS_MOBILE)
    $page_rows = $board['bo_mobile_page_rows'];
  else
    $page_rows = $board['bo_page_rows'];

  $sql_search = "";
  if ($sca || $stx || $stx === '0') {     //검색이면
    $sql_search = get_sql_search($sca, $sfl, $stx, $sop);
    if($sql_search) $sql_search = " AND ".$sql_search;
  }

  $write_table = $g5['write_prefix'].$bo_table;
  $sql = " SELECT COUNT(wr_id) as page_cnt FROM $write_table WHERE wr_id >= '{$wr_id}' AND wr_is_comment = 0 {$sql_search} order by wr_comment, wr_id;";
  //$sql = " SELECT COUNT(DISTINCT wr_parent) as page FROM $write_table WHERE wr_id >= '{$wr_id}' order by wr_comment, wr_id;";

  $row = sql_fetch($sql);

  $page = ceil((int)$row['page_cnt'] / $page_rows);
  return $page;
}

[/code]

보시면 안의 쿼리문이 두개인데 .... DISTINCT를 원래 썻다가 저게 속도 이슈가 있다고 말만들어서... 위와같이 바꿨는데요 

음 저는 테스트 DB가 많지않아서 속도 채감은 별로 안됩니다만 둘중에 빠른걸로 쓰시면 되겠습니다

이렇게 함수를 만들어 주시고

bbs/board.php 에서 23번째줄 if문 안에 넣어주세요(글읽기 부분)

[code]

//페이지 위치가 없을때 현재 게시글 페이지 위치
if(!$page && $page != 1) $page = get_board_page($write['wr_id'], $bo_table);

[/code]

이렇게만 해주시면 page값이 없어도 해당 글번호가 위치해있는 페이지번호를 찾아서 아래 리스트를 불러옵니다.

이제 페이지값이 없어도 알아서 찾기때문에 url뒤에 page값 붙는것도 없애고싶다 하시는분들은

common.php 에서 342번째줄

[code]

if (isset($_REQUEST['page'])) { // 리스트 페이지
  $page = (int)$_REQUEST['page'];
  //    if ($page)
  //        $qstr .= '&page=' . urlencode($page);
} else {
  $page = '';
}

[/code]

if($page)부분을 주석처리해주세요

저부분을 주석하면 url에 page붙는게 없어집니다(없어져도 상관없는게 우리는 이미 함수로 해당글의 위치를 찾도록해놓았기 때문이죠)

그대로 두셔도 되구요 이건 취향이니 쓰시는분 마음에따라..

읽어주셔서 감사합니다

테스트글 https://ye-ah.net/fun/2383

게시글 검색시 페이지 위치를 정상적으로 찾지 못하는 버그가있어서 페이지 위치 찾는 함수(get_board_page)를 변경하였습니다. 기존에 보신분들은 한번더 확인해주세요

|

댓글 22개

완전 멋진 팁입니다!
/lib/common.lib.php에 들어갈 내용을 /extend에 따로 파일 만들어서 넣어줘도 되네요.

원본 수정을 많이 하면 까먹어서 ㅎㅎ

/bbs/board.php만 신경써주면 되겠네요.

잘 됩니다!
그것도 괜찮네요 ㅎㅎㅎ 잘된다니 뿌듯합니다
이야...이거 필요했는데 마침 올려주시다니 따봉 입니다!
멋집니다. ^^
감사합니다 :) ㅎㅎ
오류수정 안내
게시글 검색시 검색처리가 안되어있어서 검색결과 관련해서 페이지를 찾을 수 있도록 페이지처리 함수를 수정하였습니다
페이지위치찾는 함수를 다시 한번 봐주세요!
오 이거 좋네요 추천쾅!!
오우 감사합니다
스크랩해놔야겠습니다
감사합니다 ㅎㅎ

댓글 작성

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

로그인하기

그누보드5 팁자료실

번호 제목 글쓴이 날짜 조회
공지 3년 전 조회 4,598
2741 3일 전 조회 110
2740 4일 전 조회 102
2739 1주 전 조회 208
2738 1주 전 조회 217
2737 1주 전 조회 181
2736 1주 전 조회 278
2735 3주 전 조회 281
2734 3주 전 조회 263
2733 1개월 전 조회 265
2732 1개월 전 조회 301
2731 1개월 전 조회 266
2730 1개월 전 조회 224
2729 1개월 전 조회 353
2728 1개월 전 조회 245
2727 1개월 전 조회 422
2726 1개월 전 조회 256
2725 1개월 전 조회 330
2724 1개월 전 조회 358
2723 1개월 전 조회 267
2722 1개월 전 조회 299
2721 1개월 전 조회 211
2720 2개월 전 조회 304
2719 2개월 전 조회 307
2718 2개월 전 조회 201
2717 2개월 전 조회 336
2716 2개월 전 조회 202
2715 2개월 전 조회 311
2714 2개월 전 조회 273
2713 2개월 전 조회 376
2712 2개월 전 조회 289
🐛 버그신고