石輪っぷり!
月別アーカイブのリストを年毎に纏める
2009年5月10日 12時03分 | コメント(0) | トラックバック(0)
※この投稿は180日以上前のものです。最新の情報とは異なる場合があります。
「Movable Typeテンプレートタグ虎の巻
」に変数や制御構造の処理を利用して、月別アーカイブリストを年毎に分類して表示するサンプルが載っていますが、40を超えた頭には複雑すぎて(汗)、その通りに記述すれば実現できるもの、なぜそうなるのか理解できません。(苦笑)
そこで、もっと分かりやすく直感的な(?)方法で、月別アーカイブリストを年毎に分類してみました。
なお、月別アーカイブリストは毎月1行ずつ増えていくため、ブログを長く運営しているとどんどん長くなっていきますので、ドロップダウンリスト(MTのデフォルトのウィジェットにあるJavaScriptを使ったもの)と、JavaScriptが使えない環境用に箇条書きリスト形式にしたものを作っています。
まず、ドロップダウンリスト形式のもの。
<h3>月別アーカイブ</h3>
<mt:ArchiveList archive_type="Monthly" sort_order="descend">
<mt:ArchiveListHeader>
<select onchange="nav(this)">
<option>-- 月を選択 --</option>
<optgroup label="<$mt:ArchiveDate format="%Y"$>年">
<mt:SetVarBlock name="year"><$mt:ArchiveDate format="%Y"$></mt:SetVarBlock>
</mt:ArchiveListHeader>
<mt:SetVarBlock name="now_year"><$mt:ArchiveDate format="%Y"$></mt:SetVarBlock>
<mt:If name="now_year" ne="$year">
</optgroup>
<optgroup label="<$mt:ArchiveDate format="%Y"$>年">
</mt:If>
<option value="<$mt:ArchiveLink$>"><$mt:ArchiveDate format="%b月"$> (<$mt:ArchiveCount$>)</option>
<mt:SetVar name="year" value="$now_year">
<mt:ArchiveListFooter>
</optgroup>
</select>
<script type="text/javascript" charset="utf-8">
/* <![CDATA[ */
function nav(sel) {
if (sel.selectedIndex == -1) return;
var opt = sel.options[sel.selectedIndex];
if (opt && opt.value)
location.href = opt.value;
}
/* ]]> */
</script>
</mt:ArchiveListFooter>
</mt:ArchiveList>
一つ目のリストで変数 "year" に最初の年を取得しておき、各リストで変数 "now_year" にその月の年を取得します。
変数 "year" と "now_year" を比較し、異なる場合は <optgroup> を閉じて次の年の <optgroup> を生成してから、各 <option> リストを書きます。
その後、"year" に "now_year" を代入して、次のリストに渡します。
これを繰り返し、最後のリストでタグを閉じます。
同じ考え方で箇条書きリスト形式したものがこちら。
<mt:ArchiveList archive_type="Monthly" sort_order="descend">
<mt:ArchiveListHeader>
<p>JavaScriptが使えない場合は以下のリンクをご利用ください</p>
<ul>
<li><$mt:ArchiveDate format="%Y"$>年
<ul>
<mt:SetVarBlock name="year"><$mt:ArchiveDate format="%Y"$></mt:SetVarBlock>
</mt:ArchiveListHeader>
<mt:SetVarBlock name="now_year"><$mt:ArchiveDate format="%Y"$></mt:SetVarBlock>
<mt:If name="now_year" ne="$year">
</ul>
</li>
<li><$mt:ArchiveDate format="%Y"$>年
<ul>
</mt:If>
<li><a href="<$mt:ArchiveLink$>"><$mt:ArchiveDate format="%b月"$> (<$mt:ArchiveCount$>)</a></li>
<mt:SetVar name="year" value="$now_year">
<mt:ArchiveListFooter>
</ul>
</li>
</ul>
</mt:ArchiveListFooter>
</mt:ArchiveList>
これを、<noscript>〜</noscript> の中に入れてJavaScriptが無効なときに表示されるようにしています。
トラックバック(0件)
- :
- « 前の記事
- Feeds.App Lite が使えない
- 次の記事 »
- Googleの検索結果をカスタマイズ

コメント(0件)
コメントする