그누보드의 최신글 기능을 사용하다보면 인기순, 랜덤순등 여러가지 기능을 구현해야 할 때가 있습니다.

이번에 소개할 기능은 여러개의 게시판의 최신글을 하나의 최신글 스킨에 최신순으로 불러오는 기능을 보도록 하겠습니다.

 

사용방법은 www/lib/latest.lib.php 파일에 아래의 함수를 추가 시켜줍니다.

<?php

/* www/lib/latest.lib.php */

 

// $bo_tables 테이블들 사이 콤마(,) 단위로 구분해서 넣을 것, 콤마 사이에 공백 없이 (ex aaa,bbb,)

function latest_all($skin_dir='', $bo_tables, $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;

        }

    }

 

        $list = array();

        $sql_common = " from {$g5['board_new_table']} a  where find_in_set(a.bo_table, '{$bo_tables}')";

        $sql_common .= " and a.wr_id = a.wr_parent ";

        $sql_order = " order by a.bn_id desc ";

        $sql = " select a.* {$sql_common} {$sql_order} limit 0, {$rows}";

 

        $result = sql_query($sql);

        

        for ($i=0; $row=sql_fetch_array($result); $i++) {

 

            $sql = " select * from {$g5['board_table']} where bo_table = '{$row['bo_table']}' ";

            $board = sql_fetch($sql);

 

            $tmp_write_table = $g5['write_prefix'] . $row['bo_table'];

            $row2 = sql_fetch(" select * from {$tmp_write_table} where wr_id = '{$row['wr_id']}' ");

 

            $list[$i] = $row2;

            $list[$i] = get_list($row2, $board, $latest_skin_url, $subject_len);

            $list[$i]['bo_subject'] = $row['bo_subject'];

            $list[$i]['bo_table'] = $row['bo_table'];

        }

 

    ob_start();

    include $latest_skin_path.'/latest.skin.php';

    $content = ob_get_contents();

    ob_end_clean();

 

    return $content;

}

?>

위의 소스코드를 www/lib/latest.lib.php 파일의 제일 하단에

php 문법이 닫히는 ?> 구문전에 복사해서 넣으시면 됩니다.

 

사용방법

<?php

/* 최신글을 노출시킬 페이지 */

 

echo latest_all("스킨명", "게시판명1,게시판명2,게시판명3,게시판명4", 출력갯수, 글자수); 

?>

 

사용방법 예시

<?php

/* 최신글을 노출시킬 페이지 */

 

echo latest_all("basic", "notice,qna,news,faq", 10, 20); 

?>

 

기존에 사용하던 최신글스킨에 이미지가 있었다면

해당 최신글 스킨​/latest.skin.php 에서 함수의 인자값은 변경해준다.

<?php 

/* 해당 최신글 스킨/latest.skin.php */

 

$thumb = get_list_thumbnail($list[$i]['bo_table'], $list[$i]['wr_id'], $thumb_width, $thumb_height);

?>

추천 1 비추천 0
  • 페이스북으로 보내기
  • 트위터로 보내기
  • 구글플러스로 보내기
  • 밴드 보내기
  • 블로그 보내기
  • 폴라 보내기
  • 카카오스토리 보내기
  • 텔레그램 보내기
  • 텀블러 보내기
댓글 2
  • 루벤 ()

    해당 소스 너무 유용하게 사용하고있습니다.
    여러게시판을 하나의 최근게시물로 뽑아오면서 랜덤출력으로 가능할까요?

  • 댓글의 댓글 그누위즈 ()

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

    위와 같은 형식으로 shuffle() 함수를 사용하여 배열을 섞어버리면 됩니다.

최신글

RSS
번호 제목 글쓴이 날짜 추천 비추천
상단으로