게시판 상세보기에서 공지사항과 일반글 분리해서 이전글 다음글 출력하기 정보
게시판 상세보기에서 공지사항과 일반글 분리해서 이전글 다음글 출력하기관련링크
첨부파일
본문
게시판 테이블은 news라는 조건으로 했습니다 코드 내에 자세한 주석 달아놓았습니다
다음은 코드입니다/*첨부파일에도 php 파일로 올려놓고 해당 작업사이트는 링크 1번에 올려놓겠습니다
<!-- 공지사항과 아닌 것의 분리를 위한 코드 -->
<?php
$notice=false;
$sql_v='SELECT `bo_notice` FROM `g5_board` WHERE `bo_table`="news"';
$result_v = sql_query($sql_v);
$row_v = sql_fetch_array($result_v);
$strTok =explode(',' ,$row_v['bo_notice']);
$cnt = count($strTok);
// <---공지사항
//공지사항이 가장 최근 것 확인
if($strTok[0]==$view['wr_id']){$prev_href_n=false;}else{$prev_href_n=true;}
//공지사항이 가장 오래된 것 확인
if($strTok[$cnt-1]==$view['wr_id']){$next_href_n=false;}else{$next_href_n=true;}
//공지인것을 확인하고 최신글의 앞뒤 id 값을 불러온다
//쿼리문 준비
$sql_l="SELECT `wr_id` FROM `g5_write_news` WHERE ";
for($i = 0 ; $i < $cnt ; $i++){
if($strTok[$i]==$view['wr_id']){
$notice=true;
$prve=$strTok[$i-1];
$next=$strTok[$i+1];
}
//공지가 가장 오래된 것일 때에 next는 공지가 아닌 것 중에 가장 최신 글 이여야 한다.
//공지인것들을 제외한 가장 최신글
////공지사항 아닌것들 추가 ////마지막일때 and 빼줌
if($i==$cnt-1){$wr_id_not='`wr_id` != '.$strTok[$i];}else{ $wr_id_not='`wr_id` != '.$strTok[$i].' and ';}
$sql_l=$sql_l.$wr_id_not;
}
$sql_l= $sql_l." ORDER BY `wr_datetime` DESC limit 1";
$result_l = sql_query($sql_l);
$row_l = sql_fetch_array($result_l);
//공지가 가장 오래된 것일 때에 next는 공지가 아닌 것 중에 가장 최신 글 이여야 한다.
if($next_href_n==false){
$next=$row_l['wr_id'];
//공지사항의 가장 늦게된 글이 첫번째가 아니면 next 버튼이 생겨야함
$next_href_n=true;
}
// <---공지사항
// <---일반글
if($notice==false){
// PREV
//$cnt 는 fasle일경우 1을 반환하므로 $cnt 값이 1일때와 같아서 절대적이 기준을 만들수가 없다
//그래서 false 일경우에 false와 true값을 만들 수 있는 cnt2를 생성 -> 일반 pref/next를 사용할 기준을 $row_v['bo_notice'] 이 녀석으로 해야함
//1.공지사항이 없으면 최신 일반글일 때에 PREV가 없어야함 //2.공지사항이 있으면 최신 일반글이더라도 PREV가 있어야함
if($prev_href){$prev_href_g=true; if($cnt==0){$prev_href_g=false;}}else{$prev_href_g=false;if($cnt){$prev_href_g=true;}}
//next같은 경우에는 최신글이라서 next가 무조건 생기는데 최신글들의 밑에 있던 것들이 공지사항으로 올라가도 자신이 가장 위에 있는 줄 알고 next를 생성한다
// 최신글이더라도 가장 밑에 출력 되는 거면 next 버튼이 안나와야함 //공지사항은 아니여야하고 date순은 가장 늦은거여야함
$sql_n="SELECT `wr_id` FROM `g5_write_news` WHERE ";
for($i = 0 ; $i < $cnt ; $i++){
if($strTok[$i]==$view['wr_id']){
$notice=true;
$prve=$strTok[$i-1];
$next=$strTok[$i+1];
}
if($i==$cnt-1){$wr_id_not='`wr_id` != '.$strTok[$i];}else{ $wr_id_not='`wr_id` != '.$strTok[$i].' and ';}
$sql_n=$sql_n.$wr_id_not;
}
$sql_n= $sql_n." ORDER BY `wr_datetime` ASC limit 1";
$result_n = sql_query($sql_n);
$row_n = sql_fetch_array($result_n);
// 해당조건에 만족하는값
echo $row_n['wr_id'];
echo $view['wr_id'];
if($next_href){$next_href_g=true; if($view['wr_id']==$row_n['wr_id']){$next_href_g=false;}}else{$next_href_g=false;}
if(!$row_v['bo_notice']){ if($prev_href){$prev_href_g=true;}else{$prev_href_g=false;}}else{ if($prev_href){$prev_href_g=true;} }
// 가장 최신글일경우 마지막 공지사항으로 넘어감
if($row_l['wr_id']==$view['wr_id']){ $prve=$strTok[$cnt-1]; }else{
//1.가장 최신의 일반글이 아닌경우
//2.글이 삭제 되어 id값이 +1을 해도 없는경우
//3. 값이 공지사항일 경우 다음글로 넘어가야함
$prve=$view['wr_id'];
$re=1;
while($re==1){
$again='1';
if($prve==9999){$re=0;}
$prve=$prve+1;
$sql_g="SELECT `wr_id` FROM `g5_write_news` WHERE `wr_id`=".$prve;
$result_g = sql_query($sql_g);
$row_g = sql_fetch_array($result_g);
if(!$row_g['wr_id']){continue;}
for($i=0;$i<$cnt;$i++){
if($strTok[$i]==$prve){$again='2';}
}
if($again=='2'){continue;}else{$again=='1';}
if($again=='1'){$re=0;}
}
}
//NEXT
//PREV와 원리같음
$next=$view['wr_id'];
$re=1;
while($re==1){
$again='1';
if($next==0){$re=0;}
$next=$next-1;
$sql_g="SELECT `wr_id` FROM `g5_write_news` WHERE `wr_id`=".$next;
$result_g = sql_query($sql_g);
$row_g = sql_fetch_array($result_g);
if(!$row_g['wr_id']){continue;}
for($i=0;$i<$cnt;$i++){
if($strTok[$i]==$next){$again='2';}
}
if($again=='2'){continue;}else{$again=='1';}
if($again=='1'){$re=0;}
}
}
// <---일반글
?>
<!-- 공지사항과 아닌 것의 분리를 위한 코드 -->
1
댓글 2개
이거 하면서 고생한 기억이 ㅋㅋㅋ