月送りカレンダー(簡易版・休日表示付き)
月別アーカイブページに表示されたカレンダーに、簡単に月送り用のリンクをつけるカスタマイズです。
このカスタマイズは「月送りカレンダー(簡易版)」に休日表示付きリアルタイムカレンダーを付与した改善版です。
またカスタマイズは日付アーカイブテンプレートのみが対象です。
1.休日表示用カレンダースクリプトのダウンロード
下記のリンク先にある dayChecker.js をクリックして休日表示用カレンダースクリプトをダウンロードしてください。
2.休日表示用カレンダースクリプトのアップロード
ダウンロードした dayChecker.js を index.html と同じディレクトリにアップロードしてください。
3.テンプレートの修正1(スクリプトのインクルード)
テンプレートの <head>~</head> の間に下記のタグを追加します。
<script type="text/javascript" src="<$MTBlogURL$>dayChecker.js"></script>
4.テンプレートの修正2(カレンダー表示タグの設定)
カレンダーを表示したい部分に下記のカレンダー表示用タグを追加してください。
4.1項および4.2項のリストを追加した後、管理画面にある「設定」→「公開」の順にクリックし、次ページの下にある「アーカイブのマッピング」で「日別」の左側にチェックをつけて保存し、再構築してください。これを行わないとカレンダーが表示されませんのでご注意ください。
4.1 デフォルトテンプレートの場合
<MTIfArchiveTypeEnabled archive_type="Daily">
<div class="module-calendar module">
<h2 class="module-header"><MTArchivePrevious><a href="<$MTArchiveLink$>">≪</a> </MTArchivePrevious>
<$MTCalendarDate format="%B %Y"$>
<MTArchiveNext> <a href="<$MTArchiveLink$>">≫</a></MTArchiveNext></h2>
<div class="calendar">
<table id="calendarTable" summary="<$MTCalendarDate format="%Y/%m"$>">
<tr>
<th abbr="Sunday" class="sunday">Sun</th>
<th abbr="Monday">Mon</th>
<th abbr="Tuesday">Tue</th>
<th abbr="Wednesday">Wed</th>
<th abbr="Thursday">Thu</th>
<th abbr="Friday">Fri</th>
<th abbr="Saturday" class="saturday">Sat</th>
</tr>
<MTCalendar month="this">
<MTCalendarWeekHeader><tr></MTCalendarWeekHeader>
<td><MTCalendarIfBlank><MTElse><span></MTElse></MTCalendarIfBlank><MTCalendarIfEntries>
<MTEntries lastn="1">
<a href="<$MTEntryLink archive_type="Daily"$>"><$MTCalendarDay$></a>
</MTEntries>
</MTCalendarIfEntries><MTCalendarIfNoEntries><$MTCalendarDay$></MTCalendarIfNoEntries><MTCalendarIfBlank>
<MTElse></span></MTElse></MTCalendarIfBlank></td><MTCalendarWeekFooter></tr></MTCalendarWeekFooter></MTCalendar>
</table>
</div>
</div>
<!-- script -->
</MTIfArchiveTypeEnabled>
4.2 公開テンプレートの場合
<MTIfArchiveTypeEnabled archive_type="Daily">
<div class="side">
<div class="calendar">
<table id="calendarTable" summary="<$MTCalendarDate format="%Y/%m"$>">
<caption class="calendarhead">
<MTArchivePrevious><a href="<$MTArchiveLink$>">≪</a> </MTArchivePrevious>
<$MTCalendarDate format="%B %Y"$>
<MTArchiveNext> <a href="<$MTArchiveLink$>">≫</a></MTArchiveNext>
</caption>
<tr>
<th abbr="Sunday" class="sunday">Sun</th>
<th abbr="Monday">Mon</th>
<th abbr="Tuesday">Tue</th>
<th abbr="Wednesday">Wed</th>
<th abbr="Thursday">Thu</th>
<th abbr="Friday">Fri</th>
<th abbr="Saturday" class="saturday">Sat</th>
</tr>
<MTCalendar month="this">
<MTCalendarWeekHeader><tr></MTCalendarWeekHeader>
<td><MTCalendarIfBlank><MTElse><span></MTElse></MTCalendarIfBlank><MTCalendarIfEntries>
<MTEntries lastn="1">
<a href="<$MTEntryLink archive_type="Daily"$>"><$MTCalendarDay$></a>
</MTEntries>
</MTCalendarIfEntries><MTCalendarIfNoEntries><$MTCalendarDay$></MTCalendarIfNoEntries><MTCalendarIfBlank>
<MTElse></span></MTElse></MTCalendarIfBlank></td><MTCalendarWeekFooter></tr></MTCalendarWeekFooter></MTCalendar>
</table>
</div>
</div>
<!-- script -->
</MTIfArchiveTypeEnabled>
5.テンプレートの修正3(スクリプト追加)
休日表示カレンダースクリプトを起動するためのスクリプト
<script type="text/javascript">
function setWeekendAndHoliday(y,m) {
var element = document.getElementById("calendarTable");
var summary = element.getAttribute("summary");
var year = summary.split("/")[0];
var month = summary.split("/")[1];
if(!(year == y && month == m)){
return;
}
var spans = element.getElementsByTagName("span");
var day;
for (i = 0; i < spans.length; i++) {
if (spans[i].parentNode.nodeName == "TD") {
if(spans[i].innerHTML.indexOf("href") != -1){
day = spans[i].getElementsByTagName("a")[0].innerHTML;
} else {
day = spans[i].innerHTML;
}
if (isHoliday(year, month, day)) {
spans[i].setAttribute('class', 'holiday');
spans[i].setAttribute('className', 'holiday');
} else if(isSaturday(year, month, day)) {
spans[i].setAttribute('class', 'saturday');
spans[i].setAttribute('className', 'saturday');
}
if (isToday(year, month, day)) {
spans[i].parentNode.setAttribute('class', 'today');
spans[i].parentNode.setAttribute('className', 'today');
}
}
}
}
setCurrentDate();
setWeekendAndHoliday('<$MTArchiveDate format="%Y"$>','<$MTArchiveDate format="%m"$>');
</script>
を、4.1項または4.2項の赤色で示した
<!-- script -->
の部分に挿入してください(赤色の行は削除してください)。
6.CSS修正
下記のセレクタを styles-site.css に追加してください。
6.1 デフォルトテンプレートの場合
初めてカレンダーをご利用になる場合はすべて追加し、すでにご利用の場合は today / sunday,holiday / saturday のみ追加してください。
.calendar {
margin: 5px 0;
text-align: center;
}
.calendarhead {
padding-bottom: 5px;
font-size: 9px;
letter-spacing: 0.2em;
}
.calendar table {
padding: 0;
border-collapse: collapse;
}
.calendar th {
padding-bottom: 3px;
font-size: 9px;
width: 23px;
}
.calendar td {
padding: 2px 0;
font-size: 10px;
line-height: 120%;
}
.today {
display: block;
border: 1px solid #444444;
}
.sunday,
.holiday,
.holiday a:link,
.holiday a:visited {
color: #e50003;
}
.saturday,
.saturday a:link,
.saturday a:visited {
color: #0000ff;
}
6.2 公開テンプレートの場合
下記のセレクタを追加してください。
.sunday,
.holiday,
.holiday a:link,
.holiday a:visited {
color: #e50003;
}
.saturday,
.saturday a:link,
.saturday a:visited {
color: #0000ff;
}
また現在設定されているCSSより、下記の color プロパティ(赤色)を削除してください。これは本日と土日祝日が重複した時に土日祝日の色を優先させるためです。
.today {
display: block;
text-align: center;
color: #444444;
border: 1px solid #444444;
}
- Movable Typeのカレンダーに曜日を表示する方法
- Movable Typeのカレンダーに複数カテゴリのリンクを表示する方法
- Movable Typeでダイナミックカレンダーが表示されない不具合の対処
- Ajax ハイブリッド月送りカレンダー
- Ajax ダイナミック月送りカレンダー
- 複数ブログの情報をひとつのカレンダーにまとめて表示する
- Ajax 月送りカレンダー(jQuery・MT4版)
- 「Ajax 月送りカレンダー」の表示月をブログ記事の投稿月や月別アーカイブに連動させる
- 「Ajax 月送りカレンダー」で未来月のブログ記事を表示しない
- カテゴリー別 Ajax 月送りカレンダー(MT4版)
- Ajax 日めくりカレンダー(MT4版)
- Ajax 月送りカレンダー(MT4版)
- カレンダーの日付リンクのジャンプ先をエントリー・アーカイブに変更する
- Ajax 月送りカレンダー(縦型)
- Ajax 月送りカレンダー(横型)
新規エントリー有り難うございます。簡易版とはいえ、月別アーカイブに必要な機能は網羅されていると思うのでイチオシだと思います。
http://koukoku.michiko-oota.com/ には横型の月送りカレンダーを設置しましたが(テストのためにやってみたかっただけなのですけど)、比較すると横型の方はカレンダー側の前月リンクをクリックしてもコンテンツ部分(エントリー部分)は変わりません。「**月|メイン|**月」の**月をクリックするとカレンダーは連動してくれるのですけど。こちらも簡易月送り同様、カレンダー側のリンク部分とエントリー群が連動してくれたら・・・と欲張っています。
ごめんなさい。それに関しては横型月送りカレンダーの方にコメントすべきかも知れませんね。
>路子さん
こんにちは。
ご質問の件は「簡易版(休日表示付き)の横型」ということですね。
また折をみてエントリーしたいと思います。
ではでは!
yujiroさん、コメントへの回答ではなく新エントリーでという事ですね。いつも有り難うございます。何だかyujiroさんのお仕事を増やす常習犯のようで申し訳ないです。急いではいませんので、いつでも結構ですが宜しくお願いします。
こんにちは。
こちらのカスタマイズを行いたいと思い、テンプレートを加工したところ、『テンプレート「メインページ」の再構築に失敗しました: <MTIfArchiveTypeEnabled>タグでエラーが発生しました: MTCalendarDateタグには日付コンテキスト設定が必要です。 』と言われてしまいます。
問題があると言われてる部分は『<MTIfArchiveTypeEnabled archive_type="Daily">』となっております。
エラーが出たので一度『archive_type="Daily"』の部分を削除して再構築したので、現在はカレンダーがない状態です。
MTversionは3.33です。
よろしくお願いします。
>Ayaさん
こんにちは。
ご質問の件につきまして、説明不足ですいませんが、このカスタマイズは日付アーカイブテンプレート(厳密には月別アーカイブ)専用です。
メインページにここで紹介しているタグを貼り付けて再構築するとご指摘のエラーが発生します。
誤解を招かないよう、記述を一部修正致しました。
それではよろしくお願い致します。
>yujiro
失礼しました><
元に戻して対処しました^^;
>Ayaさん
こんばんは。
ご連絡ありがとうございました。
ではでは!
こんにちわ。
いつも勉強させて頂いております。
ところで、貴殿の現在利用されてます月送り休日表示付きカレンダーは最高と思います。
色々ページを参考にやってますが、うまく行きません。どの順序でやればいいのか、教えて頂けませんでしょうか。
どうぞ宜しくお願い致します。
>西山雄一郎さん
こんばんは。
お褒めの言葉ありがとうございます。光栄です。
ご質問の件ですが、記事はどれもひとつで完結するようにしています。
今のところのお勧めは「Ajax 月送りカレンダー」です。
それではよろしくお願い致します。
ありがとうございました。
ちょっと頑張ってやってみます。
こんにちは
いつも勉強させて頂いております。
ところで数日前にMovableType4を導入したのですが、Ajaxの月送りカレンダーの設置の仕方が分かりません。
対応はしてるのでしょうか?
多分、私のやり方が間違ってると思うのですが、初心者向けの設置の仕方をご教授願えませんでしょうか。
宜しくお願い致します。
MT4では本稿の解説とはちょっと違うようですので・・
>西山雄一郎さん
他のエントリーのコメントで回答済ですが、MT4でのAjax月送りカレンダーは「Ajax 月送りカレンダー(MT4版)」を参照願います。
それではよろしくお願い致します。