「Ajax 月送りカレンダー」の表示月をブログ記事の投稿月や月別アーカイブに連動させる

「Ajax 月送りカレンダー」の表示月をブログ記事の投稿月や月別アーカイブに連動させる

Posted at October 31,2008 12:55 AM
Tag:[Ajax, Calendar, Customize, MovableType]

『Ajax 月送りカレンダー(MT4版)』で未来月のブログ記事を表示しない」の続きで、「Ajax 月送りカレンダー(MT4版)」をブログ記事の投稿月や日付アーカイブに連動させるためのカスタマイズです。

具体的には、

  • ブログ記事アーカイブ:投稿月のカレンダーを表示
  • 日別・月別アーカイブ/日別カテゴリー・月別カテゴリーアーカイブ/日別ユーザー・月別ユーザーアーカイブ:該当月のカレンダーを表示
  • メインページ/カテゴリーアーカイブ/ユーザーアーカイブ:最新月(未来月を除く)のカレンダーを表示

となります。

ブログ記事アーカイブでの表示例(投稿月である9月のカレンダーを表示)
ブログ記事アーカイブでの表示

月別アーカイブでの表示例(アーカイブの月である8月のカレンダーを表示)
月別アーカイブでの表示

何人かの方から質問を頂いてますので、本エントリーで回答致します。

1.変更点(その1)

Ajax 月送りカレンダー(MT4版)の「5.2 カレンダー表示部分の設定」を次の内容に入れ替えてください。

<div id="calendar"></div>
<script type="text/javascript">
<mt:if name="archive_class" like="monthly|daily">
getCalendar("<mt:blogArchiveURL />", "<mt:blogID />", "<mt:blogArchiveURL />calendar/<mt:archiveDate format="%Y/%m/" />");
<mt:elseIf name="archive_class" like="weekly|yearly">
getCalendar("<mt:blogArchiveURL />", "<mt:blogID />", "<mt:blogArchiveURL />calendar/<mt:date format="%Y/%m/" />");
<mt:elseIf name="entry_archive">
getCalendar("<mt:blogArchiveURL />", "<mt:blogID />", "<mt:blogArchiveURL />calendar/<mt:entryDate format="%Y/%m/" />");
<mt:else>
<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>
</mt:if>
</script>

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

<dd id="calendar"></dd>
<dd>
<script type="text/javascript">
<mt:if name="archive_class" like="monthly|daily">
getCalendar("<mt:blogArchiveURL />", "<mt:blogID />", "<mt:blogArchiveURL />calendar/<mt:archiveDate format="%Y/%m/" />");
<mt:elseIf name="archive_class" like="weekly|yearly">
getCalendar("<mt:blogArchiveURL />", "<mt:blogID />", "<mt:blogArchiveURL />calendar/<mt:date format="%Y/%m/" />");
<mt:elseIf name="entry_archive">
getCalendar("<mt:blogArchiveURL />", "<mt:blogID />", "<mt:blogArchiveURL />calendar/<mt:entryDate format="%Y/%m/" />");
<mt:else>
<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>
</mt:if>
</script>
</dd>

年別アーカイブ・週別アーカイブ(カテゴリ・ユーザー別含む)の場合は、日別や月別と同じ制御(MTArchiveDate タグで年月を取得)では正常に表示されない場合があり、制御がやや面倒なので現在月を表示するようにしています。ちなみに正常に表示されない理由は次の通りです。

  • 年別アーカイブ:その年の最初の月を表示するが、その月に投稿がないと正常に表示されない。
  • 週別アーカイブ:週が2ヶ月にまたがっていると、最初の月のカレンダーを表示するが、その月に投稿がないと正常に表示されない。

2.変更点(その2)

ajaxCalendar.js をアップロードする前に(アップロードしていたらダウンロードして)、任意のエディタで開き、下記の青色部分を追加してください。この追加を行わないと、最初に表示された(または月送りした)カレンダー月がクッキーにカレンダー年月が保存され、その年月のカレンダー表示が優先されてしまいます。

...前略...
function getCalendar(blogURL, id, path) {
    blogID = id;
    var cookie = readCookie("AjaxCal" + id);
    cookie = null;
    if(cookie != null) {
        if(blogURL.lastIndexOf("/") != blogURL.length - 1) {
            path = blogURL + "/calendar/" + cookie + "/";
        } else {
            path = blogURL + "calendar/" + cookie + "/";
        }
    }
    changeMonth(path);
}
...後略...
関連記事
zenback
人気エントリー
トラックバックURL


コメント

初めまして。
MT3.34でAjax 月送りカレンダーを利用させていただいています。

この表示月のカスタマイズを取り入れたいと思ったのですが、MT4を触ったことがないため、3.34だとどのようにカスタマイズすればよいかわからず困っています。

お忙しいところ申し訳ありませんが、MT3.34の場合のタグを教えていただけないでしょうか?

[1] Posted by 松尾 : February 15, 2009 9:46 AM

>松尾さん
こんにちは。
ご質問の件ですが、本記事で提供している内容は、MT4から提供されているテンプレートタグを使用しているため、MT3では利用できません。
予めご了承ください。
それではよろしくお願い致します。

[2] Posted by yujiro logo : February 16, 2009 12:48 PM

> yujiro様
お返事ありがとうございます。
そうでしたか、それは残念です。

[3] Posted by 松尾 : February 16, 2009 11:57 PM
コメントする
greeting

*必須

*必須(非表示)


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

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

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

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