블로그

[MovableType] 카운터달기

귀찮아서 한참 후에 하려고 했는데 그냥 회사 일도 잘 풀리길래 기분내서 오늘 해버렸다.

일단 eouia님 블로그에 있는 카운터를 기반으로 작성했으며 번거로운 DB 컬럼은 모두 제외하고 더욱 경량화된 카운터를 달았다.

비슷한 형태의 홈페이지 대문용 카운터를 만들어본 적이 있는데, 블로그 페이지마다 달게 되는 카운터는 반복해서 카운트를 높이는 행위에 대해서 막을 필요가 없다고 생각되기 때문에, EOUIA님 카운터로도 훌륭하다고 본다. 다음의 코드는 eouia님의 카운터 소스를 약간 다듬은 것이다.

<?
/*
— 테이블 스키마
create table my_mt_counter(
count int not null default 0,
id int not null,
primary key (id)
);
*/

// user environment setting
$dbhost = “localhost”;
$dbname = “아마도 mt???”;
$dbuser = “계정이름”;
$dbpassword = “패스워드”;
$dbtable = “my_mt_counter”;

function SetCount($val) {
global $dbtable, $page;
$q=mysql_query(“SELECT * FROM $dbtable WHERE id=$val”);
if ($result=mysql_fetch_array($q)) {
$result[count]++;
if ($val == 0)
$val = $result[id];
mysql_query(“UPDATE $dbtable SET count='$result[count]', id=$val WHERE id=$val”);
} else {
InitCount($val);
}
}

function InitCount($val) {
global $dbtable;
mysql_query(“INSERT INTO $dbtable VALUES (1, $val)”);
}

function GetEntryCount($val) {
global $dbtable;

$q=mysql_query(“SELECT * FROM $dbtable WHERE id=$val”);
if ($q and ($result=mysql_fetch_array($q))) {
print $result[count];
} else {
print 0;
}
}

$connect=mysql_connect($dbhost, $dbuser, $dbpassword) or die(“connect error”);
mysql_select_db($dbname) or die(“select error”);
?>

이걸 counter.php로 저장하여 mt 디렉토리에 둔다. 이 파일을 사용하기 위해서는 HTML파일이 PHP 코드를 include하여 사용할 수 있거나 블로그가 만들어내는 파일이 HTML 확장자 대신에 PHP 확장자를 가지도록 해야 한다.

템플릿 코드에 여러 군데 들어가야 하는데 다음의 네 가지 코드를 적절히 조합하여 해당 템플릿 코드에 끼워넣어야 한다.

<?include('counter.php');?> // 메인인덱스템플릿의 body 태그 뒤에

<?include('../counter.php');?> // 다른 템플릿의 body 태그 뒤에

<?SetCount(<$MTEntryID$>);?> // 개별페이지템플릿의 위 include 문장 뒤에

<?GetEntryCount(<$MTEntryID$>);?> // 출력하고 싶은 곳 어디에나

아참, 빠뜨리면 안 되는 것은 mysql에 위 코드에 주석으로 적혀있는 테이블 스키마를 추가하는 것이다.

내 블로그 페이지에서는 작성자 아이디가 나오는 위치에 “| 조회 6” 이런 식으로 출력되도록

| 조회 <? GetEntryCount(<$MTEntryID$>); ?>

라고 적어놓았다.

댓글 2개

답글 남기기