「Ajax 月送りカレンダー」の表示月をブログ記事の投稿月や月別アーカイブに連動させる
「『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);
}
...後略...
- Movable Typeのカレンダーに曜日を表示する方法
- Movable Typeのカレンダーに複数カテゴリのリンクを表示する方法
- Movable Typeでダイナミックカレンダーが表示されない不具合の対処
- Ajax ハイブリッド月送りカレンダー
- Ajax ダイナミック月送りカレンダー
- 複数ブログの情報をひとつのカレンダーにまとめて表示する
- Ajax 月送りカレンダー(jQuery・MT4版)
- 「Ajax 月送りカレンダー」で未来月のブログ記事を表示しない
- カテゴリー別 Ajax 月送りカレンダー(MT4版)
- Ajax 日めくりカレンダー(MT4版)
- Ajax 月送りカレンダー(MT4版)
- カレンダーの日付リンクのジャンプ先をエントリー・アーカイブに変更する
- Ajax 月送りカレンダー(縦型)
- Ajax 月送りカレンダー(横型)
- Ajax 月送りカレンダー
初めまして。
MT3.34でAjax 月送りカレンダーを利用させていただいています。
この表示月のカスタマイズを取り入れたいと思ったのですが、MT4を触ったことがないため、3.34だとどのようにカスタマイズすればよいかわからず困っています。
お忙しいところ申し訳ありませんが、MT3.34の場合のタグを教えていただけないでしょうか?
>松尾さん
こんにちは。
ご質問の件ですが、本記事で提供している内容は、MT4から提供されているテンプレートタグを使用しているため、MT3では利用できません。
予めご了承ください。
それではよろしくお願い致します。
> yujiro様
お返事ありがとうございます。
そうでしたか、それは残念です。