またまたカテゴリー整理

どうにも長ったらしいカテゴリーリストが気に入らないので、整理。

まず、どうやらサブカテゴリーはいらないようなので削除。合わせていくつかのカテゴリー名を変更。それから、サイドメニューとして列挙表示すると結局長ったらしくなるので、エントリー表示側にタグクラウド表示する。これは以前試しで作ったものを一部修正しただけ。

以前のカテゴリークラウドでは XML を MT テンプレートを利用して作って、それを XMLHttpRequest で読み込んで…ってやってたんだけど、別に XML する必要はなかった。同じドメインだし、JSON っぽいテンプレートで js ファイルをつくって、<script>タグから読み込めばいい。CSS は Perl の HTML::TagCloud が吐き出すものを利用。

なんというか、自分には MT が向いてない気がしてきた。MT じゃなきゃいけない理由も見つからないし、固定的な分類方法もいらついて仕方がない。かといって、wiki ってのも微妙。tDiary とかがいいのかな?分類を自動的にしてくれて、Emacs から投稿できるツール。ついでに、吐き出すフィードも分類できると嬉しかったり。それと、分類を一括で処理できるツールがついてるとさらに嬉しい。

カテゴリを整理してて思ったのは、カテゴリを無くすと困るけど、ブログ自体にどういう情報があるのかっていう検討がつく情報があれば代用できるなってこと。エントリーごとにメタデータくっつけておいて、それを収集して整形したものをトップページあたりに貼付けられればそれでいい気がする。そういう意味で、trackword はいい感じ。実際に求められた検索語(記事のメタデータ)を列挙する訳で、つまりこのブログに何が書かれているかが分かりやすい。ついでに、trackword 経由のトラフィックも結構いい割合。調べてないけど、集積データを加工できるならそれで代用してカテゴリ撤去が出来るかも。

MT でメモってのはやっぱ微妙だなぁ。

HTML テンプレート

<!-- Category Cloud -->
<h2 class="module-header">カテゴリー</h2>
<br />
<div id="category-cloud"></div>
<script src="/MT/js/TagCloud.js" type="text/javascript"></script>
<script src="/MT/js/categoryCloud.js" type="text/javascript"></script>
<!-- Category Cloud -->

データ JSON 用テンプレート(category-json.js)

var categoryJSON = [
<MTSubCategories>{
    "link": "<$MTCategoryArchiveLink$>",
    "title": "<MTCategoryLabel>",
    "count": "<$MTCategoryCount$>"
},
</MTSubCategories>
{
    "link": "",
    "title": "",
    "count": ""
}
];

カテゴリクラウド表示 javascript(categoryCloud.js)

/**
 *  カテゴリクラウドを表示
 *
 *  @param categories 
 */
function displayCategoryCloud(categories) {

    var tagCloud = new TagCloud;
	
	for (var i=0; i<categories.length-1; i++) {
		link  = categories[i]["link"];
		title = categories[i]["title"];
		count = new Number(categories[i]["count"]);
		tagCloud.add(title, link, count);
	}
	var html = tagCloud.html();
	var container = document.getElementById('category-cloud');
	container.innerHTML = html;
}

displayCategoryCloud(categoryJSON);

タグクラウド作成 javascript(TagCloud.js)

/**
 *  CPAN Module "HTML::TagCloud" Javascript version
 *
 *  =From HTML::TagCloud=
 *  This module is free software; you can redistribute it or modify it
 *  under the same terms as Perl itself.
 *  ==
 *
 *  @author KoshigoeBushou <KoshigoeBushou@gmail.com>
 */
 
/**
 *  Constructor
 */
function TagCloud() {
	this.size   = 0;
	this.clouds = new Array(100);
}

(function(self) {
	/**
	 *  Add cloud
	 *
	 *  @param String tag
	 *  @param String url
	 *  @param Int    count
	 */
	self.add = function(tag, url, count) {
		var cloud   = new Array(3);
		cloud["tag"]   = tag;
		cloud["count"] = count;
		cloud["url"]   = url;
		this.clouds[this.size] = cloud;
		this.size++;
	}

	/**
	 *  Make CSS
	 *  
	 *  @return String css
	 */
	self.css = function() {
		var css = '';
		for (level=0; level<=24; level++) {
			var fontSize = 12 + level;
			css += "span.tagcloud" + level + " {font-size: " + fontSize + "px; margin: 10px 1px;}\n";
			css += "span.tagcloud" + level + " a {text-decoration: none;}\n";
		}
		return css;
	}
	
	/**
	 *  Sort function
	 *
	 *  @param  Bool  mode
	 *  @return Array
	 */
	self.sort = function() {
		var complete = false;
		while( !complete ) {
			complete = true;
			for( i=0; i<this.size-1; i++ ) {
				if ( Number(this.clouds[i]["count"]) < Number(this.clouds[i+1]["count"]) ) {
					var buf          = this.clouds[i];
					this.clouds[i]   = this.clouds[i+1];
					this.clouds[i+1] = buf;
					complete = false;
				}
			}
		}
	}
	
	/**
	 *  Make HTML
	 *
	 *  @param  Int    limit
	 *  @param  
	 *  @return String html
	 */
	self.html = function() {
	
		if (this.size == 0) {
			return "";
		} else if (this.size == 1) {
			var tag = this.clouds[0]["tag"];
			var url = this.clouds[0]["url"];
			return '<span class="tagcloud24"><a href="' + url + '">' + tag + '</a></span>' + "\n";
		}
		
		this.sort();
		
		var min = Math.sqrt(this.clouds[this.size-1]["count"]);
		var max = Math.sqrt(this.clouds[0]["count"]);
		var factor = 24 / (max - min);
		var html = "";
		for (i=0; i<this.size; i++) {
			var tag   = this.clouds[i]["tag"];
			var count = this.clouds[i]["count"];
			var url   = this.clouds[i]["url"];
			var level = Math.floor((Math.sqrt(count) - min) * factor);
			html +=  '<span class="tagcloud' + level + '"><a href="' + url + '"> ' + tag + ' </a></span>' + "\n";
		}
		return html;
	}
	
	/**
	 *  Make HTML and CSS
	 *
	 *  @return String html
	 */
	self.html_and_css = function() {
		var css  = this.css();
		var html = "<style>\n" + css + "</style>";
		html += this.html();
		return html;
	}
})(TagCloud.prototype);
プロフィール

このブログ記事について

このページは、koshigoeが2006年2月12日 23:59に書いたブログ記事です。

ひとつ前のブログ記事は「強敵 101」です。

次のブログ記事は「del.icio.us post on 2006-02-12」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。