top

ダイナミックで月送りカレンダー(3) 非iframe版

ダイナミックで月送りカレンダー(1) iframe版のカスタマイズをした時は、まだダイナミックにカレンダーの不具合が残っており、解決方法にも気付く前だったため、iframeを使ってカレンダーのみ静的生成させるという方法を取っていました。
しかし3.3になってダイナミックカレンダーも正常生成されるようになり、残っているバグの解決方法も分かり、ダイナミックカレンダーを取り巻く状況もぐっと良くなりました。

そこでiframeを使わないダイナミック対応の月送りカレンダーをここに覚え書きしておきます。前月・次月のリンクをクリックするとその月のアーカイブに飛ぶという、Serene Bachと同じ動作をするもっとも基本的な形の月送りカレンダーです。もちろん、静的生成でも使えます。

●MTタグのみで実装しています。javascriptもPHPもプラグインも一切使用していません。月移動以外の付加機能はありませんが、その分シンプルで手軽に設置できます。
●iframeを使わず1枚のHTMLファイルとして書き出しているので、5週の月でも6週の月でもカレンダー下部の余白は常に一定です。
●カレンダー用のアーカイブテンプレートを作る必要がないので、設置が簡単です。
●月別・日別・エントリーアーカイブではその月に合致したカレンダーが表示されます。

なお、タグを組むにあたり、以下のサイト様を参考・ヒントにさせていただきました。ありがとうございました。

小粋空間 月送りカレンダー(簡易版)
メモ書き~♪ 月送りカレンダー・2

061206.gif

ご覧の通り、月別アーカイブで可能な簡易版をベースに、個別のエントリーアーカイブや日別アーカイブにも月送り機能を付加したものです。3.3デフォルトに合わせていますので、必要に応じカスタマイズして下さい。

1.日別アーカイブを有効にする
「設定>アーカイブマッピング」で日別アーカイブにチェックを入れ、日別アーカイブが使えるようにします。

*アーカイブマッピングで日別アーカイブをカスタマイズしている場合/公開の設定でアーカイブの設定にチェックを入れている場合は下部の注意事項をご覧下さい。

2.月移動カレンダー用タグ
以下のソースを各アーカイブの好きな位置に貼り付けます。

●日付アーカイブ・エントリーアーカイブ用挿入タグ
(その月・日に合致したカレンダーが表示される)

<div class="module-calendar module">
<h2 class="module-header">カレンダー</h2>
<div class="module-content">
<table summary="投稿されたエントリーへのリンク付き月間カレンダー">
<caption>
<MTArchivePrevious archive_type="Monthly">
<a href="<$MTArchiveLink archive_type="Monthly"$>">&lt;</a>&nbsp;&nbsp;
</MTArchivePrevious>
<$MTCalendarDate format="%B %Y"$>
<MTArchiveNext archive_type="Monthly">
&nbsp;&nbsp;<a href="<$MTArchiveLink archive_type="Monthly"$>">&gt;</a>
</MTArchiveNext>
</caption>
<tr>
<th abbr="日曜日">日</th>
<th abbr="月曜日">月</th>
<th abbr="火曜日">火</th>
<th abbr="水曜日">水</th>
<th abbr="木曜日">木</th>
<th abbr="金曜日">金</th>
<th abbr="土曜日">土</th>
</tr>
<MTCalendar month="this">
<MTCalendarWeekHeader><tr></MTCalendarWeekHeader>
<td><MTCalendarIfEntries><MTEntries><MTDateHeader>
<a href="<$MTBlogURL$><$MTArchiveDate format="%Y/%m/%d/"$>" title="</MTDateHeader>[<$MTEntryTitle$>]<MTDateFooter>">
<$MTCalendarDay$></a>
</MTDateFooter>
</MTEntries></MTCalendarIfEntries>
<MTCalendarIfNoEntries><$MTCalendarDay$>
</MTCalendarIfNoEntries>
<MTCalendarIfBlank>&nbsp;</MTCalendarIfBlank></td>
<MTCalendarWeekFooter></tr></MTCalendarWeekFooter>
</MTCalendar>
</table>
</div>
</div>

●メインページ・アーカイブページ・カテゴリーアーカイブ用挿入タグ
(常に最新のカレンダーが表示される)

