【メモ】MTでカテゴリー+年度別アーカイブを出力する
- 2011年3月23日 12:00
- Category : webdesign
- Tags :MovableType, tips

先月リリースしたサイトで、お知らせ記事のサイドバーに、年度別アーカイブへのリンクを貼って欲しいとリクエストされたので、1ヵ月ぐらいずっと方法を調べていたのですが、やっと今日わかりました。
最終的には、今日検索していて見つけた「【MT5/Movabletype5】 Movabletype5で制作を行っているのですが.. - 人力検索はてな」のページのコードを使いました。ありがとうございます。
年度別アーカイブを出力するプラグイン
年度別アーカイブを出力するプラグインは2つあります。
- アーカイブ拡張プラグインβ版(説明ページ1・説明ページ2)
- FiscalYearlyArchivesプラグイン
FiscalYearlyArchivesプラグインのほうは、全部のカテゴリをまとめたページが出力されるので、今回はアーカイブ拡張プラグインを使いました。
その記事が所属するカテゴリーの年度別アーカイブリストを出力する
今回やりたいことは、カテゴリー別記事一覧ページと、個別エントリーページのサイドバーに、その記事が所属するエントリーの、年度別アーカイブのページへ、リンクを貼ることです。
いろいろ検索してみると、「年度別の記事リストを出力」「年度別アーカイブをさらに月別に分ける」というのはたくさん見つかったのですが、そこまで細かくなくて良いのです。
カテゴリー別記事一覧ページに書いたコード
アーカイブ拡張プラグインのサンプルコードを見ながら、同じように記述して、タイトルの後ろに記事の件数を入れるようにしました。
<mt:ArchiveList archive_type="Category-FiscalYearly">
<mt:ArchiveListHeader>
<ul>
</mt:ArchiveListHeader>
<li><a href="<$mt:ArchiveLink$>"><$mt:ArchiveFiscalDate format="%Y年度"> (<$mt:ArchiveCount$>)</a></li>
<mt:ArchiveListFooter>
</ul>
</mt:ArchiveListFooter>
</mt:ArchiveList>
アーカイブタイプの”Category-FiscalYearly”は、アーカイブ拡張プラグインで提供され、年度別+カテゴリー別のアーカイブを出力します。
同じくデータフォーマットの”%Y年度”は、該当年度のラベルになります。これは指定した方が便利です。使用例がこちらのページに記載されています。
個別エントリーアーカイブへの実装方法
さて、上と同じコードを個別エントリーアーカイブに入れると、意図した通りに出力されませんでした。恐らく、個別エントリーアーカイブのページは、特定のカテゴリ以下に入らないケースがあるからではないかと思うのですが‥複数カテゴリに所属しているとか、そんなケースがあり得るので、うまく出力されなかったのではと推測しています。
そこで、はてなの質問ページにあったコードと同じ内容のモジュールを作成して、テンプレートの中に入れてみました。
<MTIf tag="EntryCategory">
<MTSetVarBlock name="e_cat">
<mt:EntryCategories glue=','<$mt:CategoryLabel$></mt:EntryCategories>
</MTSetVarBlock>
</MTIf>
<MTUnless name="e_cat">
<MTElse>
<mt:IfArchiveTypeEnabled archive_type="Category-FiscalYearly"><mt:ArchiveList archive_type="Category-FiscalYearly">
<mt:ArchiveListHeader>
<ul>
</mt:ArchiveListHeader>
<MTSetVarBlock name="c_name"><$mt:ArchiveTitle$></MTSetVarBlock><MTSetVarBlock name="c_name2"><$MTVar name="c_name"regex_replace="/:.+/",""$></MTSetVarBlock>
<MTIf test="$e_cat =~ $c_name2">
<li><a ="<$mt:ArchiveLink$>"><$mt:ArchiveFiscalDate format="%Y年度"
</a> (<$mt:ArchiveCount$>)</li>
</MTIf>
<mt:ArchiveListFooter>
</ul>
</mt:ArchiveListFooter>
</mt:ArchiveList>
</mt:IfArchiveTypeEnabled>
</MTUnless>
元のコードでは、Category-Yearly となっているところを、プラグインを使って年度別アーカイブにリンクさせるために、Category-FiscalYearlyと書き換えてあります。
このコードでウィジェットテンプレートを作成し、個別エントリーアーカイブのページに
<$mt:Include widget="属するカテゴリの年別アーカイブ"$>
として入れてみると、思った通りの表示になりました。
や、やっとできた‥‥!
悩んだところ
この方法だと、
- カテゴリーアーカイブ
- 個別エントリーアーカイブ
で、それぞれ違うコードを用意しないといけないのですが、やっぱりテンプレートの種類が違うから、全部のテンプレートで同じコードを使うことはできないんでしょうかね。
例えば、「サイドバー」というテンプレートモジュールを作っておいて、その中で
- カテゴリーアーカイブの時はAのコードを出力
- 個別エントリーアーカイブの時は、Bのコードを出力
という条件分岐を入れておけばいいのでしょうか(処理が遅くならないのかな)。
でも、何とかクリアできたのでホッとしました。
このコードはスニペットに入れておこうと思います。それにしても、WordPressの場合はどうやって解決すればいいんだろう?
Trackback URL :
- location
- Sapporo, Japan
- job
- Webデザイナー、コーダー
- 趣味
- 写真と猫
札幌でフリーランスのWebデザイナーをしています。このブログは、主に日常の出来事とWeb制作に関するメモを書いています。



