여분필드를 활용해서 특정 게시물만 최신글로 추출하기
게시판에 글을 등록할 때 별도로 체크한 게시물만 최신글로 출력하는 방법입니다.
수정파일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);
최신글 스킨 자체에서는 수정할 부분이 없습니다. 아무 스킨이나 사용해도 됩니다.