<MTArchiveList archive_type="Monthly" lastn="1">
<div class="module-calendar module">
<h2 class="module-header">カレンダー</h2>
<div class="module-content">
<table summary="投稿されたエントリーへのリンク付き月間カレンダー">
<caption>
<MTArchivePrevious>
<a href="<$MTArchiveLink$>">&lt;</a>&nbsp;&nbsp;
</MTArchivePrevious>
<$MTCalendarDate format="%B %Y"$>
</caption>
<tr>
<th abbr="日曜日">日</th>
<th abbr="月曜日">月</th>
<th abbr="火曜日">火</th>
<th abbr="水曜日">水</th>
<th abbr="木曜日">木</th>
<th abbr="金曜日">金</th>
<th abbr="土曜日">土</th>
</tr>
<MTCalendar month="this">
<MTCalendarWeekHeader><tr></MTCalendarWeekHeader>
<td><MTCalendarIfEntries><MTEntries><MTDateHeader>
<a href="<$MTBlogURL$><$MTArchiveDate format="%Y/%m/%d/"$>" title="</MTDateHeader>[<$MTEntryTitle$>]<MTDateFooter>">
<$MTCalendarDay$></a>
</MTDateFooter>
</MTEntries></MTCalendarIfEntries>
<MTCalendarIfNoEntries><$MTCalendarDay$>
</MTCalendarIfNoEntries>
<MTCalendarIfBlank>&nbsp;</MTCalendarIfBlank></td>
<MTCalendarWeekFooter></tr></MTCalendarWeekFooter>
</MTCalendar>
</table>
</div>
</div>
</MTArchiveList>

●カレンダー用の追加CSS
3.3標準のものに合わせていますので、必要に応じてカスタマイズして下さい。

.module-calendar table {
width: 100%;
}
.module-calendar caption {
padding-bottom:5px;
font-size:12px;
}
.module-calendar th {
}

<注意事項>
●アーカイブマッピングで日別アーカイブをカスタマイズしている場合
上のソースはMTデフォルト設定値に合わせていますので、独自にカスタマイズしている場合はカレンダーソースの赤字の部分を自分のカスタマイズ内容に変更して下さい。
例えば、<$MTArchiveDate format="%Y%m%d"$>.htmlとしている場合は、
<$MTArchiveDate format="%Y/%m/%d/"$>の部分を、
<$MTArchiveDate format="%Y%m%d"$>.htmlに差し替えます。

●アーカイブの設定にチェックを入れている場合
ブログの「設定→公開→サイトURL/パス」でアーカイブの設定にチェックを入れている場合は設定したアーカイブディレクトリ名を<$MTBlogURL$><$MTArchiveDate format="%Y/%m/%d/"$>の間に入れて下さい。

 (例) <$MTBlogURL$>archives/<$MTArchiveDate format="%Y/%m/%d/"$>


*補足*
・日別アーカイブへの飛ぶ先を<$MTEntryLink archive_type="Daily"$>などのタグにすると、ダイナミックで複数ブログを運営している場合、違うブログのエントリーへ飛ぶことがあるので、それを防ぐため<$MTBlogURL$>~でhttpから始まるフルアドレスで指定するようにしています。
・また、この方法だとカレンダーが正常生成されなかった3.2以前のダイナミックにも適用できます(古いバージョンのMTだと日別アーカイブのアドレス生成パターンが最新版と違う可能性があるため、アーカイブマッピングでパターンを確認して下さい。「yyy/mm/dd/index.html」なら上のタグをまるごとコピペで大丈夫です。そうでない場合、よくわからない場合は「カスタマイズ」を選んで<$MTArchiveDate format="%Y/%m/%d/"$>index.htmlと入れて保存しちゃって下さい^^;)。
・このカスタマイズでは頁は動かさずカレンダーのみがスッスッと移動する形にはできません。カレンダーのみ動かしたい場合はiframe版を応用してご利用下さい。

<2006.12.21 修正&追記>
日別アーカイブへのパスを<$MTBlogArchiveURL$>から<$MTBlogURL$>へ変更しました。
指摘を受けて調べてみたところ、アーカイブの設定にチェックを入れてない場合(デフォルトの状態)では、<$MTBlogArchiveURL$>だと正しくリンクされないことが判明したからです。ありがとうございました。