지정 기간제 히트순 최근 게시물 수정본
지난번 자료를 수정해 봤습니다.
스크랩 기능을 활용하려면 아래 절차를 먼저 하셔야 합니다.
1. 필드추가
wr_scrap int(11) NOT NULL default '0',
2. ./bbs/scrap_popin_update.php 85 라인 이후에 추가(카운트 증가)
$sql_Q = " update $write_table set wr_scrap = wr_scrap + 1 where wr_id = '$wr_id' ";
sql_query($sql_Q);
3. ./bbs/scrap_delete.php 5라인 이후에 추가(카운트 감소)
# 삭제시 스크랩 카운터를 '1' 줄여야 한다.
$sql_scrap = " select wr_id, bo_table from $g4[scrap_table] where mb_id = '$member[mb_id]' and ms_id = '$ms_id' ";
$row_scrap = sql_query($sql_scrap);
for ($i=0; $Q_scrap=sql_fetch_array($row_scrap); $i++)
{
$write_table = $g4['write_prefix'] . $Q_scrap[bo_table];
$sql_Q = " update $write_table set wr_scrap = wr_scrap - 1 where wr_id = '$Q_scrap[wr_id]' ";
sql_query($sql_Q);
}
위와같이 작업했다면 그림과 같이 스크랩 출력을 할수가 있습니다.
물론, 스크랩 출력을 사용하지 않을거라면 필요없는 과정입니다.
# ./extend/izen.group.lib.php
<?
if (!defined('_GNUBOARD_')) exit;
/*
izen.group.lib.php
제작일 : 2006-12-08
지정 기간제 히트순 최근 게시물 수정본
http://www.sir.co.kr/bbs/tb.php/g4_tiptech/7328
그룹 최신글 관련하여 통합하도록 하였다.
정렬 필드값에 의해서 SQL 문을 추가하도록 하면 된다.
izen_group('스킨', '그룹명', 정렬필드, 출력갯수, 자를 문자열, 최근 몇일간을 출력할 것인가?);
예) echo izen_group('gr_best_news', 'news', wr_hit, 10, 28, 30);
*/
# 인기글
function izen_usort1($a, $b)
{
return $b['wr_hit'] - $a['wr_hit'];
}
# 헤드라인
function izen_usort2($a, $b)
{
return $b['wr_good'] - $a['wr_good'];
}
# 최신글 추출
function izen_group($skin_dir="", $gr_id, $izen_sort, $rows=10, $subject_len=40, $listdate)
{
global $g4;
$nowYmd = date(Ymd); # 시작시간을 구합니다.
$time = time();
$startYmd = date("Ymd",strtotime("-".$listdate." day", $time));
if ($skin_dir)
{
$latest_skin_path = "$g4[path]/skin/latest/$skin_dir";
}
else
{
$latest_skin_path = "$g4[path]/skin/latest/basic";
}
$list = array();
$sql= " select bo_table from {$g4['board_table']} where gr_id='$gr_id' and bo_use_search='1' order by bo_order_search ";
$ress = sql_query($sql);
for($i=0, $ii=0; $board=sql_fetch_array($ress); $ii++)
{
$tmp_write_table = $g4['write_prefix'] . $board['bo_table']; # 게시판 테이블 전체이름
#$sql = "select * from `$tmp_write_table` where wr_is_comment <> '1' and date_format(wr_datetime, '%Y%m%d') between '$startYmd' and '$nowYmd' order by $sort desc limit 0, $rows ";
# 정렬 필드에 의해서 전체적으로 정렬, 관리한다.
if ($izen_sort == 'wr_hit')
{
$sql_gr_Q = " wr_is_comment <> '1' and date_format(wr_datetime, '%Y%m%d') between '$startYmd' and '$nowYmd' order by $izen_sort desc limit 0, $rows ";
}
elseif ($izen_sort == 'wr_scrap')
{
$sql_gr_Q = " wr_is_comment <> '1' and date_format(wr_datetime, '%Y%m%d') between '$startYmd' and '$nowYmd' and wr_scrap <> 0 order by $izen_sort desc limit 0, $rows ";
}
elseif ($izen_sort == 'wr_datetime') # wr_1 헤드라인
{
$sql_gr_Q = " wr_is_comment <> '1' and date_format(wr_datetime, '%Y%m%d') between '$startYmd' and '$nowYmd' and wr_1 = 1 order by $izen_sort desc limit 0, $rows ";
}
elseif ($izen_sort == 'wr_good') #
{
$sql_gr_Q = " wr_is_comment <> '1' and date_format(wr_datetime, '%Y%m%d') between '$startYmd' and '$nowYmd' and wr_good <> '0' order by $izen_sort desc limit 0, $rows ";
}
elseif ($izen_sort == 'wr_id')
{
$sql_gr_Q = " wr_is_comment <> '1' order by $izen_sort desc limit 0, $rows ";
}
$sql = " select * from `$tmp_write_table` where $sql_gr_Q ";
$result = sql_query($sql);
#for (; $row=sql_fetch_array($result); $i++) # *오류* 전체 게시물 가운데 날짜에 상관없이 히트순으로 지정한 갯수만큼 출력된다.
for ($i==0; $row=sql_fetch_array($result); $i++)
{
$list[$i] = get_list($row, $board, $latest_skin_path, $subject_len, $listdate);
}
}
if ($izen_sort == 'wr_hit')
{
usort($list, 'izen_usort1');
}
elseif ($izen_sort == 'wr_good')
{
usort($list, 'izen_usort2');
}
$list= array_slice($list, 0, $rows);
ob_start();
include "$latest_skin_path/latest.skin.php";
$content = ob_get_contents();
ob_end_clean();
return $content;
}
?>
# ./skin/latest/izen_group_new/latest.skin.php
<?
if (!defined("_GNUBOARD_")) exit;
# $sub_title = "{$listdate}일간의 베스트 글";
if ($izen_sort == 'wr_hit')
{
$sub_title = "주간 인기글";
}
elseif ($izen_sort == 'wr_scrap')
{
$sub_title = "주간 최다스크랩";
}
elseif ($izen_sort == 'wr_good')
{
$sub_title = "주간 추천베스트";
}
?>
<table width="100%" cellpadding="0" cellspacing="0">
<tr><td height="22"><img src="<?=$g4[tema_img]?>/latest/icon_pp.gif"/><span style="color:#cc3300; font-weight:bold;"><?=$sub_title?></span></a></td></tr>
<tr><td height="2"></td></tr>
<tr><td height="1" bgcolor="#e1e1e1"></td></tr>
<tr><td height="3"></td></tr>
<?
for ($i=0; $i<count($list); $i++)
{
echo "<tr><td height=\"20\"><img src=\"$g4[tema_img]/latest/icon_news_hot.gif\" align=\"absmiddle\"/>";
echo "<a href='{$list[$i]['href']}'>";
echo "<span style=\"color:#656565;\">{$list[$i]['subject']}</span>";
echo "</a>";
if ($izen_sort == 'wr_hit')
{
echo " <span style=\"font-family:돋움; font-size:8pt; color:#9A9A9A;\">({$list[$i]['wr_hit']})</span>";
}
if ($izen_sort == 'wr_scrap')
{
echo " <span style=\"font-family:돋움; font-size:8pt; color:#9A9A9A;\">({$list[$i]['wr_scrap']})</span>";
}
if ($izen_sort == 'wr_good')
{
echo " <span style=\"font-family:돋움; font-size:8pt; color:#9A9A9A;\">({$list[$i]['wr_good']})</span>";
}
if ($list[$i]['comment_cnt'])
{
echo " <a href=\"{$list[$i]['comment_href']}\"><span style=\"font-family:돋움; font-size:8pt; color:#9A9A9A;\">{$list[$i]['comment_cnt']}</span></a>";
}
echo "</td></tr>";
} # for
if (count($list) == '0')
{
echo "<tr><td align=\"center\" height=\"50\"><font color=\"#6A6A6A\">게시물이 없습니다.</a></td></tr>";
}
?>
</table>
스크랩 기능을 활용하려면 아래 절차를 먼저 하셔야 합니다.
1. 필드추가
wr_scrap int(11) NOT NULL default '0',
2. ./bbs/scrap_popin_update.php 85 라인 이후에 추가(카운트 증가)
$sql_Q = " update $write_table set wr_scrap = wr_scrap + 1 where wr_id = '$wr_id' ";
sql_query($sql_Q);
3. ./bbs/scrap_delete.php 5라인 이후에 추가(카운트 감소)
# 삭제시 스크랩 카운터를 '1' 줄여야 한다.
$sql_scrap = " select wr_id, bo_table from $g4[scrap_table] where mb_id = '$member[mb_id]' and ms_id = '$ms_id' ";
$row_scrap = sql_query($sql_scrap);
for ($i=0; $Q_scrap=sql_fetch_array($row_scrap); $i++)
{
$write_table = $g4['write_prefix'] . $Q_scrap[bo_table];
$sql_Q = " update $write_table set wr_scrap = wr_scrap - 1 where wr_id = '$Q_scrap[wr_id]' ";
sql_query($sql_Q);
}
위와같이 작업했다면 그림과 같이 스크랩 출력을 할수가 있습니다.
물론, 스크랩 출력을 사용하지 않을거라면 필요없는 과정입니다.
# ./extend/izen.group.lib.php
<?
if (!defined('_GNUBOARD_')) exit;
/*
izen.group.lib.php
제작일 : 2006-12-08
지정 기간제 히트순 최근 게시물 수정본
http://www.sir.co.kr/bbs/tb.php/g4_tiptech/7328
그룹 최신글 관련하여 통합하도록 하였다.
정렬 필드값에 의해서 SQL 문을 추가하도록 하면 된다.
izen_group('스킨', '그룹명', 정렬필드, 출력갯수, 자를 문자열, 최근 몇일간을 출력할 것인가?);
예) echo izen_group('gr_best_news', 'news', wr_hit, 10, 28, 30);
*/
# 인기글
function izen_usort1($a, $b)
{
return $b['wr_hit'] - $a['wr_hit'];
}
# 헤드라인
function izen_usort2($a, $b)
{
return $b['wr_good'] - $a['wr_good'];
}
# 최신글 추출
function izen_group($skin_dir="", $gr_id, $izen_sort, $rows=10, $subject_len=40, $listdate)
{
global $g4;
$nowYmd = date(Ymd); # 시작시간을 구합니다.
$time = time();
$startYmd = date("Ymd",strtotime("-".$listdate." day", $time));
if ($skin_dir)
{
$latest_skin_path = "$g4[path]/skin/latest/$skin_dir";
}
else
{
$latest_skin_path = "$g4[path]/skin/latest/basic";
}
$list = array();
$sql= " select bo_table from {$g4['board_table']} where gr_id='$gr_id' and bo_use_search='1' order by bo_order_search ";
$ress = sql_query($sql);
for($i=0, $ii=0; $board=sql_fetch_array($ress); $ii++)
{
$tmp_write_table = $g4['write_prefix'] . $board['bo_table']; # 게시판 테이블 전체이름
#$sql = "select * from `$tmp_write_table` where wr_is_comment <> '1' and date_format(wr_datetime, '%Y%m%d') between '$startYmd' and '$nowYmd' order by $sort desc limit 0, $rows ";
# 정렬 필드에 의해서 전체적으로 정렬, 관리한다.
if ($izen_sort == 'wr_hit')
{
$sql_gr_Q = " wr_is_comment <> '1' and date_format(wr_datetime, '%Y%m%d') between '$startYmd' and '$nowYmd' order by $izen_sort desc limit 0, $rows ";
}
elseif ($izen_sort == 'wr_scrap')
{
$sql_gr_Q = " wr_is_comment <> '1' and date_format(wr_datetime, '%Y%m%d') between '$startYmd' and '$nowYmd' and wr_scrap <> 0 order by $izen_sort desc limit 0, $rows ";
}
elseif ($izen_sort == 'wr_datetime') # wr_1 헤드라인
{
$sql_gr_Q = " wr_is_comment <> '1' and date_format(wr_datetime, '%Y%m%d') between '$startYmd' and '$nowYmd' and wr_1 = 1 order by $izen_sort desc limit 0, $rows ";
}
elseif ($izen_sort == 'wr_good') #
{
$sql_gr_Q = " wr_is_comment <> '1' and date_format(wr_datetime, '%Y%m%d') between '$startYmd' and '$nowYmd' and wr_good <> '0' order by $izen_sort desc limit 0, $rows ";
}
elseif ($izen_sort == 'wr_id')
{
$sql_gr_Q = " wr_is_comment <> '1' order by $izen_sort desc limit 0, $rows ";
}
$sql = " select * from `$tmp_write_table` where $sql_gr_Q ";
$result = sql_query($sql);
#for (; $row=sql_fetch_array($result); $i++) # *오류* 전체 게시물 가운데 날짜에 상관없이 히트순으로 지정한 갯수만큼 출력된다.
for ($i==0; $row=sql_fetch_array($result); $i++)
{
$list[$i] = get_list($row, $board, $latest_skin_path, $subject_len, $listdate);
}
}
if ($izen_sort == 'wr_hit')
{
usort($list, 'izen_usort1');
}
elseif ($izen_sort == 'wr_good')
{
usort($list, 'izen_usort2');
}
$list= array_slice($list, 0, $rows);
ob_start();
include "$latest_skin_path/latest.skin.php";
$content = ob_get_contents();
ob_end_clean();
return $content;
}
?>
# ./skin/latest/izen_group_new/latest.skin.php
<?
if (!defined("_GNUBOARD_")) exit;
# $sub_title = "{$listdate}일간의 베스트 글";
if ($izen_sort == 'wr_hit')
{
$sub_title = "주간 인기글";
}
elseif ($izen_sort == 'wr_scrap')
{
$sub_title = "주간 최다스크랩";
}
elseif ($izen_sort == 'wr_good')
{
$sub_title = "주간 추천베스트";
}
?>
<table width="100%" cellpadding="0" cellspacing="0">
<tr><td height="22"><img src="<?=$g4[tema_img]?>/latest/icon_pp.gif"/><span style="color:#cc3300; font-weight:bold;"><?=$sub_title?></span></a></td></tr>
<tr><td height="2"></td></tr>
<tr><td height="1" bgcolor="#e1e1e1"></td></tr>
<tr><td height="3"></td></tr>
<?
for ($i=0; $i<count($list); $i++)
{
echo "<tr><td height=\"20\"><img src=\"$g4[tema_img]/latest/icon_news_hot.gif\" align=\"absmiddle\"/>";
echo "<a href='{$list[$i]['href']}'>";
echo "<span style=\"color:#656565;\">{$list[$i]['subject']}</span>";
echo "</a>";
if ($izen_sort == 'wr_hit')
{
echo " <span style=\"font-family:돋움; font-size:8pt; color:#9A9A9A;\">({$list[$i]['wr_hit']})</span>";
}
if ($izen_sort == 'wr_scrap')
{
echo " <span style=\"font-family:돋움; font-size:8pt; color:#9A9A9A;\">({$list[$i]['wr_scrap']})</span>";
}
if ($izen_sort == 'wr_good')
{
echo " <span style=\"font-family:돋움; font-size:8pt; color:#9A9A9A;\">({$list[$i]['wr_good']})</span>";
}
if ($list[$i]['comment_cnt'])
{
echo " <a href=\"{$list[$i]['comment_href']}\"><span style=\"font-family:돋움; font-size:8pt; color:#9A9A9A;\">{$list[$i]['comment_cnt']}</span></a>";
}
echo "</td></tr>";
} # for
if (count($list) == '0')
{
echo "<tr><td align=\"center\" height=\"50\"><font color=\"#6A6A6A\">게시물이 없습니다.</a></td></tr>";
}
?>
</table>
첨부파일
|
댓글 작성
댓글을 작성하시려면 로그인이 필요합니다.
로그인하기
댓글 22개
오랫만에 뵙습니다.
주간을 넘어 월간, 년간도 처리되면 좋겠군요.
조금 응용하여 월별 주간통계, 년간 월별 통계,... 너무 복잡해지나요.
제가 필요한 만큼만 하렵니다. ㅠㅠ;
얼른 오픈하려니 마음만 바쁜것인지...... ^^
root님의 손길이 닿으면 훨씬 좋아지지 않을까요?
ㅎㅎㅎ.........
기간 안에 히트"한 것이 대상이 아니라
기간 안에 게시물 히트 수를 가지고 한 것이죠?
기간 안에 히트"한 것을 대상으로 하려면 어떤 방법이 좋을까요?
솔직히 "기간 안에 히트"한 것을 대상으로 하려면 어떤 방법이 좋을까요?" 말씀하신 내용을 이해하지 못했습니다.
여기서 기간 안에 히트한"에서 기간을 오늘이라고 하면
오늘 이전 열람한 것은 전체 열람 횟수에서 빼는 거죠.
최소한 두가지 제어사항을 기재해야 겠지요.
첫째는...
기간(몇일, 몇개월 ...)
둘째는...
기준이 되는 최소 클릭(히트, 열람)수
[http://sir.co.kr/data/file/cm_humor/738362311_adfbb726_hitbyhit.png]
생각해 본 것이
한 게시물에 대해서 열람 횟수를 기간 별로 나누어 볼 수 있지 않을까 해서요.
10번 게시물이 1일에는 13번, 2일에는 18번, ...
그렇게 해서 오늘 가장 많이 본 게시물은 무엇일까 하는 거였죠.
현재 시스템으로는 즉시 결과를 얻기는 불가능할것 같은데 말입니다.
야후 뉴스에 보면 "오늘 많이 읽은글", "1시간동안 많이 읽은 글" 등으로 분류를 해뒀던데 편리하기는 하더군요.
사이트에 따라서 생각해 볼만한 제안이십니다.
^^
마냥 좋아야 하는 데도 불구하고,
살아갈 일이 먼저 가슴을 짓누릅니다.
list[$][bo_subject]는 먹지 않던데요?
링크가 {$list[$i]['href']} 이렇게 되있어서 내용말구 리스트로 가구 싶어서
<a href='{$g4['bbs_path']}/board.php?bo_table={$list[$i]['bo_table']}
라고 해줘도 테이블 명을 불러 드리지 못하네용... 이유가 무엇일까 ....ㅜㅜ
$list[$i] = get_list($row, $board, $latest_skin_path, $subject_len, $listdate);
이부분을
$list[] = get_list($row, $board, $latest_skin_path, $subject_len, $listdate);
로 해주셔야 합니다.
usort정렬하기 전에
2중 루프내부의 $i 로 인해서 배열이 계속 덮어씌워지기 때문에 원치 않는 결과가 나옵니다.
배열이 계속 합쳐진 후에 정렬시켜야 하는데
배열이 합쳐지지 않고 덮어씌워지고 있네요.