MUTTERの右メニューに、エントリのランダム表示を追加してみました。
一応、過去ログからランダムにピックアップされたエントリーが5件表示されています。
この導入に関してメモ。
基本的には、MovableType用のプラグイン、MTRandomEntriesを使用しています。
これをプラグインとして導入することで、ランダムにエントリをピックアップするタグを追加できます。
導入は非常に簡単で、上記サイトからプログラムをダウンロードし、
pluginsディレクトリに入れるだけ。
実際のタグの表記に関してもシンプルで、
<MTRandomEntries lastn="5">と、MTEntries タグの代わりに使うことで、
<a href="<$MTEntryPermalink$>"><$MTEntryTitle$></a>
</MTRandomEntries>
しかし、このプラグインには、仕様上どうしようもない欠点があります。
というのは、テンプレートに記入すると言うことは、ランダムにピックアップされるのは、
『再構築』を行ったタイミング、ということ。
僕はユーザがアクセスするたびに違うエントリを参照させたかったので、これでは不十分です。
と言うわけで、僕が使ったのは、PHPプログラムを使う方法。
例えば、上で設定したテンプレートの出力ファイル名を、
random.datのように指定します。
そしてある一定数書き出しておいて、それをデータベースのように使います。
実際にテンプレートとして使うのは、このテンプレートではなく、
たとえば以下のような処理を行うプログラム。
$RamdomEntries = array();これはどのような処理をしているかというと…
$fh = fopen("/www/ramdom.dat","r");
flock($fh, LOCK_EX);
while(!feof($fh)){
$buf = trim(fgets($fh));
if($buf){
array_push($RamdomEntries,$buf);
}
}
flock($fh, LOCK_UN);
fclose($fh);for($i = 0;$i < 5;$i++){
$start = $i * 40;
$end = $start + 39;
$rid = rand($start,$end);
print $RamdomEntries[$rid];
}
以上のような手順を踏むことにより、
ランダムの部分を、疑似動的に作成しています。
もしかしたら、MTの動的表示をしているサイトでは、もう少し違った方法で実現できるかもしれませんが…
とりあえず静的表示のサイトではこんなもんではないでしょうか。
追記。【2005-02-11】
ランダムにアイテムをピックアップするプログラムをもう少し短くしてみました。
$RamdomEntries = 0;
$fh = fopen("/www/mutter/ramdom.dat","r");
flock($fh, LOCK_EX);
while(!feof($fh)){
$buf = trim(fgets($fh));
if($buf){
if((rand(0,200) % 10) == 0){
$RamdomEntries++;
print $buf;
}
if($RamdomEntries >= 5){break;}
}
}
flock($fh, LOCK_UN);
fclose($fh);
エントリ数も2000を超えてしまって、
自分でも読みたいエントリが見つからない、という状況があるので…
これで偶然その時に出会ったエントリを読んでいくのも面白いかな、と思った次第。
興味があったら見てみてください。
(PCの、INDEX/CATEGORY/MONTHLYから見ることができます)