MTOnThisDayを勝手に改造した

2008年03月03日 公開

「ところで2年前は......」というような、過去の記事を手動でほじくり返す……これ、実に面倒くさい。意外に時間がかかるので、やめちゃいたくなる。

そんなの自動的になんとかなるはずなのでグーグってみると、ある。MTOnThisDayというプラグイン

これが簡単なのはいいのだけれども、記事の「作成日」を参照しちゃうのだ。フツーに考えると全然モンダイ無いんだけれども、ブログ記事の作り方がひねくれていると使いづらい。

とりあえずメモとして記事作成して保留、そのメモをふくらまして記事として公開することがあります。だから、「作成日」は「公開日」よりもだいぶ昔だったりすることがある。

なので、このプラグインが「作成日」を参照するのではなくて「公開日」を参照しててくれたらよかったのになー......と思う、今日この頃なわけでした。

このプラグインは、だいぶ古い2002年のプラグインなのにいまだに動くっつーのもすごいけど、ということはそんなに複雑なことをしていない、ということだろう。MT3シリーズからMT4になって、データベースのテーブルがかなり増えたんだそうです。もしかして以前のMTには作成日と公開日と編集日、というそれぞれ独立したフィールドが無かったのかもしれない。あり得る。

entryテーブル

というわけで、その気もないのに、データベースの「mt_entry」というテーブルをひっくり返してみる。すると、「entry_created_on」と、「entry_modified_on」という日付フィールドを発見。これ、参照できそう。でも、作成日と編集日を記憶するだけに思えるのだ。これでは。

他に日付を憶えとくフィールドは無いのかとよく目をこらしてみると、もひとつ「entry_authored_on」という日付フィールドを発見。こうなると、英語のセンスで推測するしかないわけか......。

  • create ── 作成
  • author ── 作成
  • modify ── 編集

だよねぇ? createもauthorも、作成なんぢゃん。しかも辞書ってみると、authorの方がcreateよりも、より創始っぽい気がするんだけど?

それでは、プラグインのソースを見ると、どーなってんだ?

というわけで、onthisday.plを開いてみる。拡張子が「.pl」なのでperlファイルです......っていう程度の知識でナニがわかるってんだ!! でも、わかるかもしれない。取り敢えず、ソースを「created_on」で検索する。

7個の項目が、現在のドキュメント内に見つかりました

ををぉっ!! これ、行けちゃうんぢゃね? 構わず全部「authored_on」に変換しちゃいましょう。気が変わらないうちに、保存して、アップロードぉっ→→

おっと、これだけではダメなんだ。本体のテンプレートにも書き加えましょう。本家では、日付アーカイブを吐き出しておいてそれにリンクするようにしているようです。でも、今更日付アーカイブなんて吐かせたくない。もちろん、月アーカイブにリンクしてもいいんだけれども、そんなの意味ない。やぱし「○年前の今日、こんなこと書いてた」っていうところにダイレクトにリンクするからおもしろいんぢゃないか?

なので、取り敢えず、こうしてみたよ。

<MTOnThisDay>
<div class="lastyear">
ところで、過去にはこんなことを書いていました。
<ul>
<MTEntries>
<li><$mt:EntryDate$> <a href="<$mt:EntryPermalink$>"><$mt:EntryTitle$></a></li>
</MTEntries>
</ul>
</div>
</MTOnThisDay>

やろうと思えば、例えば <$mt:EntryExcerpt$>とかを差し込んで概要を表示することだってできるし、<mt:DateHeader>に挟んで同じ日付を繰り返し表示しないということもできるでしょう。好みのモンダイでしょう。すごい。カンでMTプラグインを改造しました。どつぼにはまらなきゃいいのですが。

藤本壱さんもこの件について取り扱っておられました

【追記】2008.03.04

ソースを見て「はてなー?」って思っていましたが、現物を見て納得しました。これは「過去記事」だけに対するリンクだけでなく、再構築をすると同日付の未来記事にもリンクされます。ただし、再構築をしたときだけです。

世の中、だんだんと複雑になってゆく雲行きです。

.