はじめに

ムーバブルタイプの記事内で関連記事リストを作り出す方法が知りたくて調べたが、まとめられた記事が見当たらなかったので調べてまとめてみた

とりあえずどんな手順が必要かを考えてみた

  • 記事内でMTタグを使う方法
  • その記事に使われているメインカテゴリーの取得
  • 取得したメインカテゴリーと同じ記事の取得

実際組んでみたところ、上記の三つが解決できれば記事内の好きなところに配置することができる

記事内でMTタグを使う方法

デフォルトの状態で記事を書くときに、記事内に mttagを書いても無視されてそのまま出力されてしまう。

どうすればいいのだろうかと、リファレンスを探したら普通にあった。

記事内であれば、多くの場合記事テンプレートを開き、Entrybody のところを、<mt:EntryBody mteval="1"> とすればいい。こうすることで記事の本文中に MTタグを利用することができる。

記事に使われているメインカテゴリーの取得

記事内に以下のコードを書くとメイン(プライマリ)に指定しているカテゴリーを取得することができる。


<mt:EntryPrimaryCategory>
	<mt:SetVars>
	p=<$mt:CategoryLabel$>
	id=<<$mt:BlogID$>
	</mt:SetVars>
	<h1><$mt:CategoryLabel$>関連記事</h1>
</mt:EntryPrimaryCategory>

上記のコードをざっと説明すると、mt:EntryPrimaryCategory で表示中(記述中)の記事に指定したメインのカテゴリーを取得することができる。ブロックタグなので、CategoryLabel を指定することで実際に出力される。

setvars に入れ込んだ変数p は記事のメインカテゴリ、idは現在のブログIDを代入している。なお、mt:var を使わなかったのは、valueにmtタグでの代入の仕方がわからなかったので。varsの方なら、mtタグでも代入が行える。話を戻すが、setvarsは後のリストを作る動作で必要となる。

取得したメインカテゴリーと同じ記事の取得

最後に取得した記事のカテゴリー情報を元にリストタグで同じカテゴリーを吐き出す


<ol>
<mt:MultiBlog include_blogs="$id">
<mt:Entries category="$p">
<li><a href="<$mt:EntryPermalink$>"><$mt:EntryTitle$></a></li>
</mt:Entries>
</mt:MultiBlog>
</ol>

MultiBlog に関しては、指定したブログの情報を取得することができるが、現在表示しているブログ(mt7だと子サイト)のみ必要ならこれはいらない。なお、複数のブログ(小サイト)を管理して、すべてのブログなどから同じカテゴリーを取得したいなら、include_blogs をall と指定すればすべてのブログから情報を取得できる。

次の行の Entries でカテゴリーを絞っている。オプションの category をつけてカテゴリー名を指定することで同一のものだけを取得することができる。

指定の方法が$pとなっているのが重要で、mt:var の呼び出し <mt:Var name="p"> の形では指定ができない。では、どうするのか? ムーバブルタイプはPerlで書かれているので、Pealの変数として書けば動く。なので、$pとなっている。

メインカテゴリーを使って関連記事を作ったけれども、わりかし上記の点を理解できれば、色々と記事内でもできそうだな、と思う。