Rev. 2.73

요즈음 태터툴즈에 골빈해커님의 랜덤포스트목록을 추가하는것이 유행인듯 하다. 본인도 넣어보려 했지만 워낙 꿀꿀한(?) 포스트들이 많아 꺼려오고 있던중 최근 지정기간내에 리플과 트랙백 카운트 통계를 이용한 인기포스트 목록을 넣어보는 것도 좋겠다 싶어 만들어 보았다.(뭐 그리 인기 많은글이 있지도 않지만...)

1123123.jpg

위 그림과 같이 블로그 최상단에 지정기간동안의 인기있는글이 표시된다. 기본바탕이 된 소스는 사탕발가락님의 플러그인 일부를 가공하여 사용 하였다.

편집할 파일은 inc_function.php, inc_presswork.php, index.php, skin.html 이다.
(※ 백업필수)

index.php
아래부분에서 다음과 같은 열을 찾는다.

if (strpos($d1, "[ ##_s_link_rep_##]")) $d1 = str_replace("[ ##_s_link_rep_##]", get_link_rep(), $d1);

아래줄에 다음과 같이 한줄 추가한다.

if (strpos($d1, "[ ##_s_link_rep_##]")) $d1 = str_replace("[ ##_s_link_rep_##]", get_link_rep(), $d1);
if (strpos($d1, "[ ##_s_popular_rep_##]")) $d1 = str_replace("[ ##_s_popular_rep_##]", get_popular_rep(), $d1); //인기글 리스트

inc_function.php
다음 코드를 검색한다.

var $s_link_rep;

아래줄에 다음과 같이 한줄 추가한다.

var $s_link_rep;
var $s_popular_rep;  //인기글 리스트

다음 코드를 검색한다.

list($sval, $this->s_link_rep) = cut_skintag($sval, "s_link_rep");

아래줄에 다음과 같이 한줄 추가한다.

list($sval, $this->s_link_rep) = cut_skintag($sval, "s_link_rep");
list($sval, $this->s_popular_rep) = cut_skintag($sval, "s_popular_rep");//인기글 리스트

inc_presswork.php
최하단 ?>전에 아래의 function을 추가해준다.

//인기글 리스트
	function get_popular_rep() { 
        global $db, $dbid; 
        unset($p); 

        $trunc = 24;  //최대 글의 크기 
        $comment_cnt = 5; //목록에 보여질 글 수 
        $sql = " 
        select 
            no, title, regdate,    category1, category2, rp_cnt + tb_cnt*1 as point 
        from 
            t3_".$dbid." 
        where is_public    = '1' 
        and    from_unixtime( regdate,     '%Y%m%d%T'     ) >= DATE_FORMAT(DATE_ADD(NOW(), interval -1 month), '%Y%m%d%T') 
        order by 
            point desc,    regdate    asc 
        limit 0, $comment_cnt 
        "; 
        $result = @mysql_query($sql); 

        while(list($no, $title, $regdate, $category1, $category2, $rp_cnt) = @mysql_fetch_array($result)) { 
            $p_rep = $GLOBALS["skin"]->s_popular_rep; 
            $p_rep = str_replace("[ ##_popular_rep_link_##]", "index.php?pl=$no", $p_rep); 
            $p_rep = str_replace("[ ##_popular_rep_title_##]", str_cut($title,$trunc,0), $p_rep); 

            $category = get_category1_label($category1); 
            if ($category2) $category .= " - ".get_category2_label($category2); 
            $p_rep = str_replace("[ ##_popular_rep_category_##]", $category, $p_rep); 

            if($rp_cnt>0) 
            $rp_cnt ="(".$rp_cnt.")"; 
            else 
            $rp_cnt = ""; 
            $p_rep = str_replace("[ ##_popular_rep_reply_##]", $rp_cnt, $p_rep); 
            $p_rep = str_replace("[ ##_popular_rep_date_##]", get_timevalue0($regdate, 2), $p_rep); 
            $p .= $p_rep; 
            } 
    return $p; 
    } 

여기에서 DATE_FORMAT(DATE_ADD(NOW(), interval -1 month) 이 부분에서 month를 day로 바꾸면 날짜단위로 범위를 지정할 수 있다. 그리고 $trunc에는 최대 글자수의 크기, $comment_cnt는 목록을 몇개나 출력할 것인지 정해줄 수 있다.

skin.html
아래 치환자를 스킨의 적절한 위치에 적용하면 된다.(아래 코드의 [와 ##_사이에 있는 공백은 지워야 한다.)

< s_popular_rep>
[ ##_popular_rep_link_##] : 링크 치환자
[ ##_popular_rep_title_##] : 제목 치환자
[ ##_popular_rep_reply_##] : 트랙백 + 답변 합산 수 치환자
[ ##_popular_rep_date_##] : 날짜 치환자
[ ##_popular_rep_category_##] : 해당글의 카테고리
< /s_popular_rep>

본인 블로그 스킨 적용 예

	<!--최근 인기있는 글목록-->
	<div class='subject'><font color='#990000'><strong>Popular Posted</strong></font></div>
	<div class='blackline'><br></div>
	최근 한달간 인기있 글의 목록입니다.
	<div class='comment_line'></div>
	<table width="100%"  border="0" cellspacing="0" cellpadding="0" class='comment_memo'>
	<s_popular_rep>
		<tr><td width="225" nowrap><strong>ㆍ</strong> [ ##_popular_rep_date_##] <a href="[ ##_popular_rep_link_##]">[ ##_popular_rep_title_##]</a> [ ##_popular_rep_reply_##]</td><td>:: </td></tr>
	</s_popular_rep>
	</table>
	<div class='comment_line'></div>
	<p>

※ [ 과 ## 사이의 공백이 있는 곳은 꼭 붙여 주어야 한다.
※ 카테고리도 출력되도록 변경하였다.
※ 스킨예제를 테이블 구조로 변경하였다.

버그리포트는 이곳에 남겨주기 바란다.

Comments