반응형
갤러리나 게시판 게시글이 많아지면 카테고라이징이 필요한 경우가 생긴다. 그누보드에서 게시판에 카테고리를 생성하여, 글 등록시에 카테고리를 선택할수도 있지만 날짜에 따라 자동으로 카테고라이징 하여 볼 수 있게 추가 카테고리를 추가하는 작업을 하였다.
예시화면
기본적으로 현재 연도에 해당하는 게시물만 보여지며, 게시판 우측 상단에서 연도를 선택한 뒤 '이동하기'를 클릭하면 해당 년도에 속하는 게시물만 볼 수 있도록 하는 기능이다.
코드 수정 방법
나의 경우에는 날짜를 게시물 등록 날짜가 아닌 사진을 찍은 날짜로 선택해서 등록할 수 있도록 하여서 날짜부분이 여분필드인 wr_1로 되어있는데, 게시물 등록날짜로 구분하고 싶은 경우에는 wr_1을 wr_datetime으로 변경해서 사용하면 된다.
1) /bbs/category_year.php 파일 업로드
<?php
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
$year = $_REQUEST['year'];
?>
<!-- } 연도별보기 -->
<div id="bo_cate" class="cate_year">
<label for="year">연도별 바로가기</label>
<select name="" id="year" class="select1">
<?php
$thisyear = (new DateTime)->format("Y");
for($i=$thisyear; $i>=2017; $i--) {?>
<?php if($i == $thisyear) {?>
<option value="/bbs/board.php?bo_table=<?php echo $bo_table ?>&sca=&sop=and&sfl=wr_1&stx1=<?php echo $i;?>&stx2=" <?php if($_REQUEST['stx1'] =='' || $_REQUEST['stx1'] == $i || !$_REQUEST['stx1']){?>selected<?php }?>><?php echo $i;?>년</option>
<?php } else {?>
<option value="/bbs/board.php?bo_table=<?php echo $bo_table ?>&sca=&sop=and&sfl=wr_1&stx1=<?php echo $i;?>&stx2=" <?php if($_REQUEST['stx1'] == $i){?>selected<?php }?>><?php echo $i;?>년</option>
<?php }?>
<?php } ?>
</select>
<button>이동하기</button>
</div>
<script type="text/javascript">
$(".cate_year button").on("click",function(){
var link = $(".cate_year .select1 option:selected").val();
window.open(link, '_self');
})
</script>
<!-- } 연도별보기 -->
2) 게시판 스킨 list.skin.php파일 수정 (category_year.php 파일 인클루드)
<div class="bo_fx">
<div id="bo_list_total">총 <?php echo number_format($total_count) ?></b></font>건
/ <?php echo $page ?> 페이지</span>
</div>
<?php include_once(G5_BBS_PATH.'/category_year.php');?> <!--추가-->
</div>
2-1) for문 아래 추가
<?php
for ($i=0; $i<count($list); $i++) {
//연도별 보기 추가
if($_REQUEST['stx1']){
$year = $_REQUEST['stx1'];
} else {
$year = date("Y");
}
$thisyear = date("Y");
$wr_year = substr($list[$i]['wr_1'], 0, 4);
if($wr_year == $year) {
//연도별 보기 추가 끝
2-2) for문 } 추가
<?php }} ?> <!-- } 추가 -->
<?php if (count($list) == 0) { echo "<li class=\"empty_list\">게시물이 없습니다.</li>"; } ?>
</ul>
2-3) 하단 페이지네이션 코드 수정
<?php echo $write_pages; ?> 한줄 삭제하고 아래 내용으로 전체 교체한다.
<!-- 페이지 -->
<?php //echo $write_pages; ?>
<?php
if($_REQUEST['stx1']) {
$stx1 = $_REQUEST['stx1'];
} else {
$qstr = "&sca=&sop=and";
$stx1 = (new DateTime)->format("Y");
}
echo get_paging(G5_IS_MOBILE ? $config['cf_mobile_pages'] : $config['cf_write_pages'], $page, $total_page, './board.php?bo_table='.$bo_table.$qstr.'&page=&sfl=wr_1&stx1='.$stx1.'&stx2=');
?>
3) bbs/list.php 파일 수정
// 분류 선택 또는 검색어가 있다면
if(!$stx1 && $bo_table == "m6_1") { //게시판이름 변경
$year = (new DateTime)->format("Y");
$stx = $year." ".trim($stx2);
$sfl = "wr_1";
$sql_search = get_sql_search($sca, $sfl, $stx, $sop);
// 가장 작은 번호를 얻어서 변수에 저장 (하단의 페이징에서 사용)
$sql = " select MIN(wr_num) as min_wr_num from {$write_table} ";
$row = sql_fetch($sql);
$min_spt = (int)$row['min_wr_num'];
if (!$spt) $spt = $min_spt;
$sql_search .= " and (wr_num between {$spt} and ({$spt} + {$config['cf_search_part']})) ";
// 원글만 얻는다. (코멘트의 내용도 검색하기 위함)
// 라엘님 제안 코드로 대체 http://sir.kr/g5_bug/2922
$sql = " SELECT COUNT(DISTINCT `wr_parent`) AS `cnt` FROM {$write_table} WHERE {$sql_search} ";
$row = sql_fetch($sql);
$total_count = $row['cnt'];
} else if (($sca || $stx1 || $stx2)) {
$stx = trim($stx1)." ".trim($stx2);
$sql_search = get_sql_search($sca, $sfl, $stx, $sop);
// 가장 작은 번호를 얻어서 변수에 저장 (하단의 페이징에서 사용)
$sql = " select MIN(wr_num) as min_wr_num from {$write_table} ";
$row = sql_fetch($sql);
$min_spt = (int)$row['min_wr_num'];
if (!$spt) $spt = $min_spt;
$sql_search .= " and (wr_num between {$spt} and ({$spt} + {$config['cf_search_part']})) ";
// 원글만 얻는다. (코멘트의 내용도 검색하기 위함)
// 라엘님 제안 코드로 대체 http://sir.kr/g5_bug/2922
$sql = " SELECT COUNT(DISTINCT `wr_parent`) AS `cnt` FROM {$write_table} WHERE {$sql_search} ";
$row = sql_fetch($sql);
$total_count = $row['cnt'];
/*
$sql = " select distinct wr_parent from {$write_table} where {$sql_search} ";
$result = sql_query($sql);
$total_count = sql_num_rows($result);
*/
} else {
$sql_search = "";
$total_count = $board['bo_count_write'];
}
반응형
'tip' 카테고리의 다른 글
VS code / Visual Studio Code 불필요한 태그 삭제하기 (2) | 2024.07.22 |
---|---|
[그누보드/영카트] 글쓰기시 이모지 사용하기 (4) | 2024.03.27 |
구글 사이트 등록하기 / 구글 서치콘솔 사용 방법 SEO (11) | 2023.10.20 |
다음 사이트 등록 방법 / 검색엔진 SEO (5) | 2023.10.20 |
.htaccess 파일 이용하여 짧은 주소 만들기 / 리다이렉션 (2) | 2023.09.27 |
[그누보드] 게시판 뷰페이지 이미지 클릭시 새창 뜨지 않게 하기 (view.skin.php) (2) | 2023.09.26 |
[영카트] 네이버페이 연동오류 (쿼리스트링 EC_MALL_PID 전송) (2) | 2023.08.24 |
일러스트레이터 PDF 내보내기 이미지 고화질로 저장하기 (168) | 2023.08.24 |