新サイト(はてなブログ)

「このカテゴリの最新記事一覧」を表示するプラグイン「MTTagInvoke」

以前からずっと設置したくてできなかった、個別ページにおける、そのカテゴリの最新記事一覧。
やり方としては、

<MTEntries lastn="6" category=<$MTCategoryLabel$>
で行けそうなカンジはするのですが、どうやらこの「category」属性は変数を受け付けないらしいです。何度やっても同カテゴリが表示されない。というわけで、ずっと諦めてました。
で、どうやら新しいカテゴリアーカイブのテンプレートを作成したら上手くいくらしい、という事を聞きつけて、やってみた。結果的には上手く行ったのだが、なんともスマートじゃない。
というわけで、ぐぐった結果、::: CROQU ::: : 「This Category Entries (easy)」さんの所で素晴しいプラグインをハケーン、即導入となりましたので、解説しようと思います。以下、先の「スマートじゃない」方法と合わせて解説しますです。


プラグイン使用の方法

なぜ、プラグインを使用してまでしないと実現できないかは上に書いたとおりです。残念ながら現状のmovabletypeでは実現できません。
そこで便利なプラグインの登場です。このMTTagInvokeというプラグインは簡単に言うと、category等の属性に変数を使えるようにするプラグインなのです。
これで個別ページ(Indivisual archives)の属するカテゴリの一覧を抜き出せるという事になります。面倒ですね。
■MTTagInvoke 0.9
↑ここでプラグインをダウンロード、解凍します。
MTTagInvoke.pl
というファイルが生成されるのでMTのpluginフォルダに入れます。
次に、個別ページのテンプレートに以下の文を加えます。
<!– カテゴリの最新記事ハジマリ –>
<div class="sidetitle">このカテゴリの最新記事</div>
<div class="side">
<MTTagInvoke tag_name="MTEntries">
<MTTagAttribute name="category"><$MTEntryCategory$></MTTagAttribute>
<MTTagAttribute name="lastn">6</MTTagAttribute>

<MTTagContent>
<a href="<$MTEntryPermalink$>"><$MTEntryTitle$></a><br />
</MTTagContent>
</MTTagInvoke>
</div>
<!– カテゴリの最新記事オワリ –>
これで、個別ページにおける、「このカテゴリの最新6つの記事」が実現できました。一体これはどういうことなのか?
少しだけ解説します。
MTTagInvoke
tagnameで指定したMTタグで有効です、ということ。この場合、MTEntriesというタグに関することだということを宣言するだけでなく、実際にはとしなくてならない部分の記述も不要になる。便利!
MTTagAttrivute
nameで指定したアトリビュート(変数)がMTタグに置き換わる。
ここでは categoryの変数にMTEntryCategoryを代入しなさい、ということ。つまり個別ページのカテゴリを随時代入することができるのです。すげえ。
同様にlastnも5を代入です。MTもこれがデフォで出来ると便利なのにね。
MTTagContent
上記宣言を元に、実際に表示させたい部分にこのタグを使います。
上でも書いた通り、MTEntries等のタグも必要ありません。この辺がこのプラグインの凄いところですね。

プラグイン未使用の方法

プラグインに頼りたくないアナタにうってつけの方法があります。しかしスマートじゃない。何故この方法がスマートじゃないのか、それは新しいテンプレートを作成しなくてはならないところなのです。
「最新記事」ということは、エントリ投稿毎に生成されるわけですので、ただでさえ重たいMTのリビルドにも影響します。よって、ただでさえ重たい当サイト等はこの方法を絶対にとるべきではなかったのです。
では、その方法を。
1.php化
MTをphp化してない方はコチラ↓のエントリを見てphp化を行いましょう。
■MTのPHP化とページ分割
インクルード、というファイルの埋め込みを行わなくてはならない為のphp化です。やっておいて損はありません。
2.新しいテンプレの作成
MTの管理画面に行き、
テンプレート⇒新しいアーカイブテンプレートを作る
テンプレートの名前⇒CategoryRecentEntry(テキトー)
このテンプレートにリンクするファイル⇒空欄
テンプレートの中身は↓このように。
<div class="sidetitle">このカテゴリの最近記事</div>
<div class ="side">
<MTEntries lastn="5">
<a href="<$MTEntryPermalink$>"><$MTEntryTitle$></a><br />
</MTEntries>
</div>
アーカイブの設定
新しいアーカイブテンプレートの設定をしないといけませんね。
ウェブログの設定⇒アーカイブの設定
で、よく見ると、カテゴリーのセクションに先のCategoryRecentEntryが増えているはずですので、アーカイブ・ファイルのテンプレートのところに、
inc/cr_<$MTCategoryLabel$>.php
と書きます。これはあくまでも一例です。incというフォルダの中にファイルを生成するなら↑のように書きます。これは好みで。inc/はなくても構いません。
そして保存、です。
リビルド
いよいよリビルドです。ドキドキですね。エラーがでたら、最初からやり直しです。泣きながら再度チャレンジしてみて下さい。
設置
ここで、実際の個別ページ(indivisual archives)に設置します。ここで、phpのインクルードを利用するのです。
テンプレートモジュール化を施したことがある方はすんなりいくでしょう。
先ほどのcr_(カテゴリ).phpというファイルを本ファイルに貼り付けてやりましょう
<? include "(パス)/inc/cr_<$MTEntryCategory$>.php"; ?>
これだけです。phpサイコーですね。モジュール化サイコーですね。

まとめ

こんなことをしないと、思ったことができないのかムーバブルタイプは!とお怒りの方も大勢いらっしゃることと思います。
しかし、このカスタマイズこそ、movabletypeの醍醐味なのです。面倒くさいのがイヤな方はホスティ系のweblogがありますので、そちらでやるべきです。
チマチマ弄ってちゃんと思い通りになったときの爽快感はたまりませんんよ(笑
ブログにおいて、一見さんが一番訪れる可能性が高い個別ページ。そこから次なるサイト内ページを閲覧していただく為に、必要不可欠な別ページ(トップページ含む)へのリンク。
これをいかに上手く配置するかが、ブログのページ作成の重要な課題だと、僕は思うのですよ。
以下、サイト内関連ページ
■MTのPHP化とページ分割
■あなたのmovabletype、重たくないですか?(テンプレートモジュール化)