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

매출이 오르면 내리는 수수료! 지금 수수료센터에서 전자결제(PG)수수료 비교견적 신청해 보세요!

그누보드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,453 |RSS
그누보드5 팁자료실 내용 검색

회원로그인

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