지정 기간제 히트순 최근 게시물 수정본 > 그누4 팁자료실

그누4 팁자료실

그누보드4와 관련된 팁을 여러분들과 함께 공유하세요.
나누면 즐거움이 커집니다.

지정 기간제 히트순 최근 게시물 수정본 정보

지정 기간제 히트순 최근 게시물 수정본

본문

지난번 자료를 수정해 봤습니다.
스크랩 기능을 활용하려면 아래 절차를 먼저 하셔야 합니다.
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>
추천
4

댓글 22개

멋진팁입니다.
주간을 넘어 월간, 년간도 처리되면 좋겠군요.
조금 응용하여 월별 주간통계, 년간 월별 통계,... 너무 복잡해지나요.
절래절래~~~~

제가 필요한 만큼만 하렵니다. ㅠㅠ;
얼른 오픈하려니 마음만 바쁜것인지...... ^^

root님의 손길이 닿으면 훨씬 좋아지지 않을까요?
ㅎㅎㅎ.........
기간 히트란 것이

기간 안에 히트"한 것이 대상이 아니라

기간 안에 게시물 히트 수를 가지고 한 것이죠?

기간 안에 히트"한 것을 대상으로 하려면 어떤 방법이 좋을까요?
초보자에게 물으시다니.... ^^;

솔직히 "기간 안에 히트"한 것을 대상으로 하려면 어떤 방법이 좋을까요?" 말씀하신 내용을 이해하지 못했습니다.
히트 즉 열람한 것에 대해서 가장 많이 열람한 게시물
여기서 기간 안에 히트한"에서 기간을 오늘이라고 하면
오늘 이전 열람한 것은 전체 열람 횟수에서 빼는 거죠.
'기간내 히트'한 것을 대상으로 한다면,
최소한 두가지 제어사항을 기재해야 겠지요.

첫째는...
기간(몇일, 몇개월 ...)

둘째는...
기준이 되는 최소 클릭(히트, 열람)수
뽀뽀? 하시느라 바쁘신데도 불구하고..... ^^

생각해 본 것이

한 게시물에 대해서 열람 횟수를 기간 별로 나누어 볼 수 있지 않을까 해서요.

10번 게시물이  1일에는 13번, 2일에는 18번, ...

그렇게 해서 오늘 가장 많이 본 게시물은 무엇일까 하는 거였죠.
rolo님의 의견을 수용하려면 별도로 필드를 할당하여 저장을 해야 하겠는데요?
현재 시스템으로는 즉시 결과를 얻기는 불가능할것 같은데 말입니다.

야후 뉴스에 보면 "오늘 많이 읽은글", "1시간동안 많이 읽은 글" 등으로 분류를 해뒀던데 편리하기는 하더군요.

사이트에 따라서 생각해 볼만한 제안이십니다.
^^
그러게요 테이블 관련 변수가 다 먹히질 안네용...

링크가 {$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 로 인해서 배열이 계속 덮어씌워지기 때문에 원치 않는 결과가 나옵니다.
배열이 계속 합쳐진 후에 정렬시켜야 하는데
배열이 합쳐지지 않고 덮어씌워지고 있네요.
전체 3,313 |RSS
그누4 팁자료실 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT