TopMovable Typeカスタマイズカレンダー > 「Ajax 月送りカレンダー」の表示月をブログ記事の投稿月や月別アーカイブに連動させる
2008年10月31日

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

Posted at October 31,2008 12:55 AM
Category:[カレンダー]
Tag:[, , , ]

『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);
}
...後略...
Posted by yujiro   このページの先頭に戻る
関連記事
この記事を読んだ人はこんな記事も読んでいます
人気エントリー
Hatena Hot Entries
Hatena Entries
トラックバック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;」となります(全て半角文字)

Now loading...
Introduction
Entries of this Category
Recent Entries
Recent Comments
Recent Trackbacks
QRcode

現在停止中です
携帯電話からこのQRcodeを撮影することで携帯用URLを取得することができます

URI for cellular phones
ギターに入った猫
Styles
Font Size
Default
For defective color vision
Gray Scale
RGB Color
Search this site

このブログをメールで購読する by:FeedBurner

loading ...
Categories
Monthly Archives
BlogPeople
Syndicate this site
FeedBurner(RSS1.0/RSS2.0/Atom)
Counter
これまでのアクセス
クリエイティブ・コモンズ・ライセンス
Powered by
Movable Type 5.12