Blogger にもカレンダー

Blogger にはカレンダー機能が用意されていないため、カレンダーをブログに貼り付けたいという場合には、自分でウィジェットを追加したり(新 Blogger)、テンプレートをカスタマイズしたりする(旧 Blogger)必要があります。
※色々な部分を変更するので、テンプレートは必ずメモ帳などにバックアップしておいてください。


新 Blogger で JavaScriptCalendar を利用する 今回参考にしたのがこちら。

素晴らしいアイデアが満載のカレンダーです。(′З`)さんのアイデアに便乗して、クリボウもウィジェットを作成しました。こちらは JavaScriptCalendar ベース(オリジナルは Bloglendar ベース)のカレンダーです。

1.Blogger 管理画面「設定 > フォーマット」より、「Date ヘッダーフォーマット」を「2006-02-10」形式にして「設定を保存」ボタンを押します。

2.下のボタンのどちらかを押してください。上が日本語表記のカレンダー、下が英語表記のカレンダーになっています。

3.追加するブログやタイトルを確認した後、「ウィジットを追加」ボタンを押してください。これで導入は終了です。

このカレンダーには、いくつかオプションを用意しています。こちらのページでご確認下さい。


旧 Blogger で Bloglendar を利用する 旧 Blogger 用カレンダーのひとつめは、Bloglendar を利用する方法です。Blogger に導入するのに参考にするのはこちらのページ。

では導入の方法を見ていきます。

1.Blogger 管理画面「設定 > フォーマット」より、「Date ヘッダー フォーマット」を「Friday, February 10, 2006」形式にします。

2.このファイルをダウンロード、解凍し、できた3つのファイルを任意のサーバーにアップロードします。サーバーが用意できない場合も次に進んでください。

3.Blogger 管理画面「テンプレート」より、テンプレート head 要素内に、次のコードを貼り付けます。
<script type="text/javascript" charset="<$BlogEncoding$>" src="http://tools.kuribo.info/bloglendar/bloglendar.js">
</script><script type="text/javascript" charset="<$BlogEncoding$>" src="http://tools.kuribo.info/bloglendar/bloglendar-main.js">
</script><link rel="stylesheet" type="text/css" href="http://tools.kuribo.info/bloglendar/bloglendar.css" />
赤字の部分には、ファイルをアップロードしたディレクトリを入力します。サーバーが用意できない場合は、そのままで結構です。

4.テンプレートタグ <BlogDateHeader> を見つけ出し、直下に blogDate クラスの div 要素を挿入します。元々 <BlogDateHeader> 内に書いてあるコードはそのままにしておきます。
<BlogDateHeader>
<div class="blogDate" title="<$BlogDateHeaderDate$>"></div>
<h2 class="date-header"><$BlogDateHeaderDate$></h2>
</BlogDateHeader>

5.テンプレート中、カレンダーを表示させたい位置に次のコードを書き入れて、ブログ全体を再構築します。
<div id="bloglendar"><!-- Bloglendar here --></div>
以上で Bloglendar の導入完了です。


旧 Blogger で JavaScriptCalendar を利用する 旧 Blogger 用カレンダーのふたつめは、JavaScriptCalendar(JSCalendar)を使用する方法。Blogger に導入するのに参考にするのは、こちらのページ。

このカレンダーを導入すると、カレンダーから全てのページにアクセスできるようになる代わりに、月別アーカイブページが利用できなくなります。最初に知っておいてください。
それでは導入の方法を見ていきます。手順がたいへん多かったので、少し内容をまとめて手順を減らしています。

1.Blogger 管理画面「設定 > フォーマット」から、「Date ヘッダー フォーマット」を「2006-02-10」形式にします。また、管理画面「設定 > アーカイブ中」から、「アーカイブの頻度」を「日別」にします。

2.このページ右下の「1.0(download)」というリンクをクリック、ミラーサーバーを選んで JSCalendar をダウンロードし、解凍、出来たファイルを全て任意のサーバーにアップロードします。サーバーが用意できない場合も次に進んでください。

3.Blogger 管理画面「テンプレート」より、テンプレート head 要素内に、次のコードを貼り付けます。
<style type="text/css">@import url("http://tools.kuribo.info/jscalendar-1.0/skins/aqua/theme.css");</style>
<script type="text/javascript" src="http://tools.kuribo.info/jscalendar-1.0/calendar.js"></script>
<script type="text/javascript" src="http://tools.kuribo.info/jscalendar-1.0/lang/calendar-en.js"></script>
<script type="text/javascript" src="http://tools.kuribo.info/jscalendar-1.0/calendar-setup.js"></script>
<script type="text/javascript"><!--
function calendar()
{
  var archive = document.getElementById( 'archive' );
  if( archive )
  {
    archive.style.display = 'none';
    var notes = {};
    var links = archive.getElementsByTagName( 'a' );
    if( !links.length ) return;
    var i, j, node, date, y, m, d;
    for( i=0; i<links.length; i++ )
    {
      node = links[i];
      date = node.innerHTML.split('-'); // YYYY-MM-DD
      y = parseInt( date[0], 10 ); if(!notes[y]) notes[y] = {};
      m = parseInt( date[1], 10 ); if(!notes[y][m]) notes[y][m] = {};
      d = parseInt( date[2], 10 ); notes[y][m][d] = node.href;
    }
    var dates = document.getElementsByTagName( 'h2' ), thisDate;
    for( i=0; i<dates.length; i++ )
      if( dates[i].className == 'date-header' )
      {
        var ymd = dates[i].innerHTML.split('-'); // YYYY-MM-DD
        thisDate = new Date( parseInt( ymd[0], 10 ),
                             parseInt( ymd[1], 10 )-1,
                             parseInt( ymd[2], 10 ) );
        break;
      }
    top.notes = notes;
    Calendar.setup(
    {
      weekNumbers : false,
      step : 1, // show every year in the year menus
      date : thisDate, // selected by default
      flat : 'calendar-container', // div element
      range : [ parseInt(links[0].innerHTML), y ],
      showOthers : true, // show whole first/last week of month
      flatCallback : dateChanged, // what to do on date selection
      dateStatusFunc: disableDateP // which dates to show/hide how
    });
  }
}

// Returns true for all dates lacking a note, false or a css style for those having one.
// Exception: today does not return true, even if it lacks a note. (improves navigation)
function disableDateP( date, y, m, d )
{
  var now = new Date;
  if( (y == now.getFullYear()) &&
      (m == now.getMonth()) &&
      (d == now.getDate()) )
    return false;
  return noteFromDate( date ) ? false : true;
}

function noteFromDate( date )
{
  var note = top.notes[date.getFullYear()] || {};
  note = note[date.getMonth()+1] || {};
  return note[date.getDate()];
}

function dateChanged( calendar )
{
  if( calendar.dateClicked )
  {
    var note = noteFromDate( calendar.date );
    if( note )
      window.location = note;
  }
}//--></script>
<style type="text/css"><!--
#archive {display: none;}
#calendar-container {width:200px;}
--></style>
赤字の部分には、ファイルをアップロードしたディレクトリを入力します。サーバーが用意できない場合は、そのままでも結構です。

4.body 要素の開始タグを次のコードに変えます。
<body onload="calendar()">

5.現在アーカイブを表示している部分(archive-list クラスの div 要素もしくは ul 要素)を、次のコードに差し替え、設定を保存、ブログ全体を再構築します。
<div id="archive">
  <ul class="archive-list">
    <BloggerArchives>
    <li><a href="<$BlogArchiveUrl$>"><$BlogArchiveName$></a></li>
    </BloggerArchives>
  </ul>
</div>
<div id="calendar-container"></div>
これで、JSCalendar の導入が完了です。