본문 바로가기
IT/PHP

13##]PHP로 홈페이지 만들기>게시판 글 목록

by 혁이 2017. 4. 22.
반응형


포스팅을 옮기면서 본건데 게시판 글 목록을 보는 list.php가 없네요 ㄷㄷ;;;


작성해 보도록 하겠습니다.






 list.php





$no=($_GET['no'])?$_GET['no']:0;


no라는 변수에 삼항연산자를 써서 작성합니다.



삼항 연산자는 [ 조건 ? 참 : 거짓  ]


모양입니다. 즉 위의 식은 GET['no']가 있는지( GET으로 받아오는 no변수가 있는지?)


있다면 no변수에 GET으로 받아온 것을 넣고 없다면 0을 no에 넣습니다.





$page_size=10;

$page_list_size=10;


한 페이지당 나타낼 게시물 수를 page_size에 넣습니다. 저는 열 개씩 하겠습니다.


페이지 블록 수도 10개로 잡겠습니다. 페이지 블록은 게시판 아래에 1  2  3  4  5  이런식으로 나오는 구간 입니다.



$query="select id,thread,depth,name,email,title,comment,DATE_FORMAT(wdate,'%Y-%m-%d') as wdate, see,cmt_cnt,filename from $board order by thread desc limit $no,$page_size";


sql 쿼리문을 작성합니다.


게시판 글 목록에 보여줄 사항들을 select 해옵니다.wdate는 ㅇㅇㅇㅇ-ㅇㅇ-ㅇㅇ 식으로 포맷을 바꿔주고 wdate라고 명칭으로 명명해줍니다.


limit는 no번째부터 page_size만큼을 불러옵니다. 



즉 limit 1,10이면 1부터 10까지, limit 2,10이면 2부터 11까지 나옵니다.



이런식으로 말이죠


이것을 활용해서 1페이지엔 1~10번, 2페이지엔 11~20번 이렇게 구성을 할겁니다.



    $result_count=mysql_query("select count(*) from $board",$conn);


$result_row=mysql_fetch_array($result_count);

$total_row=$result_row[0];


if($total_row<=0)$total_row=0;


$total_page=floor(($total_row-1)/$page_size);

$current_page=floor($no/$page_size);


total_row는 글 게시판 DB에있는 글의 갯수를 저장합니다.


total_page는 총 페이지 갯수입니다.(출력시엔 +1을 합니다. 게시물이 25개면 total_page는 2가 맞습니다.)



<?

$start_page=(int)($current_page/$page_list_size)*$page_list_size;

$end_page=$start_page+$page_list_size-1;

if($total_page<$end_page)$end_page=$total_page;


start_page는 current_page에서 10을 나눈뒤 정수만을 취한 뒤 10을 다시 곱합니다.


예시 ) 현재 1~10에 있다면 no또한 0~90 입니다. no에 page_size인 10을 나누고 소숫점을 버린 값을 current_page가 가져갑니다. 즉 current_page=0~9입니다.


start_page는 0~9를 10으로 나눈뒤 정수만을 가집니다 즉 0~9 어느숫자든 10으로 나누고 정수를 가지면 0이 나옵니다. 0*10=0이 됩니다.


현재 페이지가 11~20이라면 start_page는 10이나오겠네요



end_page는 start_page에 +10 -1을 합니다 9를 더하는 이유는 마지막 숫자가 10 20 30 이런식으로 하기 위함입니다.




if($start_page>=$page_list_size){

$prev_list=($start_page-1)*$page_size;

echo "a href=$_SERVER[PHP_SELF]?no=$prev_list>[prev]</a>";

}


start_page가 10이 넘어간다면(현재 있는 블록이 11~20이상이라면) 이전 페이지가 있다는 것이겠지요?? 그때 [prev]버튼을 생성합니다.


for($i=$start_page;$i<=$end_page;$i++){

$page=$page_size*$i;

$page_num=$i+1;

              if($no!=$page){

echo "<a href=list.php?no=$page>";

}

echo "$page_num ";

if($no!=$page){

echo "</a>";

}

start_page부터 end_page까지 반복을 시켜 원하는 페이지로 이동할 수 있게끔 <a>태그를 씁니다


no변수와 page변수가 같다면 <a>태그를 생성하지 않습니다.

(현재의 페이지는 <a>가 발생하지 않습니다.)


}

if($total_page>$end_page){

$next_list=($end_page+1)*$page_size;

echo "<a href=list.php?no=$next_list> [next]</a>";

}

?>



prev버튼과 마찬가지로 total_page가 end_page인 10, 20, 30이 넘어간다면 next페이지 버튼을 생성합니다.





이로써 list.php를 완성했습니다. ㅎㅎ 코드가 기네요 



반응형