TagwireとPHPで高速な[Tag Cloud] ver 1.00(MT3.2まで)

  • 投稿日:
  • by

先日、「Tag Cloud」ページを作成したのですが、
私のキーワード付けの方法が間違っているのか、
すごい量になってしまいました。


このやり方では、Javascriptにて、
フォントサイズ、フォント色、カットオフのvisibilityコントロールしています。

なので、これだけ大量のTAGがあるため、
すべてのTAGブラウザが読み込み
その後にクライアント側でJavascriptを処理しているため、
完全に表示されるまで、長い時間がかかってしまいます。

そこで、せっかくブログをPHP化しているので、
サーバーサイドでそれをやってしまおう、と思ったわけです。


それでは、解説をば。。。

まず、Tagwireのタグを使って、
TAGを抽出するだけのテンプレートを作成します。

テンプレート名・・・「TAGGING-rare」(任意)
出力ファイル名・・・「tagging-rare.php」(任意)
テンプレートの内容

<MTTags>
<$MTTag$>:<$MTTagCount$>:<$MTTagDate format="%Y-%m-%d"$>:<$MTTag encode_url="1"$>
</MTTags>

これでテンプレートを保存・再構築します。

すると、tagging-rare.phpというファイル名で、
以下のような文字列のファイルができあがります。

  ・
  ・
  ・
TrueSleeper:1:2006-01-12:TrueSleeper
TVドラマ:1:2006-02-06:TV%E3%83%89%E3%83%A9%E3%83%9E
TV版:5:2006-02-06:TV%E7%89%88
TypeKey:1:2006-01-07:TypeKey
TypeR:6:2006-01-15:TypeR
Tシャツ:2:2005-03-23:T%E3%82%B7%E3%83%A3%E3%83%84
t属性:1:2005-04-19:t%E5%B1%9E%E6%80%A7
UFOキャッチャー:2:2006-01-23:UFO%E3%82%AD%E3%83%A3%E3%83%83%E3%83%81%E3%83%A3%E3%83%BC
  ・
  ・
  ・

並びとしては、

TAG:出現回数:最終出現日:TAGのURLエンコード文字列

となります。


続いて、実際に表示するためのテンプレートを作成します。

テンプレート名・・・「TAGGING-PHP」(任意)
出力ファイル名・・・「tagging-php.php」(任意)
テンプレートの内容

<style type="text/css">
#tags {
border: 1px solid #CCC;
padding: 10px;
margin: 10px;
text-decoration: none;
}
#tags a {
border-width: 0; color: #000;
text-decoration: none;
}
#tags a:active, #tags a:hover {
color: #6C3;
text-decoration: none;
}
#tags .hot a { color: #0000ff; }
#tags .old a { color: #444444; }
#tags .oldest a { color: #b0b0b0;}
</style>

<div id="tags">
<?php
$now = time();
$arr = file("tagging-rare.php");
foreach ($arr as $line) {
$tagline = split(":",$line);
$px = (int)($tagline[1] / 3 + 12);
$lh = (int)($tagline[1] / 2 + 100);
$def = $now - strtotime($tagline[2]) ;
if ($def <= 432000 ) {
$def_tag = "hot";
} elseif ($def > 31536000) {
$def_tag = "oldest";
} else {
$def_tag = "old";
}

$style = "font-size:".$px."px; ". "line-height:" . $lh . "%";
$out = "<span class=\"" .$def_tag . "\" style=\"" . $style . "\">" ;
$out .= "<a target=\"_blank\" href=\"<$MTCGIPath$>mt-xsearch.cgi?blog_id=<$MTBlogID$>&delimiter=,&search_key=Tagwire&search=" . $tagline[3] . "\">" . $tagline[0] . "</a>";
$out .= "</span>\n";
echo $out;
}
?>
</div>


青文字は、フォントサイズ、行間ですので、
適宜調整してください。


では、実際にできあがったもので比較してください。
(追記参照)

「オリジナル」 → TAG of 'Project Multiburst'

「PHPでのTAGGING」 → TAG of 'Project Multiburst' with PHP


といった感じです。


現在、いちを「バージョン1.00」としています。

-----------------------
2006/10/10 追記

MT3.3になったことで、ネイティブなタギングに移行しました。