Rev. 2.73

태그 클라우드를 설치하신 분에 해당하는 내용입니다.Tattertools v1.0에서 구현되는 태그 목록처럼 랜덤으로 뿌리도록 수정하였습니다. 추가하신 코드중에 아래처럼 조건식을 rand()으로 변경해 보세요. 눈이 아주 즐거워 진답니다.

변경전 : $where_cond." group by tag order by no desc limit
변경후 : $where_cond." group bytag order by rand() desc limit

관련글 :
- 태터툴즈 1.0 RC3 - 태그 기능확장하기
- 태터툴즈1.0 클래식에 태그클라우드 표시하기

Comments

태터툴즈 클래식 RC3에서 처음으로 도입된 태그기능이 아직은 미약해 보인다. kebie님의 태그클라우드 표시하기에 이어서 태그표시에 이어서 태터툴즈에 구석구석에 엮일 수 있도록 조금 더 파고 들어가 보자. 태그를 클릭하면 관련된 글 목록이 표시된다. 목록에서 글을 조회할 수 있다. 그렇다 단순히 조회만 할 수 있다.

그렇다면, 키워드 검색을 해보자. 해당 키워드들이 들어있는 목록이 나타난다. 목록에서 글을 조회해 보자. 무엇이 다른가? 키워드가 관련된 순서로 리스트가 다시 만들어졌다. 그래서 다음 글을 읽더라도 굳이 목록 페이지를 조회할 필요가 없는 것이다. "S"단축키를 연타해가며 관련된 글을 빠르게 훌터 볼 수 있는 태터만의 독보적인 기술이다. 이것은 카테고리 또는 달력, 아카이브에서도 유효한 것이다. 지금부터 태그를 클릭하였을 때에도 이와같은 효과가 일어나도록 해보자. 수정할 파일은 index.php이다.

수정전 - index.php 152번 열

}
if ($t_set) $add_query .= " and no in ($t_set) ";
}

수정후 - 파란색 열 추가

}
if ($t_set) $add_query .= " and no in ($t_set) ";
$add_val .= "&stag=".urlencode($stag); // 태그도 글 연결되도록 수정
}

수정전 - index.php 366번 열

while(1) {
if ($md == "rss" || $md == "guest" || $md == "keyword" ||$md == "local" || ($&&&ct1 && $p_select_cat_view == 1 && !$pl) || (($setdate || $setday) && $p_select_arc_view == 1 && !$pl) || ($stext && !$pl)) break;

수정후 - 파란색 부분 수정

while(1) {
if ($md == "rss" || $md == "guest" || $md == "keyword" ||$md == "local" || ($&&&ct1 && $p_select_cat_view == 1 && !$pl) || (($setdate || $setday) && $p_select_arc_view == 1 && !$pl) || ($stext && !$pl) || ($stag && !$pl)) break; // 태그도 글 연결되도록 수정

이렇게만 수정하면 태그와 관련된 글 목록과 함께 표시되는 포스트 화면에서 포스트는 보이지 않게 된다. 본인만 그런지는 몰라도 리스트와 함께 출력되는 포스트는 싫다. 만약 포스트 또한 그대로 보이게 하고자 한다면 두 번째로 삽입한 코드 "($stag && !$pl)"을 "$stag"로 변경하면 된다.(추측건대 안되던 페이지 링크도 살아날 것이다.)

Comments

kebie님의' 태터툴즈에서 태그 구름 사용하기' 트랙백

태그클라우드.png

태그목록 표시를 구현하기 위해 밤낮으로 삽질하던 중에 kebie님께 목말라하던 트랙백을 받았습니다. 태그기능을 거의 완벽하게 구현하셨더군요. 특히, 태그를 선택하면 관련된 태그만 출력되는 것은 너무도 훌륭합니다. 하던 작업을 때려치우고, kebie님의 소스를 바탕으로 표시되는 순서와, 하이라이트 등과 관련된 부분을 재가공하여 아래와 같이 적용하였습니다.

수정전

$sql = 'SELECT count(*), tag from t3_'.$dbid.'_tag'.$WHERE_COND.' GROUP BY tag ORDER BY tag asc';
$result = @mysql_query($sql);
while(list($pcnt, $tag) = @mysql_fetch_array($result)){
if($pcnt>8) $font='s4';
elseif($pcnt>3) $font='s3';
elseif($pcnt>1) $font='s2';
else $font='s1';
$tags_str .= '<a rel='tag' href='index.php?stag='.urlencode($tag).''><font class=''.$font.''>'.$tag.'</font></a> ';
}return $tags_str;
}

수정후

unset($p);
$sql = "select count(*), tag from t3_".$dbid."_tag".$WHERE_COND." group by tag order by no desc limit 0, 32";
$result = @mysql_query($sql);
while(list($pcnt, $tag) = @mysql_fetch_array($result)){
if($pcnt>8) $font='cloud1';
elseif($pcnt>5) $font='cloud2';
elseif($pcnt>3) $font='cloud3';
elseif($pcnt>1) $font='cloud4';
else $font='cloud5';

$p_rep = $GLOBALS["plugin"]->s_rcttag_rep;
$p_rep = str_replace("[##_rcttag_rep_tag_##]", "<a href=\"index.php?stag=".urlencode($tag)."\"><font class="".$font."">$tag</font></a>", $p_rep);
$p .= $p_rep;
}
return $p;
}

order by no desc - 최근에 작성한 포스트에 포함된 태그 순서로 표시
$pcnt - 중복되는 태그 수 1, 3, 5, 8 순으로 하이라이트 표시
limit 0, 32' - 최대 출력 수 32개로 재한(플러그인 환경설정에서 지정)
스킨의 Style.css에서 클라우드 색상 지정 가능 하도록 변경

※ 파란색 코드만 자신의 블로그에 맞게 수정하시면 됩니다. 플러그인화 하기위해 $p_rep를 정의하였습니다. 이 부분은 무시하셔도 무방합니다.

Style.css 태그 cloud 스타일
.cloud1 { font-size: 15px; color: #cc3300; font-family: "돋움"; letter-spacing:-1px;}
.cloud2 { font-size: 14px; color: #ff9900; font-family: "돋움"; letter-spacing:-1px;}
.cloud3 { font-size: 12px; color: #669900; letter-spacing:-1px;}
.cloud4 { font-size: 11px; color: #0099CC; font-family: "돋움";}
.cloud5 { font-size: 11px; color: #999999; font-family: "돋움";}

index.php 태그의 총 개수 출력하기
중복되지 않는 태그 수 구하기위해 index.php의 가장 하단 print $d1; 위에 파란색 코드를 삽입 후 skin.html의 적절한 위치에 [##_rcttag_rep_tag_count_##]치환자를 추가하시면 되겠습니다.

if (strpos($d1, "[##_rcttag_rep_tag_count_##]")) { // 태그 총 개수 출력
$sql = "select count(distinct tag) from t3_".$dbid."_tag;";
$result = mysql_query($sql);
while(list($tag) = mysql_fetch_array($result)){
$tag_count = $tag;
$d1 = str_replace("[##_rcttag_rep_tag_count_##]", "($tag_count)", $d1);
}
$d1 = str_replace("[##_rcttag_rep_tag_count_##]", "", $d1);
}

print $d1;

Comments