Movable Type 備忘録

 年別アーカイブ一覧

  • Aug142008
  • Vote:
    http://bizcaz.com/archives/2008/08/14-013136.php
  • Categories: Tips
  • Tags: , ,
  • Social Bookmark

こんばんわ^^

今日( 昨日 )は「劇場版ポケットモンスター ダイヤモンド&パール ギラティナと氷空(そら)の花束シェイミ」を観てきました。

ちょっとしたハプニングがありまして、姪っ子たちに怒られちゃいました (; ̄∇ ̄A

姪っ子はしきりにサブタイルを言ってたらしく、乗り気がしないわたしはその時だけ耳が遠くなったようで「ホートン ふしぎな世界のダレダーレ」と変換されて( 長いタイトルだなぁ・・・しか覚えてない )ずっと上映してる映画館を探してたんです。
でもほとんどの映画館で上映を終了してたので、ラッキー!! と内心思いつつも「もうホートンやってないみたいだよ」っていったら、「それじゃないよぉ。ギラディナ・・・ ・・・だよ。」って一斉攻撃をくらいました Σ( ̄Д ̄;)

もう若い子の感性にはついてけないので、「ポケモン観たかったなら、ポ・ケ・モ・ンと言ってくれぇ~」と思った今日( 昨日 )の昼下がりでした (つω-`。) とほほ

さて、訪問者さんからの質問で、月別一覧表示で投稿してない月も表示させたい( リンクなし )とのことだったのでご説明します。

年別アーカイブ一覧

通常、月別一覧を表示するには MTArchiveList ブロックタグを使用します。 これはご存知のように投稿した月の一覧しか表示されません。
じゃぁ、どうするか・・・デフォルトで 1 月 ~ 12 月を年別に表示したらいいんじゃね!? ということでやってみたのが以下のようなかんじです。

2010年:
01月 02月 03月 04月 05月 06月 07月 08月 09月 10月 11月 12月
2009年:
01月 02月 03月 04月 05月 06月 07月 08月 09月 10月 11月 12月
2008年:
01月 02月 03月 04月 05月 06月 07月 08月 09月 10月 11月 12月
2007年:
01月 02月 03月 04月 05月 06月 07月 08月 09月 10月 11月 12月
2006年:
01月 02月 03月 04月 05月 06月 07月 08月 09月 10月 11月 12月
2005年:
01月 02月 03月 04月 05月 06月 07月 08月 09月 10月 11月 12月

上記サンプルは以下のようなコードになります。

年別アーカイブ一覧

  1. <MTArchiveList archive_type="Yearly">
  2.     <MTArchiveListHeader><dl id="monthly_list"></MTArchiveListHeader>
  3.  
  4.     <dt class="header"><a href="<$MTBlogArchiveURL$><$MTArchiveDate format="%Y/"$>"><$MTArchiveDate format="%Y年"$></a>:</dt>
  5.  
  6.     <mt:SetVarBlock name="month">
  7.         <MTArchiveList archive_type="Monthly">
  8.             <MTEntries lastn="1"><$MTEntryDate format="_%B_"$></MTEntries>
  9.         </MTArchiveList>
  10.     </mt:SetVarBlock>
  11.  
  12.     <dd class="body"><mt:For var="m" from="1" to="12">
  13.         <mt:SetVarBlock name="mon">_<$mt:GetVar name="m"$>_</mt:SetVarBlock>
  14.  
  15.         <mt:If name="month" like="$mon">
  16.             <a href="<$MTBlogArchiveURL$><$MTArchiveDate format="%Y"$>/<mt:GetVar name="m" zero_pad="2">/"><mt:GetVar name="m" sprintf="%02d月"></a>
  17.         <mt:Else>
  18.             <span><mt:GetVar name="m" sprintf="%02d月"></span>
  19.         </mt:If>
  20.     </mt:For></dd>
  21.  
  22.     <MTArchiveListFooter></dl></MTArchiveListFooter>
  23. </MTArchiveList>

まず、このカスタマイズは年別アーカイブをマッピングすることが大前提となります。

青字の部分で年別にループ( 2005 ~ 2008 )させてます。
赤字の部分では、各年で投稿された月のエントリ一件分の投稿月を取得してます。
そして、緑字の部分で 1 月~12 月のループを行ってます。これにより投稿してない月でも表示させることが可能となります。
最後に、黄色字の部分で投稿した月があるかどうかをチェックして、投稿月ならばアーカイブページのリンクを表示し、投稿してなければテキスト表示するようにしてます。

上記サンプルでは、以下のようなマークアップになります。

マークアップ

  1. <dl id="monthly_list">
  2.     <dt class="header"><a href="http://●●●/2008/">2008年</a>:</dt>
  3.     <dd class="body">
  4.         <a href="http://●●●/2008/01/">01月</a>
  5.         <a href="http://●●●/2008/02/">02月</a>
  6.         <a href="http://●●●/2008/03/">03月</a>
  7.         <a href="http://●●●/2008/04/">04月</a>
  8.         <a href="http://●●●/2008/05/">05月</a>
  9.         <a href="http://●●●/2008/06/">06月</a>
  10.         <a href="http://●●●/2008/07/">07月</a>
  11.         <a href="http://●●●/2008/08/">08月</a>
  12.         <span>09月</span>
  13.         <span>10月</span>
  14.         <span>11月</span>
  15.         <span>12月</span>
  16.     </dd>
  17. </dl>

そして上記サンプルのスタイルシートを以下に記します。

スタイルシート

  1. #monthly_list,
  2. #monthly_list dt,
  3. #monthly_list dd {
  4.     margin: 0;
  5.     padding: 0;
  6. }
  7. #monthly_list dt {
  8.     float: left;
  9. }
  10. #monthly_list dd:after {
  11.     height: .1px;
  12.     display: block;
  13.     visibility: hidden;
  14.     content: ".";
  15.     font-size: .1em;
  16.     line-height: 0;
  17.     clear: both;
  18. }

以上です。

 Trackback Pings(1)

from HashiMのたわごと(?)

何の話かというと,7月頃に書いたこれのこと. 2008年7月12日(土) - ...

 Comments(2)

#1: Posted by Arai @ December 18, 2009 [REPLY]
user-pic

MTのことを調べているといつも辿りついています。
毎回とても参考にさせていただいています。

今回のこの出し方は自分が理想としていたものにピッタリでした。
それを年別と月別アーカイブに設置して、それぞれに合致する月の一覧だけを出すように自分はカスタマイズさせていただきました。

また、質問ですが今回は年別アーカイブ一覧でしたが、
似たような形でカテゴリ-年別アーカイブ一覧を作成したい、
つまり、カテゴリ-年別アーカイブ一覧表示で投稿してないカテゴリも表示させたい( リンクなし )
のです。

こちらいくら試行錯誤してもできませんでした。
もしかして、MTでは無理なんでしょうか?

#2: Posted by Author Profile Page bzbellからAraiへの返信 @ December 18, 2009 [REPLY]
user-pic

>>1 Arai さん

こんばんわ^^

ウチのサイドバーに表示してるカレンダーはカテゴリ別のカレンダーになってます。
そのような表示のしかたという理解でよいでしょうかふつう
それでしたら、以下のコードで同様のことができます。

<mt:If name="archive_class" like="(category-archive|category-daily-archive)">
<$mt:CategoryLabel setvar="catname"$>
<$mt:ArchiveLink archive_type="Category" setvar="baseurl"$>
<mt:ElseIf name="archive_class" like="entry-archive">
<mt:EntryCategories lasnt="1">
<$mt:CategoryLabel setvar="catname"$>
<$mt:CategoryArchiveLink setvar="baseurl"$>
</mt:EntryCategories>
<mt:Else>
<$mt:BlogArchiveURL setvar="baseurl"$>
</mt:If>
<mt:ArchiveList archive_type="Yearly" sort_order="descend">
<mt:ArchiveListHeader><ul id="monthly_list"></mt:ArchiveListHeader>
<li><span class="header"><$mt:ArchiveDate language="en" format="%Y"$>年</span>
<mt:SetVarBlock name="month">
<mt:ArchiveList archive_type="Monthly">
<mt:Entries lastn="1" category="$catname"><$mt:EntryDate format="_%B_"$></mt:Entries>
</mt:ArchiveList>
</mt:SetVarBlock>
<mt:For var="m" from="1" to="12">
<mt:SetVarBlock name="mon">_<$mt:GetVar name="m"$>_</mt:SetVarBlock>
<mt:If name="month" like="$mon">
<a class="body" href="<$mt:GetVar name="baseurl"$><$mt:ArchiveDate format="%Y"$>/<mt:GetVar name="m" zero_pad="2">/"><mt:GetVar name="m" zero_pad="2"></a>月
<mt:Else>
<span class="body"><mt:GetVar name="m" zero_pad="2"></span>月
</mt:If>
</mt:For>
</li>
<mt:ArchiveListFooter></ul></mt:ArchiveListFooter>
</mt:ArchiveList>
ご確認くださいぺこり

 Post a Comment

 

コメント用フィード