tip

그누보드 게시판 게시물 연도별로 보기

반응형

 

 

갤러리나 게시판 게시글이 많아지면 카테고라이징이 필요한 경우가 생긴다. 그누보드에서 게시판에 카테고리를 생성하여, 글 등록시에 카테고리를 선택할수도 있지만 날짜에 따라 자동으로 카테고라이징 하여 볼 수 있게 추가 카테고리를 추가하는 작업을 하였다.

 

 

 

예시화면

 

기본적으로 현재 연도에 해당하는 게시물만 보여지며,  게시판 우측 상단에서 연도를 선택한 뒤 '이동하기'를 클릭하면 해당 년도에 속하는 게시물만 볼 수 있도록 하는 기능이다.

카테고리 예시

 

 

카테고리 예시

 

 

 

 

 

코드 수정 방법

 

나의 경우에는 날짜를 게시물 등록 날짜가 아닌 사진을 찍은 날짜로 선택해서 등록할 수 있도록 하여서 날짜부분이 여분필드인 wr_1로 되어있는데, 게시물 등록날짜로 구분하고 싶은 경우에는 wr_1wr_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.'&amp;page=&amp;sfl=wr_1&amp;stx1='.$stx1.'&amp;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'];
    }

 

반응형