top

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

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

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

注意:
このカスタマイズは3.3時代に書いたもので、4.1以前で動作します。4.2ではエラーになって使えませんので、4.2以降では4.2用のカスタマイズをご利用下さい(4.2でなくても4系なら4.2用を推奨)。なお、4.1以前でも静的生成では一部動作しないバージョンがありますのでご注意下さい(ダイナミックなら4.1以前のどのバージョンでも動作します)。

●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$>だと正しくリンクされないことが判明したからです。ありがとうございました。
<2008.1012>4.2対応版への案内と注意書きを追記。

 

コメント

 そうなんです。何故カレンダーの下がブラウザによって切れちゃうのか?iflameで高さを指定していなかったんですよね。それに気付くまでに数日要しました。
 ところで質問させて下さい。このカレンダーのコードをwidgetで管理することも可能なんでしょうか?

iframeで表示させる時って、ブラウザでけっこう微妙な違いがあったみたいですね。

このコードですが、widgetでも使えると思います。ただ日別・エントリーアーカイブ用とそれ以外用では少しタグが違うので、2種類用意してテンプレートによって使い分けないといけないと思いますが…。
上手くいけば管理もさらに簡単に出来そうですね。

この度は、新しいカレンダーを紹介していただき、ありがとうございます。こちらのページを参考に、私のカレンダーも修正しました。私のブログでも確認して、httpから始まるフルアドレスで指定した方が良いかなと思ったので、アーガイブマッピングを変更して、リンク先も変更しました。で、「月送りカレンダー・2」のリンク先も変更になりましたので、お知らせいたします。(*⌒-⌒*)

ところで、リンク先の<$MTBlogArchiveURL$>にした所、カテゴリーアーガイブページで「ブログのURL/エントリーのhtml」のはずが「ブログのURL/カテゴリー名/エントリーのhtml」といったリンクになったので、<$MTBlogURL$>に書き直しましたが。。。(意味分かるかな?)これって私だけかな??(⌒_⌒;)

あと、widgetでの管理は…私も挑戦しましたが、出来ませんでした。(⌒_⌒;)

>ぢゅんり♪様
頁アドレス変更のお知らせ、ありがとうございます。リンク、直しておきました。
ぢゅんり♪さんのおかげで全部のアーカイブに思い通りのカレンダーを表示させるタグを付けることができました。やっぱりまずはMTタグの攻略から!がカスタマイズの基本ですね。

><$MTBlogArchiveURL$>
あれ? そうでしたか? 私がテスト設置したブログではカテゴリ頁からも正しく飛んでいたので気が付かなかったですが、やっぱりダイナミックの場合は<$MTBlogURL$>できっちり書き出した方が無難みたいですね。時間がとれたら追記しておこうと思います。

widget化、できなかったですか? 従来からのモジュールに慣れてしまっているので、結局widgetは使わずじまいになってます。まあ普通に使えればいいってことで(^^;。

<追記>
その後、調べてみたところ、公開の設定でアーカイブの設定にチェックを入れてない場合(デフォルトの状態)は、<$MTBlogArchiveURL$>では正しく飛ばないことが確認されたので<$MTBlogURL$>に修正しました。
こちらのテスト環境では古いバージョンからの設定を引き継いだままの状態で動作確認していたため、気付かなかったようです。

indexにカレンダ設置した場合に最新のものでなく、現在の月に設定することてできるのでしょうか?
今は10月ですが11月の予定を入れておいて、11月を表示しないで今の10月を表示するみたいのです。

なかなか難しいものですね^^;

>eriさん
こんにちは。
月送り機能がなくていいのなら、MT標準のカレンダーを使えば現在の月になります(デフォルトで用意されている月送り機能のないカレンダーは常に現在の月を表示する仕様になってます)。
しかし月送り機能を付けたい場合は、現在の月に記事が1つもない場合も考慮しなくてはいけなくなるので、前月へのリンク部分がちょっとややこしいことになります。

MTのバージョンはどれをお使いでしょうか?
4.0、4.1なら変数を使うことで適切な前月へのリンクを作ることが出来ると思いますが、3.3x以前では難しいかもしれません。ダイナミックならSmartyを使うことでMT4以降と同じことが可能かと思いますが、アーカイブはダイナミックでもindexは静的にしているケースも多いですよね…。

*月送り部分とMTのバージョンについて
この記事に書いてある月送りは4.1以前用です。4.2以降で使うとブログ記事でエラーになりますのでご注意下さい。4.2で同じ月送りカレンダーを設置する場合は以下の頁を参照いただければと思います。
http://wing.w-museum.com/200808231450.html

ありがとうございます。

4.1です。4.2にするつもりでいます。アドレスのほうので試させて頂きます。

分かりました。アドレスの方でレスさせていただきますね。