月別アーカイブリストを年度別に表示する
便利なネット環境のおかげで、わからないこと、困っていることを調べることで、先人に学ぶことが多いです。ほんとにありがたいことです。
しかし、その答えを得ることで、わかった「つもり」になってしまうことはとても怖いことだと感じています。
この中で、Calculationプラグインが提供されていますが、このプラグインの中身を見ると「なるほど」と感じました。ごにょごにょしなくても、こんな風にもプラグインは使えるのだな、と感じられます。
そもそも、MTには普通に四則演算をできるタグがありません。
そのため、藤本壱さんが「MTSetVar」,「MTGetVar」を利用した四則演算、文字連結を可能にするVarHandlerプラグインを提供して下さっています。
- Movable Type プラグインディレクトリ VarHandler
- 変数処理を改良するプラグイン(その1)(The blog of H.Fujimoto)
- 変数処理を改良するプラグイン(その2)(The blog of H.Fujimoto)
話を戻して・・・
「数字を-1するところだけプラグイン」ということなので、このプラグインの中身を確認したうえで、タグでどう実現されているのか、中身を追ってみました。
一言「なるほど・・・」という感じです。人のソースでいつも勉強させていただいています。
今回は引き算(足し算)に限定されていることと、グローバルフィルターを使うことで、MTタグの返す値を変数に設定することなく、値そのものを加減できることから、Calculationプラグインを使うことにしました。
ここでのポイントは
- MTunlessタグで条件を分岐する
- YYYYMM(年・月)を6桁で比較
- 年度始まりよりも小さい数の月は前年度の対象になる(Calculationプラグイン使用)
と自分で勝手に解釈し、これを見ずに自分でもやれるかチャレンジ!
全く同じものはできなかったけど、なんとかできました。(汗)
例1)4月が年度始めの年度リスト
<mt:setvar name="StartMonth" value="04">
<mt:setvar name="CompYear" value="999999">
<MTArchiveList archive_type="Monthly">
<mt:setvarblock name="YYYYMM"><$MTArchiveDate format="%Y%m"></mt:setvarblock>
<mt:if name="YYYYMM" lt="$CompYear">
<mt:if name="CompYear">
</ul>
</mt:if>
<mt:setvarblock name="FirstMonth"><$MTArchiveDate format="%m"$></mt:setvarblock>
<mt:if name="FirstMonth" lt="$StartMonth">
<$MTArchiveDate format="%Y" calculation="-1"$>年度
<ul class="module-list">
<mt:setvarblock name="CompYear"><$MTArchiveDate format="%Y" calculation="-1"$><mt:var name="StartMonth"></mt:setvarblock>
<mt:else>
<$MTArchiveDate format="%Y"$>年度
<ul class="module-list">
<mt:setvarblock name="CompYear"><$MTArchiveDate format="%Y"$><mt:var name="StartMonth"></mt:setvarblock>
</mt:else>
</mt:if>
</mt:if>
<li class="module-list-item"><a href="<$MTArchiveLink$>"><$MTArchiveTitle$></a></li>
<MTArchiveListFooter></ul></MTArchiveListFooter>
</MTArchiveList>
あと、今回のケースというの実際の業務でいうと、企業のIR情報なんかに適するのかな、と思います。
ただ、これは一例で、降順のパターン。
逆に、企業の歴史や業績を一覧にするときなんかは、昇順のパターンとしても考えられるのではなかろうか?
というわけで、昇順パターンはこちら。
例2)4月が年度始めの年度リスト(昇順)
<mt:setvar name="StartMonth" value="04">
<mt:setvar name="CompYear" value=" 000000">
<MTArchiveList archive_type="Monthly" sort_order="ascend">
<mt:setvarblock name="YYYYMM"><$MTArchiveDate format="%Y%m"></mt:setvarblock>
<mt:if name="YYYYMM" ge="$CompYear">
<mt:if name="CompYear">
</ul>
</mt:if>
<mt:setvarblock name="FirstMonth"><$MTArchiveDate format="%m"$></mt:setvarblock>
<mt:if name="FirstMonth" ge="$StartMonth">
<$MTArchiveDate format="%Y" calculation=""$>年度
<ul class="module-list">
<mt:setvarblock name="CompYear"><$MTArchiveDate format="%Y" calculation="1"$><mt:var name="StartMonth"></mt:setvarblock>
<mt:else>
<$MTArchiveDate format="%Y"$>年度
<ul class="module-list">
<mt:setvarblock name="CompYear"><$MTArchiveDate format="%Y"$></mt:setvarblock>
</mt:else>
</mt:if>
</mt:if>
<li class="module-list-item"><a href="<$MTArchiveLink$>"><$MTArchiveTitle$></a></li>
<MTArchiveListFooter></ul></MTArchiveListFooter>
</MTArchiveList>
アーカイブを昇順に(descend=>ascend)、初期値の値(9999=>0000)、年度始めとの比較(lt=>ge)で対応できます。sort_order属性の値で切り替えれるといいんだろうなぁ。
ということで、頭の体操でした。
トラックバック(0)
このブログ記事を参照しているブログ一覧: 月別アーカイブリストを年度別に表示する
このブログ記事に対するトラックバックURL: http://www.arearea.org/mt/mt-tb.cgi/4

コメントする