linkerは「人と人」「人と情報」「人と物」をつなぐデザインユニットです。

MTで複数のアーカイブの挙動をまとめて変えたい

100211.jpg

みなさん、こんにちは、まーしーです
週の途中に祝日があるとなんかホッとしますね。

今日はご存じの方もいらっしゃるかもしれませんが、個人的に知らなかったので情報共有と言うことで。

各アーカイブテンプレートには変数archive_classが設定されている

MTのアーカイブに指定されている予約変数を使ってアーカイブごとにそれぞれの挙動を分けることが多かったのですが、複数でまとめてやる場合どうしたものかと思っていました。

ドキュメントをよく読んでみると

さらに全てのアーカイブテンプレートには、archive_class という変数が設定され、各々の出力するアーカイブをあらわす名前が値として代入されます。各アーカイブごとに代入される値は、以下の表を参照ください。

アーカイブテンプレートに設定される予約変数
http://www.movabletype.jp/documentation/designer/archive-template-variable.html

ということでarchive_classという変数にアーカイブ名が指定されているとのこと。なので

<mt:if name="archive_class" like="^(entry_template | datebased_monthly_archive)">
hogehoge
</mt:If>

と書くことで月別アーカイブとブログ記事という複数のアーカイブで挙動を何かする、という事が可能になりますね。

MTではアーカイブごとに予約変数が指定されている

MTのアーカイブテンプレートを使う際には予約変数があらかじめ指定されているのでそれを元に条件分岐するとアーカイブの種類ごとに挙動を変えることが可能です。

例えば簡単に書くとこんな感じです。

<mt:if name="archive_listing">
hogehoge
</mt:If>

全てのアーカイブの挙動を制限出来ます。これらの予約変数については

アーカイブテンプレートに設定される予約変数
http://www.movabletype.jp/documentation/designer/archive-template-variable.html

を参照してもらうと色々と指定されているものがわかるかと思います。
PDFも用意されているのでそれを見るのもいいですね。

個人的には

のリファレンスを見ることが多いです。

複数のアーカイブで挙動を変えるときに少しはまった

さて、これらのアーカイブごとに挙動を分けるとします。
・アーカイブ全体であればarchive_template
・月別アーカイブであればdatebased_monthly_archive
こんな感じを使えば条件分岐できます。

たとえばウェブページ以外のアーカイブ全てでという場合は

<mt:Unless name="page_template">
hogehoge
</mt:Unless>

とかけばいけそうですが、月別アーカイブとブログ記事の場合どうするか?と。

<mt:If name="entry_template">
hoge1
</mt:If>
<mt:If name="datebased_monthly_archive">
hoge1
</mt:If>  

と同じものを書くのは少し無駄な気がしたのですが

<mt:If name="entry_template OR datebased_monthly_archive">
hoge1
</mt:If>

こんな書き方ができないものか?と考えていたわけです。

ということで、先に書いたようにドキュメントを見てみると各アーカイブテンプレートにはarchive_classという変数が設定されてました。
今更ながら気づいたので情報の共有でも。