Step #1Go to Template>Edit HTML. Leave the Expand Widget Templates box UNCHECKED (default)
This code will replace your Archive widget. Scroll down and find yours in your template. Will look something like this.

Copy the following code, then highlight the archive widget as shown and replace it with a paste.
<b:widget
id='BlogArchive1'
locked='false' title='Blog Archive' type='BlogArchive'>
<b:includable id='main'>
<b:if cond='data:title'>
<h2><data:title/></h2>
</b:if>
<div class='widget-content'>
<div id='ArchiveList'>
<div expr:id='data:widget.instanceId +
"_ArchiveList"'>
<b:if cond='data:style ==
"HIERARCHY"'>
<b:include data='data'
name='interval'/>
</b:if>
<b:if cond='data:style ==
"FLAT"'>
<b:include
data='data' name='flat'/>
</b:if>
<b:if cond='data:style ==
"MENU"'>
<b:include
data='data' name='menu'/>
</b:if>
</div>
</div>
<b:include name='quickedit'/>
</div>
</b:includable>
<b:includable id='toggle' var='interval'>
<!-- Toggle not needed for Calendar -->
</b:includable>
<b:includable id='flat' var='data'>
<div id='bloggerCalendarList'>
<ul>
<b:loop values='data:data'
var='i'>
<li
class='archivedate'>
<a
expr:href='data:i.url'><data:i.name/></a>
(<data:i.post-count/>)
</li>
</b:loop>
</ul>
</div>
<div id='blogger_calendar' style='display:none'>
<table id='bcalendar'><caption
id='bcaption'>
</caption>
<!-- Table Header -->
<thead id='bcHead'></thead>
<!-- Table Footer -->
<!-- Table Body -->
<tbody><tr><td id='cell1'>
</td><td id='cell2'>
</td><td id='cell3'>
</td><td id='cell4'>
</td><td id='cell5'>
</td><td id='cell6'>
</td><td id='cell7'>
</td></tr>
<tr><td id='cell8'>
</td><td id='cell9'>
</td><td id='cell10'>
</td><td id='cell11'>
</td><td id='cell12'>
</td><td id='cell13'>
</td><td id='cell14'>
</td></tr>
<tr><td id='cell15'>
</td><td id='cell16'>
</td><td id='cell17'>
</td><td id='cell18'>
</td><td id='cell19'>
</td><td id='cell20'>
</td><td id='cell21'>
</td></tr>
<tr><td id='cell22'>
</td><td id='cell23'>
</td><td id='cell24'>
</td><td id='cell25'>
</td><td id='cell26'>
</td><td id='cell27'>
</td><td id='cell28'>
</td></tr>
<tr><td id='cell29'>
</td><td id='cell30'>
</td><td id='cell31'>
</td><td id='cell32'>
</td><td id='cell33'>
</td><td id='cell34'>
</td><td id='cell35'>
</td></tr>
<tr id='lastRow'><td id='cell36'>
</td><td id='cell37'>
</td></tr>
</tbody>
</table>
<table id='bcNavigation'><tr>
<td id='bcFootPrev'></td>
<td id='bcFootAll'></td>
<td id='bcFootNext'></td>
</tr></table>
<div id='calLoadingStatus' style='display:none;
text-align:center;'>
<script
type='text/javascript'>bcLoadStatus();</script>
</div>
<div id='calendarDisplay'/>
</div>
<script type='text/javascript'>
initCal();</script>
</b:includable>
<b:includable id='posts' var='posts'>
<!-- posts not needed for Calendar -->
</b:includable>
<b:includable id='menu' var='data'>
Configure your calendar archive widget - Edit archive widget
- Flat List - Newest first - Choose any Month/Year Format
</b:includable>
<b:includable id='interval' var='intervalData'>
Configure your calendar archive widget - Edit archive widget
- Flat List - Newest first - Choose any Month/Year Format
</b:includable>
</b:widget>
At this point you may want to save the template. It should save without any errors, if not then make sure you followed the above, and copy/pasted correctly.
Now, we need to copy and paste the scripts themselves. If you have an external server, you can copy the following scripts (removing the beginning /ending script tags) and save it as a file with the .js extension, then link to it from the head section. If that doesn't make any sense to you, don't worry. Just do it this way.
Find in your template the ending ]]></b:skin> tag and the ending </head> tag. It should look something like this in your template
I've highlighted them to show them off. But you want to copy the following code, and paste it in between these two tags. Here's what you need.<!-- Blogger Archive Calendar -->
<script type='text/javascript'>
//<![CDATA[
var bcLoadingImage = "http://phydeauxredux.googlepages.com/loading-trans.gif";
var bcLoadingMessage = " Loading....";
var bcArchiveNavText = "View Archive";
var bcArchiveNavPrev = '◄';
var bcArchiveNavNext = '►';
var headDays = ["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];
var headInitial = ["Su","Mo","Tu","We","Th","Fr","Sa"];
// Nothing to configure past this point ----------------------------------
var timeOffset;
var bcBlogID;
var calMonth;
var calDay = 1;
var calYear;
var startIndex;
var callmth;
var bcNav = new Array ();
var bcList = new Array ();
//Initialize Fill Array
var fill = ["","31","28","31","30","31","30","31","31","30","31","30","31"];
function openStatus(){
document.getElementById('calLoadingStatus').style.display = 'block';
document.getElementById('calendarDisplay').innerHTML = '';
}
function closeStatus(){
document.getElementById('calLoadingStatus').style.display = 'none';
}
function bcLoadStatus(){
cls = document.getElementById('calLoadingStatus');
img = document.createElement('img');
img.src = bcLoadingImage;
img.style.verticalAlign = 'middle';
cls.appendChild(img);
txt = document.createTextNode(bcLoadingMessage);
cls.appendChild(txt);
}
function callArchive(mth,yr,nav){
// Check for Leap Years
if (((yr % 4 == 0) && (yr % 100 != 0)) || (yr % 400 == 0)) {
fill[2] = '29';
}
else {
fill[2] = '28';
}
calMonth = mth;
calYear = yr;
if(mth.charAt(0) == 0){
calMonth = mth.substring(1);
}
callmth = mth;
bcNavAll = document.getElementById('bcFootAll');
bcNavPrev = document.getElementById('bcFootPrev');
bcNavNext = document.getElementById('bcFootNext');
bcSelect = document.getElementById('bcSelection');
a = document.createElement('a');
at = document.createTextNode(bcArchiveNavText);
a.href = bcNav[nav];
a.appendChild(at);
bcNavAll.innerHTML = '';
bcNavAll.appendChild(a);
bcNavPrev.innerHTML = '';
bcNavNext.innerHTML = '';
if(nav < bcNav.length -1){
a = document.createElement('a');
a.innerHTML = bcArchiveNavPrev;
bcp = parseInt(nav,10) + 1;
a.href = bcNav[bcp];
a.title = 'Previous Archive';
prevSplit = bcList[bcp].split(',');
a.onclick =
function(){bcSelect.options[bcp].selected =
true;openStatus();callArchive(prevSplit[0],prevSplit[1],prevSplit[2]);return
false;};
bcNavPrev.appendChild(a);
}
if(nav > 0){
a = document.createElement('a');
a.innerHTML = bcArchiveNavNext;
bcn = parseInt(nav,10) - 1;
a.href = bcNav[bcn];
a.title = 'Next Archive';
nextSplit = bcList[bcn].split(',');
a.onclick =
function(){bcSelect.options[bcn].selected =
true;openStatus();callArchive(nextSplit[0],nextSplit[1],nextSplit[2]);return
false;};
bcNavNext.appendChild(a);
}
script = document.createElement('script');
script.src =
'http://www.blogger.com/feeds/'+bcBlogId+'/posts/summary?published-max='+calYear+'-'+callmth+'-'+fill[calMonth]+'T23%3A59%3A59'+timeOffset+'&published-min='+calYear+'-'+callmth+'-01T00%3A00%3A00'+timeOffset+'&max-results=100&orderby=published&alt=json-in-script&callback=cReadArchive';
document.getElementsByTagName('head')[0].appendChild(script);
}
function cReadArchive(root){
// Check for Leap Years
if (((calYear % 4 == 0) && (calYear % 100 != 0)) || (calYear % 400 == 0)) {
fill[2] = '29';
}
else {
fill[2] = '28';
}
closeStatus();
document.getElementById('lastRow').style.display = 'none';
calDis = document.getElementById('calendarDisplay');
var feed = root.feed;
var total = feed.openSearch$totalResults.$t;
var entries = feed.entry || [];
var fillDate = new Array();
var fillTitles = new Array();
fillTitles.length = 32;
var ul = document.createElement('ul');
ul.id = 'calendarUl';
for (var i = 0; i < feed.entry.length; ++i) {
var entry = feed.entry[i];
for (var j = 0; j < rel ="=" link =" entry.link[j].href;" title =" entry.title.$t;" author =" entry.author[0].name.$t;" date =" entry.published.$t;" summary =" entry.summary.$t;" ispublished =" date.split('T')[0].split('-')[2];" ispublished =" isPublished.substring(1);" li =" document.createElement('li');" listtype =" 'none';" innerhtml =" '<a" href="'+link+'" val1 =" parseInt(calDay," valxx =" parseInt(calMonth," val2 =" valxx" val3 =" parseInt(calYear," firstcalday =" new" val0 =" firstCalDay.getDay();" startindex =" val0" daycount =" 1;" x ="1;" cell =" document.getElementById('cell'+x);" innerhtml =" '" classname =" 'firstCell';" innerhtml =" dayCount;" classname =" 'filledCell';" p =" 0;" daycount ="=" length ="=" fillurl =" '0'+fillDate[p];" fillurl =" fillDate[p];" classname =" 'highlightCell';" innerhtml =" '<a" href="/search?updated-max='+calYear+'-'+callmth+'-'+fillURL+'T23%3A59%3A59'+timeOffset+'&updated-min='+calYear+'-'+callmth+'-'+fillURL+'T00%3A00%3A00'+timeOffset+'" title="'+fillTitles[fillDate[p]].replace(/" innerhtml =" '" classname =" 'emptyCell';" vistotal =" parseInt(startIndex)" display =" '';" display =" 'block';" bcinit =" document.getElementById('bloggerCalendarList').getElementsByTagName('a');" bccount =" document.getElementById('bloggerCalendarList').getElementsByTagName('li');" display =" 'none';" calhead =" document.getElementById('bcHead');" tr =" document.createElement('tr');" t =" 0;" th =" document.createElement('th');" abbr =" headDays[t];" scope =" 'col';" title =" headDays[t];" innerhtml =" headInitial[t];" x =" 0;" stripyear=" bcInit[x].href.split('_')[0].split('/')[3];" stripmonth =" bcInit[x].href.split('_')[1];" sel =" document.createElement('select');" id =" 'bcSelection';" onchange =" function(){var" csend =" this.options[this.selectedIndex].value.split(',');openStatus();callArchive(cSend[0],cSend[1],cSend[2]);};" q =" 0;" r =" 0;" seltext =" bcInit[r].innerHTML;" selcount =" bcCount[r].innerHTML.split('>" selvalue =" bcList[r];" m =" bcList[0].split(',')[0];" y =" bcList[0].split(',')[1];" feed =" root.feed;" updated =" feed.updated.$t;" id =" feed.id.$t;" bcblogid =" id.split('blog-')[1];" uplength =" updated.length;" timeoffset = "+00:00" timeoffset =" updated.substring(upLength-6,upLength);}" timeoffset =" encodeURIComponent(timeOffset);" src="'/feeds/posts/summary?max-results=" alt="json-in-script&callback=">
As of May 4 2007 the scripts will autodetect your timezone settings.
Nothing here has to be changed, but there are a few things that some people may want to configure (especially non-English blogs) but for now the defaults will do. If you want to change some things (especially if you have a non-English blog) then check out the full list at the Blogger Archive Calendar Settings Page.
Now save your template. It should save without errors, if not recheck your steps above. One more thing needs to be configured in your Archive Widget. Goto the Page Elements page, find your Archive Widget, and click to edit it.
The title can be anything you want. The style MUST be Flat List as show. Options should NOT have Show Oldest Posts firsts checked. Archive Frequency MUST be Monthly. The Date Format can be anything you want. The calendar will accept whatever you decide here.Save the widget. Then try it out. Go view your blog and if everything is correct you should have the calendar working now.If you've made it this far, and it's working you'll note that without any style associated with it the calendar is a bit plain. But we've got some of that covered as well. Admire your work so far. Make sure it seems to function.To style the calendar, you can add some CSS entries. I've made up a few default styles to choose from. If you are knowledgeable in CSS than you can use the base ones to come up with your own. Or you can pick from what I've already whipped up ( I may add a few more as time goes by).
All the styles I currently have are on their own page, with instructions on how to use.