특정글의 페이지 get값이 없을때 글번호만으로 페이지 위치 찾아주기 > 그누보드5 팁자료실

그누보드5 팁자료실

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

특정글의 페이지 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 에 아래와 같은 함수를 작성해 주세요



// 해당 글번호의 페이지위치
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;
}

 

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

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

 

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

 

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



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

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

 

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

 

common.php 에서 342번째줄



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

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

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

 

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

 

읽어주셔서 감사합니다

 

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

 

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

추천
16

댓글 22개

/lib/common.lib.php에 들어갈 내용을 /extend에 따로 파일 만들어서 넣어줘도 되네요.

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

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

잘 됩니다!
오류수정 안내
게시글 검색시 검색처리가 안되어있어서 검색결과 관련해서 페이지를 찾을 수 있도록 페이지처리 함수를 수정하였습니다
페이지위치찾는 함수를 다시 한번 봐주세요!
전체 2,427 |RSS
그누보드5 팁자료실 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT