테스트 사이트 - 개발 중인 베타 버전입니다

G4용 그룹최신글(완벽) 입니다.

· 19년 전 · 14616 · 42
G4용 그룹최신글 입니다.
나름대로 노력(질문)끝에 얻게된 결과 입니다.
제가 구현하고 싶은것을다 구현한 만족스러운 그룹최신글 소스 입니다.

먼저 아래링크는 " 아트리아 님" 이 질문한 내용 입니다.
저역시 똑같이 원하던 내용의 질문 입니다.
클릭하셔서 읽어 보시기 바랍니다.

http://www.sir.co.kr/bbs/board.php?bo_table=g4_qa&wr_id=8045


이제 본론으로..
많은 분들이 원하던 소스인데.. 혼자만 알고 사용하기가 아까워서 이곳 팁게시판에 올려보고 싶은데..
PHP 는 P자도 모르는 제가 설명하기가 엄두가 나지 않아서 지금까지 미루어 왔습니다.
그래도 원하시는 분들이 많기 때문에 용기를 내서 설명 드립니다.
사실 제 홈페이지 에는 현재 적용하고 있습니다.

다음 질문/답변 내용은 제가 질문하고 "베짱이님" 께서 답변해 주신 소스 입니다.
베짱이님께 다시한번 감사 드립니다.
표현 할수있는 방법이 PHP 무지라 이렇게 설명 드립니다.
잘 보시고 좋은결과 있으시길 바랍니다.


===============질문(1)================================================================
안녕하세요?
아래링크의 답변글보고 쪽지 보냅니다.
http://www.sir.co.kr/bbs/board.php?bo_table=g4_qa&wr_id=8858

답변중에 결과갯수 중 처음 5개만 최신글로 보여준다고 하셨는데..
만약에 어떤그룹에 게시판이 6개가있고 최신글을 5개를 뽑는다면
현제 방법으로하면 다섯개의 최신글이 나오는데..
검색에서 첨 다섯번째 개시판까지 나오고 여섯번째 개시판에 가장최근에 작성한
글이 있더라도 제외 됩니다.
게시판에 상관없이 무작위로 가장 최근글만 원하는 갯수로 뽑을수 없겠는지요?
혹시 알고 계신다면 답변 주시면 감사 하겠습니다.



===============답변(1)=================================================================

그냥 USERFUNCTION으로 사용하실 수 있게 만든 것으로 기존 사용방법과 거의 같게 사용하시면 됩니다.

/lib/userfunction.lib.php 라는 파일을 만드신후
===== 아래 보내드리는 코드를 복사해서 넣으시고
최근글 사용시 include_once("$g4[path]/lib/latest.lib.php"); 하고 사용하듯이
include_once("$g4[path]/lib/userfunction.lib.php"); 문구를
상단에 넣으시면 사용하실 수 있습니다.

사용법을 그누보드 함수와 비교해 드리면 아래와 같습니다.

[그누보드 최근글 함수 사용]
latest("스킨명", "테이블명"); // 갯수는 4, 제목길이는 40이 됨
latest("스킨명", "테이블명", 갯수, 제목길이);

[보내드리는 최근글 함수]
latest_group("스킨명", "그룹명"); // 갯수는 4, 제목길이는 40이 됨
latest_group("스킨명", "그룹명", 갯수, 제목길이);

함수를 보시면 아시겠지만 그누보드와 사용법이 똑같도록 했습니다.
테이블명 대신에 그룹명만 넣어주시면 같도록 됩니다.
카테고리와 정렬방법을 변경할 수 있는 추가적인 사용법이 있으나 헷갈리실까봐
그건 혹시 필요하실 경우에 따로 얘기드리도록 하죠...
=====

<?
if (!defined('_GNUBOARD_')) exit;
/// 함수 정의 시작

// 최신글 추출 - 선택한 그룹별로 원하는 수만큼 보여줌
function latest_group($skin_dir="", $gr_id, $rows=10, $subject_len=40, $category="", $orderby="")
{
global $config;
global $g4;
$list = array();
$limitrows = $rows;

$sqlgroup = " select bo_table, bo_subject from $g4[board_table] where gr_id = '$gr_id' and bo_use_search=1 order by bo_order_search";
$rsgroup = sql_query($sqlgroup);

if ($skin_dir)
$latest_skin_path = "$g4[path]/skin/latest/$skin_dir";
else
$latest_skin_path = "$g4[path]/skin/latest/$config[cf_latest_skin]";

for ($j=0, $k=0; $rowgroup=sql_fetch_array($rsgroup); $j++) {
$bo_table = $rowgroup[bo_table];

// 테이블 이름구함
$sql = " select * from {$g4[board_table]} where bo_table = '$bo_table'";
$board = sql_fetch($sql);

$tmp_write_table = $g4[write_prefix] . $bo_table; // 게시판 테이블 실제이름

// 옵션에 따라 정렬
$sql = "select * from $tmp_write_table where wr_is_comment = 0 ";
$sql .= (!$category) ? "" : " and ca_name = '$category' ";
$sql .= (!$orderby) ? " order by wr_id desc " : " order by $orderby desc, 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_path, $subject_len);
}
}
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;
}
/// 함수 정의 끝
?>



===============질문(2)================================================================

소스 적용을 해보니 아주 잘 됩니다.
그런데 한가지 개선할부분이 있어서 가능한지 질문 드립니다.
현재소스가 그룹 최신글이기 때문에 글제목앞에 게시판명을 넣고 싶습니다.
가능한지요..?

예) [자유게시판] 글제목표시..... 12-01

위의 예) 처럼 해당글의 게시판 제목을 넣고 싶습니다.



===============답변(2)=================================================================

요청해주신 내용을 사용하실 수 있도록 하기 위해 함수를 수정했습니다.
단, 스킨과 연결된 부분을 수정하셔야 할 수도 있습니다.

일단 [게시판명] 제목~ 이렇게 나오게 하기 위해
새로 수정한 함수에 $list[$k][bo_wr_subject] 를 만들어 두었는데요...
만약 스킨을 수정하지 않고 사용하시려면 $list[$k][subject] 로 바꾸시기 바랍니다.

혹시라도 나중에 추가적으로 사용하실때 가능하시라고
$list[$k][bo_table], $list[$k][bo_subject] 를
따로 만들어 두었으니 추후 응용도 가능하실 것입니다.

그럼 잘 만드세요~ ^^

<?
if (!defined('_GNUBOARD_')) exit;
/// 함수 정의 시작

// 최신글 추출 - 선택한 그룹별로 원하는 수만큼 보여줌
function latest_group($skin_dir="", $gr_id, $rows=10, $subject_len=40, $category="", $orderby="")
{
global $config;
global $g4;

$list = array();
$limitrows = $rows;

$sqlgroup = " select bo_table, bo_subject from $g4[board_table] where gr_id = '$gr_id' and bo_use_search=1 order by bo_order_search";
$rsgroup = sql_query($sqlgroup);

if ($skin_dir)
$latest_skin_path = "$g4[path]/skin/latest/$skin_dir";
else
$latest_skin_path = "$g4[path]/skin/latest/$config[cf_latest_skin]";

for ($j=0, $k=0; $rowgroup=sql_fetch_array($rsgroup); $j++) {
$bo_table = $rowgroup[bo_table];

// 테이블 이름구함
$sql = " select * from {$g4[board_table]} where bo_table = '$bo_table'";
$board = sql_fetch($sql);

$tmp_write_table = $g4[write_prefix] . $bo_table; // 게시판 테이블 실제이름

// 옵션에 따라 정렬
$sql = "select * from $tmp_write_table where wr_is_comment = 0 ";
$sql .= (!$category) ? "" : " and ca_name = '$category' ";
$sql .= (!$orderby) ? " order by wr_id desc " : " order by $orderby desc, 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_path, $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($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;
}
/// 함수 정의 끝
?>

댓글 작성

댓글을 작성하시려면 로그인이 필요합니다.

로그인하기

댓글 42개

12년 전
완전초보입니다.
윗분들이 시킨데로

1. g4/lib/디렉토리에 userfuntion.lib.php 파일만들어서 함수카피해서 붙어넣기 했구요..

<?
if (!defined('_GNUBOARD_')) exit;
/// 함수 정의 시작

// 최신글 추출 - 선택한 그룹별로 원하는 수만큼 보여줌
function latest_group($skin_dir="", $gr_id, $rows=10, $subject_len=40, $category="", $orderby="")
{
global $config;
global $g4;

$list = array();
$limitrows = $rows;

$sqlgroup = " select bo_table, bo_subject from $g4[board_table] where gr_id = '$gr_id' and
bo_use_search=1 order by bo_order_search";
$rsgroup = sql_query($sqlgroup);

if ($skin_dir)
$latest_skin_path = "$g4[path]/skin/latest/$skin_dir";
else
$latest_skin_path = "$g4[path]/skin/latest/$config[cf_latest_skin]";

for ($j=0, $k=0; $rowgroup=sql_fetch_array($rsgroup); $j++) {
$bo_table = $rowgroup[bo_table];

// 테이블 이름구함
$sql = " select * from {$g4[board_table]} where bo_table = '$bo_table'";
$board = sql_fetch($sql);

$tmp_write_table = $g4[write_prefix] . $bo_table; // 게시판 테이블 실제이름

// 옵션에 따라 정렬
$sql = "select * from $tmp_write_table where wr_is_comment = 0 ";
$sql .= (!$category) ? "" : " and ca_name = '$category' ";
$sql .= (!$orderby) ? " order by wr_id desc " : " order by $orderby desc, 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_path, $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($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;
}
/// 함수 정의 끝
?>

2. 최신글이 나올 페이지 (실험용으로 "최신글.htm")을 만들어서

<?
include_once("./_common.php");
include_once("$g4[path]/lib/latest.lib.php");
include_once("$g4[path]/lib/userfunction.lib.php");
?>
<html>
<head>
</head>

<body>

<? latest_group("basic", "party", 1, 20); ?>
</body>
</html>

3. FTP로 올렸습니다.

디렉토리 경로는
www안에 gnuboard4가 있고
www안에 "최신글.htm"을 올렸습니다.

4. 다행이 아무 에러메시지는 뜨지 않는데...페이지에 아무 내용도 나오지 않고 백지입니다.
뭐가 잘못됬을까요? 고수님들의 도움 부탁드립니다.

경로는 : http://www.캣츠앤독스.com/최신글.htm 입니다.
12년 전
적용 잘했습니다.
감사합니다.^^

게시글 목록

번호 제목
1989
1986
1980
1969
1966
1957
1943
1937
1930
1907
1906
1889
1887
1886
1881
1856
1843
1839
1809
1800