「銀杏の木」の左側に、タグクラウドを追加した。
任意で記事に設定する Keys タグのキーワードが何個設定されているかをカウントして表示し、リンクをクリックするとその言葉で検索する形にしてみた。 Keys タグに出てきた数なので、実際の記事中に出現する回数ではない。
この追加のために、 rnote.php 本体と、プラグインの navitools.php, スキンファイルの html.side.skin に変更を加え、 file.cache に書き込まれるエントリに、 Keys タグの内容も追加するようにして実現させた。
navitools.php のプラグインには、新たに、 “tag_cloud” を追加し、
<%=$plugin name="navitools" func="tag_cloud" opt="min_count=3,max_size=200" %>
のような形で呼び出せるようにした。追加した tag_cloud は下の通り。
//==========================================================================
// タグクラウド Added by Crabfish
//==========================================================================
function tag_cloud($opt)
{
global $g_keyslist; // キーごとの設定回数情報
//echo 'opt=['.$opt.']<br />';
//opt に設定されている値を取得する。
$min_count = 1;
$max_size = 200;
if (isset($opt)) {
$tok = strtok($opt, ",");
while ($tok) {
list($lvalue, $rvalue) = explode("=", $tok, 2);
//echo 'lvalue=['.$lvalue.'] rvalue=['.$rvalue.']<br />';
switch ($lvalue) {
case 'min_count':
$min_count = intval($rvalue);
if ($min_count < 1) $min_count = 1;
break;
case 'max_size':
$max_size = intval($rvalue);
if ($max_size < 100) $max_size = 100;
break;
}
$tok = strtok(",");
}
}
//echo 'min_count=['.$min_count.']<br />';
//echo 'max_size=['.$max_size.']<br />';
$min = 65536;
$max = 0;
//キーの出現回数の最大値、最小値を取得する。
foreach ($g_keyslist as $k => $v) {
if ($max < $v) $max = $v;
if ($min > $v) $min = $v;
}
$dif = (($max - $min) > 0) ? ($max - $min) : 1;
$i = 0;
$rep = '';
foreach ($g_keyslist as $k => $v) {
if ($v >= $min_count) {
$rep .= '<span class="key"><a style="font-size: '.(($v-$min)/$dif*100+($max_size-100)).'%; line-height: 150%; white-space: nowrap;" href="/ichounoki/rnote/';
$rep .= MakeLinkUrl().'?m=search&cache=off&q='.$k.'&u=&cmt=1∧=1';
$rep .= '">'. $k . '</a></span> ';
}
$i++;
}
return $rep;
}
//==========================================================================
// タグクラウド Added by Crabfish
//==========================================================================
function tag_cloud($opt)
{
global $g_keyslist; // キーごとの設定回数情報
//echo 'opt=['.$opt.']<br />';
//opt に設定されている値を取得する。
$min_count = 1;
$max_size = 200;
if (isset($opt)) {
$tok = strtok($opt, ",");
while ($tok) {
list($lvalue, $rvalue) = explode("=", $tok, 2);
//echo 'lvalue=['.$lvalue.'] rvalue=['.$rvalue.']<br />';
switch ($lvalue) {
case 'min_count':
$min_count = intval($rvalue);
if ($min_count < 1) $min_count = 1;
break;
case 'max_size':
$max_size = intval($rvalue);
if ($max_size < 100) $max_size = 100;
break;
}
$tok = strtok(",");
}
}
//echo 'min_count=['.$min_count.']<br />';
//echo 'max_size=['.$max_size.']<br />';
$min = 65536;
$max = 0;
//キーの出現回数の最大値、最小値を取得する。
foreach ($g_keyslist as $k => $v) {
if ($max < $v) $max = $v;
if ($min > $v) $min = $v;
}
$dif = (($max - $min) > 0) ? ($max - $min) : 1;
$i = 0;
$rep = '';
foreach ($g_keyslist as $k => $v) {
if ($v >= $min_count) {
$rep .= '<span class="key"><a style="font-size: '.(($v-$min)/$dif*100+($max_size-100)).'%; line-height: 150%; white-space: nowrap;" href="';
$rep .= MakeLinkUrl().'?m=search&cache=off&q='.$k.'&u=&cmt=1∧=1';
$rep .= '">'. $k . '</a></span> ';
}
$i++;
}
return $rep;
}
min_count は、タグクラウドに表示させる最小出現回数。これ未満の回数のものは表示しない。
max_size は、タグクラウドを表示する際に、タグの出現回数に応じてフォントサイズを変えるようにしたので、その際の最大表示パーセント値。最小サイズは100%固定にした。
タグクラウドは一時期のように流行ってはいないが、実装作業は楽しかった。