게시판과 최신글을 다수 게시판의 글들을 한개씩 섞어가면서 출력하는 방법.
조건 :
1. 여러개의 게시판에서 최신글 내림차순(desc) 순으로 순서를 정한다.
2. 순서가 정해지면 그 다음 글부터는 날짜에 상관없이 최초 정해진 순서대로 글 한개씩 계속 로테이션 한다.
ex)
갤러리게시판 최신글 오늘,
유머게시판 최신글 어제,
자유게시판 최신글 그저께.
위 같은 상황일 경우,
1. 갤러리, 2.유머, 3.자유, 4.갤러리, 5.유머, 6.자유, 7.갤러리 ..... 순으로 출력
해야할 것.
1. 게시판을 새로 생성 후 새로운 이름의 스킨으로 지정. bo_table 명은 total_board로 한다는 가정.
2. 관리자 -> 게시판 관리에서 bo_1 여분필드에 갤러리, 유머, 자유 등등 원하는 게시판의 bo_table 을 적는다.
ex) gallery,humor,free...
3. bbs/list.php 187 line (그누5.4기준) 수정
// 페이지의 공지개수가 목록수 보다 작을 때만 실행 if($page_rows > 0) { //통합게시판 추가 if($bo_table=="total_board"){ $sql_board_set = " select * from {$g5['board_table']} where bo_table = '{$bo_table}' "; $res_board_set = sql_query($sql_board_set); while($row = sql_fetch_array($res_board_set)){ $board_set_row = $row; } $exp = explode(',',$board['bo_1']); //통합게시판 순서정하기 $total_count = 0; for($i=0;$i<count($exp);$i++){ $boards_sql[$i] = "select * from g5_write_{$exp[$i]} where wr_is_comment = 0 order by wr_num, wr_reply"; $b_latest[$i] = sql_fetch_array(sql_query($boards_sql[$i])); //테이블 이름 추가 $dates[$i]['bo_table'] = $exp[$i]; $dates[$i]['latest_datetime'] = $b_latest[$i]['wr_datetime']; //total count set $board_count[$i] = "select * from {$g5['board_table']} where bo_table = '{$exp[$i]}'"; $board_count_row = sql_fetch_array(sql_query($board_count[$i])); $total_count += $board_count_row['bo_count_write']; $total_page = ceil($total_count / $page_rows); // 전체 페이지 계산 } //내림차순 정렬 for($i=count($dates)-1;$i>0;$i--){ for($j=0;$j<$i;$j++){ if($dates[$j]['latest_datetime'] < $dates[$j+1]['latest_datetime']){ //desc $temp = $dates[$j+1]; $dates[$j+1] = $dates[$j]; $dates[$j] = $temp; } } } //print_r2($dates); //통합게시판 순서대로 최신글순으로 로테이션 $i=0; $k=0; foreach($dates as $key => $value){ $q[$key] = "select * from g5_write_{$value['bo_table']} where wr_is_comment = 0 order by wr_num, wr_reply"; $q_result[$key] = sql_query($q[$key]); //list 게시판별 데이터 분리 while($row2 = sql_fetch_array($q_result[$key])){ if($list_arr[$value['bo_table']]){ array_push($list_arr[$value['bo_table']], $row2); }else{ $list_arr[$value['bo_table']][0]=$row2; } } } // list 게시판별 순서대로 한개씩 세팅 $z=0; //게시판 갯수 체크 $a=0; //배열 번호 $rotation_list=[]; $rotation_list_count=count($rotation_list); while($rotation_list_count<$total_count){ $b_count=$a%count($dates); $board_name = $dates[$b_count]['bo_table']; //echo $board_name; //exit(); if($list_arr[$board_name][$z]){ $list_arr[$board_name][$z]['bo_table'] = $board_name; //게시판명 세팅 array_push($rotation_list, $list_arr[$board_name][$z]); } if($a%count($dates)==count($dates)-1){ $z++; } $a++; $rotation_list_count=count($rotation_list); } //list 세팅 //배열 페이징 $i=0; $k=0; foreach($rotation_list as $key => $value){ $board['bo_table'] = $value['bo_table'];//링크를 위해 각 테이블에 맞게 다시 세팅 $list[$i] = get_list($value, $board, $board_skin_url, G5_IS_MOBILE ? $board['bo_mobile_subject_len'] : $board['bo_subject_len']); if (strstr($sfl, 'subject')) { $list[$i]['subject'] = search_font($stx, $list[$i]['subject']); } $list[$i]['is_notice'] = false; $list_num = $total_count - ($page - 1) * $list_page_rows - $notice_count; $list[$i]['num'] = $list_num - $k; $i++; $k++; } $list = array_slice($list, $list_page_rows*($page-1), $list_page_rows); $i=0; $k=0; while($i<count($list)){ $list_num = $total_count - ($page - 1) * $list_page_rows - $notice_count; $list[$i]['num'] = $list_num - $k; $i++; $k++; } }else{ $result = sql_query($sql); $k = 0; while ($row = sql_fetch_array($result)) { // 검색일 경우 wr_id만 얻었으므로 다시 한행을 얻는다 if ($is_search_bbs) $row = sql_fetch(" select * from {$write_table} where wr_id = '{$row['wr_parent']}' "); $list[$i] = get_list($row, $board, $board_skin_url, G5_IS_MOBILE ? $board['bo_mobile_subject_len'] : $board['bo_subject_len']); if (strstr($sfl, 'subject')) { $list[$i]['subject'] = search_font($stx, $list[$i]['subject']); } $list[$i]['is_notice'] = false; $list_num = $total_count - ($page - 1) * $list_page_rows - $notice_count; $list[$i]['num'] = $list_num - $k; $i++; $k++; } } }
반응형
'PHP' 카테고리의 다른 글
[PHP] mail 함수 사용 시 한글 깨짐 문제 (1) | 2020.12.02 |
---|---|
그누보드5 최신글 커스텀 (게시판 여러개) (0) | 2020.01.27 |
그누보드5 반응형 기본 세팅 (0) | 2019.11.28 |
PHP 에서 엑셀 추출시 01 형태의 숫자를 그대로 출력하는 방법 (0) | 2019.07.09 |
php7.1 에서 Imagick 설치 (0) | 2019.04.05 |