「Ajax 月送りカレンダー」で未来月のブログ記事を表示しない

「Ajax 月送りカレンダー」で未来月のブログ記事を表示しない

Posted at October 30,2008 12:03 AM
Tag:[Ajax, Calendar, Customize, MovableType]

公開中の「Ajax 月送りカレンダー(MT4版)」のデフォルト表示月は最新投稿があったブログ記事の月になるようにしていますが、未来の月に投稿があると、その月が表示されてしまいます。

「このような場合でも現在の月を表示したいのですが」というご質問を頂きましたので、本エントリーにて紹介致します。

1.変更点(その1)

Ajax 月送りカレンダー(MT4版)の「5.2 カレンダー表示部分の設定」を次のように変更してください(青色部分を追加し、赤色部分を変更)。

変更前

<div id="calendar"></div>
<script type="text/javascript">
getCalendar("<$MTBlogArchiveURL$>", "<$MTBlogID$>", "<$MTBlogArchiveURL$><MTEntries lastn="1" sort_order="descend"><$MTEntryDate format="calendar/%Y/%m/" $></MTEntries>");
</script>

変更後

<div id="calendar"></div>
<script type="text/javascript">
<mt:date format="%Y/%m" setvar="current_date" />
<mt:setVar name="flag" value="0" />
<mt:archiveList archive_type="Monthly">
  <mt:unless name="flag">
    <mt:archiveDate format="%Y/%m" setvar="archive_date" />
    <mt:if name="archive_date" le="$current_date">
getCalendar("<mt:blogArchiveURL />", "<mt:blogID />", "<mt:blogArchiveURL />calendar/<mt:getVar name="archive_date" />");
      <mt:setVar name="flag" value="1" />
    </mt:if>
  </mt:unless>
</mt:archiveList>
</script>

変更前は、JavaScript を起動するパラメータに、最新のブログ記事が投稿されている年月を設定していますが、変更後は、再構築年月(MTDate)を現在月とみなして、その月以前に投稿されたブログ記事がある年月を、JavaScript を起動するパラメータに設定しています。
これで未来月に投稿があっても、現在月のカレンダーを表示します。

MTDate の代わりに JavaScript でダイナミックに年月を取得すると、月が切り変わった瞬間など、存在しない月のカレンダーを取得する可能性があるため、ここでは採用していません。

当サイトの 4.2 対応のテンプレートでサイドバーに設置する場合は、次のように dd 要素でマークアップしてください。

<dd id="calendar"></dd>
<dd>
<script type="text/javascript">
<mt:date format="%Y/%m" setvar="current_date" />
<mt:setVar name="flag" value="0" />
<mt:archiveList archive_type="Monthly">
  <mt:unless name="flag">
    <mt:archiveDate format="%Y/%m" setvar="archive_date" />
    <mt:if name="archive_date" le="$current_date">
getCalendar("<mt:blogArchiveURL />", "<mt:blogID />", "<mt:blogArchiveURL />calendar/<mt:getVar name="archive_date" />");
      <mt:setVar name="flag" value="1" />
    </mt:if>
  </mt:unless>
</mt:archiveList>
</script>
</dd>

2.変更点(その2)

Ajax 月送りカレンダー(MT4版)の「2.カレンダーテンプレート作成」のリストを、次のように変更してください(青色部分を追加)。

変更前

...前略...
<MTArchiveNext>
<a href="javascript:void(0);" onclick="changeMonth('<$MTBlogArchiveURL$><MTArchiveDate format="calendar/%Y/%m/%i">');" >&#65310;</a>
</MTArchiveNext>
...後略...

変更後

...前略...
<MTArchiveNext>
<mt:archiveDate format="%Y%m" setvar="archive_date" />
<mt:if name="archive_date" le="$current_date">
<a href="javascript:void(0);" onclick="changeMonth('<$MTBlogArchiveURL$><MTArchiveDate format="calendar/%Y/%m/%i">');" >&#65310;</a>
</mt:if>
</MTArchiveNext>
...後略...

これはカレンダーの前後月のリンクで、未来月へのリンクを表示しない対処です。

3.謝辞

この手法は、WingMemo さんのブログで紹介されている、次の記事をヒントにカスタマイズさせて頂きました。ありがとうございました。

WingMemo - ダイナミックで月送りカレンダー(5) MT4版~現在の月編
関連記事
zenback
人気エントリー
トラックバックURL


コメント

はじめまして。こちらの未来月を表示しない方法を使用させていただきました。
ありがとうございます。大変助かりました。その件でご質問があります。

【質問内容】
スケジュールとして使用するページで横型カレンダー(Ajax 月送りカレンダー:横型)を設置し未来月を表示しないところまでは処理できました。

index.htmlに関しては現在の月でのカレンダーが表示するのですが、月別アーカイブを設けており、その月別アーカイブ(未来月)も現在の月でのカレンダーが表示されてしまっています。これを各月に対応したカレンダーが表示できるような設定はありますでしょうか? 

ちなみに未来月を表示しない設定はテンプレート:トップページのみに適用させています。それ以外のブログ記事リストなどは従来の仕様にしています。

お忙しいところ恐れ入りますが、ご回答いただければ助かります。
よろしくお願いします。

[1] Posted by RIDE : October 30, 2008 8:48 PM

>RIDEさん
はじめまして。
ご利用ありがとうございます。
ご質問の件ですが、「「Ajax 月送りカレンダー」の表示月をブログ記事の投稿月や月別アーカイブに連動させる」をエントリー致しましたので、参考になれば幸いです。
それではよろしくお願い致します。

[2] Posted by yujiro logo : October 31, 2008 1:12 AM

はじめまして。この記事の内容を参考にさせていただきました。
ありがとうございます。

以下、質問させて下さい。

<質問内容>
記事の無い月の、カレンダーの表示が出来ない内容になっているかと思いますが、記事の有無に関係なく、カレンダーを表示させる方法は無いでしょうか?

お忙しいところ恐れ入りますが、ご回答いただければ助かります。
よろしくお願いします。

[3] Posted by core13 : August 26, 2009 9:14 PM

>core13さん
こんばんは。
ご質問の件ですが、最新バージョンでは最新月のカレンダーは記事がなくても表示されるようです。ただし、過去のカレンダーについては記事が投稿されていないと生成されません(生成する方法も当方では今のところ案がありません)。
それではよろしくお願い致します。

[4] Posted by yujiro logo : September 1, 2009 1:23 AM
コメントする
greeting

*必須

*必須(非表示)


ご質問のコメントの回答については、内容あるいは多忙の場合、1週間以上かかる場合があります。また、すべてのご質問にはお答えできない可能性があります。予めご了承ください。

太字イタリックアンダーラインハイパーリンク引用
[サインインしない場合はここにCAPTCHAを表示します]

コメント投稿後にScript Errorや500エラーが表示された場合は、すぐに再送信せず、ブラウザの「戻る」ボタンで一旦エントリーのページに戻り(プレビュー画面で投稿した場合は、投稿内容をマウスコピーしてからエントリーのページに戻り)、ブラウザをリロードして投稿コメントが反映されていることを確認してください。

コメント欄に(X)HTMLタグやMTタグを記述される場合、「<」は「&lt;」、「>」は「&gt;」と入力してください。例えば「<$MTBlogURL$>」は「&lt;$MTBlogURL$&gt;」となります(全て半角文字)