備忘録:エントリーの無い月をグレーアウトする月別アーカイブリスト
そもそもmixiの↑のように表示したいのが始まりだった…
MTで普通に月別アーカイブリストを出すとこんな感じになりますね。
縦にダラーッと出すので、年月が経つにつれ冗長になっていきます。
そこでちょっと工夫すると、下記のようにできます。
ここまでは比較的簡単なんですが、mixiのように「記事の無い月」を表示してくれません。
どうにもMTは「記事の無い月なんぞ眼中にねェ!」と言わんばかりに、普通のやり方では出してくれません。出してくれないっていうか、そもそも「存在するアーカイブ一覧」という認識であって、年月で見られてません。
確かにゼロのものを出力するってのは処理として無駄だとは思うんですが、「無いものを明らかにする」っていうこともユーザビリティ・アクセシビリティの向上に繋がったりするんですよねぇ…
で、小一時間考えた結果…
コードは下記になります。
<MTIfArchiveTypeEnabled archive_type="Category-Monthly"><MTArchiveList archive_type="Category-Monthly">
<MTSetVarBlock name="tempYM">temp_<$MTArchiveDate format="%Y%m"></MTSetVarBlock>
<MTSetVarBlock name="$tempYM"><$MTArchiveCount$></MTSetVarBlock>
</MTArchiveList><MTArchiveList archive_type="Category-Yearly">
<MTArchiveListHeader><ul></MTArchiveListHeader>
<li><$MTArchiveDate format="%Y"$>
<ul><MTFor var="i" from="1" to="12"><MTIf name="i" le="9"><MTSetVarBlock name="tempM">0<$MTVar name="i"$></MTSetVarBlock><MTElse><MTSetVarBlock name="tempM"><$MTVar name="i"$></MTSetVarBlock></MTIf><MTSetVarBlock name="tempYM">temp_<$MTArchiveDate format="%Y"$><$MTVar name="tempM"$></MTSetVarBlock>
<li><MTIf name="$tempYM"><a href="<$MTBlogRelativeURL$><$MTCategoryBasename$>/<$MTArchiveDate format="%Y"$>/<$MTVar name="tempM"$>/"><$MTVar name="tempM"$>月</a><MTElse><$MTVar name="tempM"$>月</MTIf></li>
</MTFor></ul>
</li>
<MTArchiveListFooter></ul></MTArchiveListFooter>
</MTArchiveList></MTIfArchiveTypeEnabled>
おおざっぱに、前編と後編に分かれています。