최신 글 질문 드립니다.
본문
그룹을 이용하여 각 게시판에서 최신글을 하나씩 가져오도록 만들었습니다.(이미지 갤러리 형태)
질문. 혹시 게시판에서 가져오는 글을 최신글이 아니라 몇번째 글 인지 게시판마다 글의 순서를 각각 지정할 수 있을까요?
아래 내용은 사용한 소스 코드 입니다.
제작의뢰로 가라 할것 같은데 혹시나 해서 올려 봅니다 ㅠ.ㅠ
latest.skin 파일
<?php for ($i=0; $i<count($list); $i++) { ?>
<a href="<?php echo $list[$i]['href'] ?>" class="slide">
<?php
$thumb = get_list_thumbnail($list[$i]['bo_table'], $list[$i]['wr_id'], $thumb_width, $thumb_height);
if($thumb['src']) {
$img_content = '<img src="'.$thumb['src'].'" alt="'.$list[$i]['subject'].'" width="'.$thumb_width.'" height="'.$thumb_height.'">';
} else {
$img_content = 'NO IMAGE';
}
echo $img_content;
echo "<span>".$list[$i]['subject']."</span>";
?>
</a>
<?php } ?>
latest_group.lib 파일
<?php
if (!defined('_GNUBOARD_')) exit;
// 최신글 추출
// $cache_time 캐시 갱신시간
function latest_group_line($skin_dir="", $gr_id, $rows=10, $eachrows=1, $subject_len=40, $no_table="", $cache_time=1, $category="", $orderby="" )
{
global $g5;
//static $css = array();
if (!$skin_dir) $skin_dir = 'basic';
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-{$gr_id}-{$skin_dir}-{$rows}-{$subject_len}.php";
$cache_file = G5_DATA_PATH."/cache/latest-{$gr_id}-{$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 - 600 * $cache_time)) {
@unlink($cache_file);
$cache_fwrite = true;
}
}
if(!$cache_fwrite)
include($cache_file);
}
}
if(!G5_USE_CACHE || $cache_fwrite) {
//if (!G5_USE_CACHE || !file_exists($cache_file)) {
$list = array();
$limitrows = $eachrows;
$sqlgroup = " select bo_table, bo_subject, bo_9 from {$g5['board_table']} where gr_id = '$gr_id' $sqls ";
/**** 목록에서 제외시킬 테이블들 { ***/
if ($no_table) {
$t_flag = serialize($no_table);
if ($t_flag[0] == "a") { //Array이면
for ($ic=0; $ic<count($no_table); $ic++) {
$sqlgroup .= " and bo_table != '$no_table[$ic]' ";
}
} else if ($t_flag[0] == "s") { //String이면
$sqlgroup .= " and bo_table != '$no_table' ";
}
}
$sqlgroup .= " and bo_use_search=1 order by bo_order ";
$rsgroup = sql_query($sqlgroup);
/**** 목록에서 제외시킬 테이블들 } ***/
for ($j=0, $k=0; $rowgroup=sql_fetch_array($rsgroup); $j++) {
$bo_table = $rowgroup[bo_table];
$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 ";
// $sql .= "and wr_datetime > ( now() - interval 512 hour) ";
$sql .= (!$category) ? "" : " and ca_name = '$category' ";
$sql .= (!$orderby) ? " order by wr_id desc " : " order by wr_id desc ";
$sql .= " limit $limitrows";
// 옵션에 따라 정렬 } //
$result = sql_query($sql);
for ($i=0; $row = sql_fetch_array($result); $i++, $k++) {
if(!$orderby) $op_list[$k] = $row[wr_datetime];
else {
$op_list[$k] = is_string($row[$orderby]) ? sprintf("%-256s", $row[$orderby]) : sprintf("%016d", $row[$orderby]);
$op_list[$k] .= $row[wr_datetime];
}
$list[$k] = get_list($row, $board, $latest_skin_url, $subject_len);
$list[$k][bo_table] = $board[bo_table];
$list[$k][bo_subject] = $board[bo_subject];
$list[$k][bo_wr_subject] = cut_str($board[bo_subject] . $list[$k][wr_subject], $subject_len);
}
}
if($cache_fwrite) {
$handle = fopen($cache_file, 'w');
$cache_content = "<?php\nif (!defined('_GNUBOARD_')) exit;\n\$bo_subject='".$bo_subject."';\n\$list=".var_export($list, true)."?>";
fwrite($handle, $cache_content);
fclose($handle);
}
}
/*
// 같은 스킨은 .css 를 한번만 호출한다.
if (!in_array($skin_dir, $css) && is_file($latest_skin_path.'/style.css')) {
echo '<link rel="stylesheet" href="'.$latest_skin_url.'/style.css">';
$css[] = $skin_dir;
}
*/
if($k>0) array_multisort($op_list, SORT_DESC, $list);
if($k>$rows) array_splice($list, $rows);
ob_start();
include $latest_skin_path.'/latest.skin.php';
$content = ob_get_contents();
ob_end_clean();
return $content;
}
?>
이용해서 사용 했습니다.
!-->!-->
답변 1
제작의뢰로 가셔야 할 것 같네요..
힌트를 드리면 제일 간단한 방법으론
각 게시판에서 몇번째 글을 가져올지 배열에 넣어두고
latest_group_line 함 수 에서 해당 그룹에 해당하는 게시판을 돌면서 최신글을 select 해올때
limit 을 걸어서 해주시면 될 듯 합니다.
답변을 작성하시기 전에 로그인 해주세요.