여분필드를 활용해서 특정 게시물만 최신글로 추출하기 - 최신글스킨강좌, 그누보드5강좌

본문 바로가기
전체검색

최신글스킨강좌

그누보드, 영카트 초보 제작자분들을 위한 다양한 스킨 제작 활용 팁을 공유합니다.

여분필드를 활용해서 특정 게시물만 최신글로 추출하기

관리자 17-08-16 10:48

게시판에 글을 등록할 때 별도로 체크한 게시물만 최신글로 출력하는 방법입니다.

 


수정파일1 : lib/latest.lib.php

 

기존에 있던 최신글 함수를 복사해서 함수명을 다른 이름으로 변경해서 같은 파일 하단에 새로 추가.
아래 예제에서는 함수명을 function latest_main 으로 변경했습니다. 

그누보드 버전마다 함수 내용에 일부 차이가 있을 수 있으니 아래 코드를 그대로 복사해서 사용하기보다는 현재 사용하고 계시는 그누보드 버전의 최신글 함수를 복사해서 빨간색으로 표기된 수정된 부분만 변경하고 사용하시는 게 좋습니다.


 

// 특정 게시물 최신글 추출
// $cache_time 캐시 갱신시간
function latest_main($skin_dir='', $bo_table, $rows=10, $subject_len=40, $cache_time=1, $options='')
{
    global $g5;

    if (!$skin_dir) $skin_dir = 'basic';

    if(preg_match('#^theme/(.+)$#', $skin_dir, $match)) {
        if (G5_IS_MOBILE) {
            $latest_skin_path = G5_THEME_MOBILE_PATH.'/'.G5_SKIN_DIR.'/latest/'.$match[1];
            if(!is_dir($latest_skin_path))
                $latest_skin_path = G5_THEME_PATH.'/'.G5_SKIN_DIR.'/latest/'.$match[1];
            $latest_skin_url = str_replace(G5_PATH, G5_URL, $latest_skin_path);
        } else {
            $latest_skin_path = G5_THEME_PATH.'/'.G5_SKIN_DIR.'/latest/'.$match[1];
            $latest_skin_url = str_replace(G5_PATH, G5_URL, $latest_skin_path);
        }
        $skin_dir = $match[1];
    } else {
        if(G5_IS_MOBILE) {
            $latest_skin_path = G5_MOBILE_PATH.'/'.G5_SKIN_DIR.'/latest/'.$skin_dir;
            $latest_skin_url  = G5_MOBILE_URL.'/'.G5_SKIN_DIR.'/latest/'.$skin_dir;
        } else {
            $latest_skin_path = G5_SKIN_PATH.'/latest/'.$skin_dir;
            $latest_skin_url  = G5_SKIN_URL.'/latest/'.$skin_dir;
        }
    }

    $cache_fwrite = false;
    if(G5_USE_CACHE) {
        $cache_file = G5_DATA_PATH."/cache/latest-{$bo_table}-{$skin_dir}-{$rows}-{$subject_len}.php";

        if(!file_exists($cache_file)) {
            $cache_fwrite = true;
        } else {
            if($cache_time > 0) {
                $filetime = filemtime($cache_file);
                if($filetime && $filetime < (G5_SERVER_TIME - 3600 * $cache_time)) {
                    @unlink($cache_file);
                    $cache_fwrite = true;
                }
            }

            if(!$cache_fwrite)
                include($cache_file);
        }
    }

    if(!G5_USE_CACHE || $cache_fwrite) {
        $list = array();

        $sql = " select * from {$g5['board_table']} where bo_table = '{$bo_table}' ";
        $board = sql_fetch($sql);
        $bo_subject = get_text($board['bo_subject']);

        $tmp_write_table = $g5['write_prefix'] . $bo_table; // 게시판 테이블 전체이름
        $sql = " select * from {$tmp_write_table} where wr_is_comment = 0 and wr_1 = '1' order by wr_num limit 0, {$rows} ";
        $result = sql_query($sql);
        for ($i=0; $row = sql_fetch_array($result); $i++) {
            $list[$i] = get_list($row, $board, $latest_skin_url, $subject_len);
        }

        if($cache_fwrite) {
            $handle = fopen($cache_file, 'w');
            $cache_content = "<?php\nif (!defined('_GNUBOARD_')) exit;\n\$bo_subject='".sql_escape_string($bo_subject)."';\n\$list=".var_export($list, true)."?>";
            fwrite($handle, $cache_content);
            fclose($handle);
        }
    }

    ob_start();
    include $latest_skin_path.'/latest.skin.php';
    $content = ob_get_contents();
    ob_end_clean();

    return $content;
}
 

 

위 내용에서 자세히 보시면 쿼리 부분에 빨간색 부분이 추가되었습니다.

and wr_1 = '1'

wr_1 여분 필드에있는 값을 체크하는 조건을 추가한 거죠.

 

 

수정파일2 : 게시판스킨 write.skin.php

 

여분필드 1번을 활용해서 체크박스를 추가합니다. 체크한 게시물만 최신글로 출력되는 겁니다.

보통 이런 기능은 관리자가 사용할 것 같아서 체크박스 부분은 관리자만 보이게 해놨습니다.
 

<?php if ($is_admin) { ?>
<tr>
    <th scope="row">메인출력</th>
    <td><input type="checkbox" name="wr_1" value="1" <?php echo ($write['wr_1'] == "1") ? "checked" : "";?>> 메인출력 </td>
</tr>
<?php } ?>
 

 

 

수정파일 3 : 최신글이 출력되는 파일 (index.php)

 

최신글을 출력할 때 기본적으로 이렇게 출력하는데

 

echo latest("basic", notice, 5, 25);

 

latest 출력 함수를 새로 추가한 함수명으로 교체합니다.

 

echo latest_main("basic", notice, 5, 25);

 

최신글 스킨 자체에서는 수정할 부분이 없습니다. 아무 스킨이나 사용해도 됩니다.

로그인 후 댓글 작성 가능합니다.

로그인

로그인 후 글 작성 가능합니다.
그누스킨닷컴

그누스터디는 그누보드, 영카트를 이용하시는 초보 사용자를 위한 정보를 공유합니다.

E-MAIL : gnustudy@naver.com / 카카오톡 : gnustudy / 텔레그램 : gnustudy
제작 문의를 제외한 일반 문의는 QA 게시판을 이용해주세요.

Copyright gnustudy.com All rights reserved.