게시판 상세보기에서 공지사항과 일반글 분리해서 이전글 다음글 출력하기 > 그누보드5 팁자료실

그누보드5 팁자료실

게시판 상세보기에서 공지사항과 일반글 분리해서 이전글 다음글 출력하기 정보

게시판 상세보기에서 공지사항과 일반글 분리해서 이전글 다음글 출력하기

첨부파일

divide_notice.php (9.2K) 11회 다운로드 2019-10-31 11:28:45

본문

 

 

게시판 테이블은 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개

전체 2,431 |RSS
그누보드5 팁자료실 내용 검색

회원로그인

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