Movable Typeで3年前以前の記事一覧を表示したいということがあったので、実装方法をメモしておきます。
サンプルコード
実装想定としては、最新記事の公開年数を基準として3年前以前の記事一覧を表示(最新記事の公開が2024年の場合、2021年以前の記事一覧を表示)という形になります。
例として、以下のような記事データを用意します。
- 記事G (2024年公開)
- 記事F (2023年公開)
- 記事E (2022年公開)
- 記事D (2021年公開)
- 記事C (2020年公開)
- 記事B (2019年公開)
- 記事A (2018年公開)
まずは通常の記事一覧を表示してみます。
インデックステンプレートで以下の内容を記述します。
<mt:SetVars>totalEntry=<mt:BlogEntryCount></mt:SetVars> <mt:Entries lastn="$totalEntry"> <p><mt:EntryTitle>(<mt:EntryDate format="%Y">年)</p> </mt:Entries>
これで記事の一覧が表示できました。
<p>記事G(2024年)</p> <p>記事F(2023年)</p> <p>記事E(2022年)</p> <p>記事D(2021年)</p> <p>記事C(2020年)</p> <p>記事B(2019年)</p> <p>記事A(2018年)</p>
次に3年前以前の記事一覧の表示です。
<mt:Ignore><!-- 記事の一覧表示に使用する情報の取得 --></mt:Ignore>
<mt:SetVars>totalEntry=<mt:BlogEntryCount></mt:SetVars>
<$mt:SetVar name="firstCheckFlag" value="false"$>
<mt:Entries lastn="$totalEntry">
<mt:Ignore><!-- 先頭の記事の年から、基準にする年数を取得 --></mt:Ignore>
<mt:EntriesHeader>
<mt:SetVars>baseYear=<mt:EntryDate format="%Y"></mt:SetVars>
<$mt:SetVar name="baseYear" value="3" op="-"$>
</mt:EntriesHeader>
<mt:Ignore><!-- ループ中の記事の年数が基準年以下(古い)の場合 --></mt:Ignore>
<mt:SetVars>thisYear=<mt:EntryDate format="%Y"></mt:SetVars>
<mt:If name="thisYear" le="$baseYear">
<mt:Ignore><!-- 1回目の場合のみ変数に格納 --></mt:Ignore>
<mt:If name="firstCheckFlag" eq="false">
<mt:SetVars>offsetNo=<$mt:Var name="__counter__" value="1" op="-"$></mt:SetVars>
<$mt:SetVar name="firstCheckFlag" value="true"$>
</mt:If>
</mt:If>
</mt:Entries>
<h1><$mt:Var name="baseYear"$>年以前の記事</h1>
<mt:Entries lastn="$totalEntry" offset="$offsetNo">
<p><mt:EntryTitle>(<mt:EntryDate format="%Y">年)</p>
</mt:Entries>
基本的にはコード内のコメントに記載している通りですが、baseYearが3年前の年を取得していて、ループしている記事の年と比較して表示する記事の設定を行っています。
3年前以外の数値にする場合、8行目のvalueの値を変更してください。
これで3年前以前の記事一覧を表示することができました。
<h1>2021年以前の記事</h1> <p>記事D(2021年)</p> <p>記事C(2020年)</p> <p>記事B(2019年)</p> <p>記事A(2018年)</p>
コメントが承認されるまで時間がかかります。