I'm blogging since March 2003 and as time goes I noticed my blog archive list became way too long and ugly. Finally I figured out how to generate it in a nice expandable list form you can see on the right. Here is a my small how to for MovableType powered blog. It's a little bit hacky, but works fine.
1. Install Archive Date Header Plugin from Adam Kalsey. This allows to generate year headers.
2. Insert this piece of Javascript somewhere - if you have common js file that would be the best, but at worse just paste it before </head> in your template. It's a function to handle expand/collapse year clicks.
<script type="text/javascript"> function ec(e) { var targ; if (e.target) targ = e.target; else if (e.srcElement) targ = e.srcElement; if (targ) { rows = targ.parentNode.getElementsByTagName("DIV"); collapsed= targ.className == "year-hdr collapsed"; targ.className = collapsed? "year-hdr expanded" : "year-hdr collapsed"; for(i=0; i < rows.length; i++) rows[i].style.display = collapsed? "block" : "none"; } } </script>
3. Use the following snippet in your template to generate expandable archive list. It generates nested list of archives with year headers.
<div class="side"> <div> <MTArchiveList archive_type="Monthly"> <MTArchiveDateHeader> </div><div> <p class="year-hdr collapsed" onclick="ec(event)" id="archive<MTArchiveDate format="%Y">"> <MTArchiveDate format="%Y"> <p> </MTArchiveDateHeader> <div class="month-row"> <img src="images/folder.gif" align="middle"/> <a href="<$MTArchiveLink$>"><MTArchiveDate format="%B"></a> </div> </MTArchiveList> </div> </div>
4. If you prefer the current year to be expanded by default, insert this piece of javascript after above template:
<script type="text/javascript"> year = document.getElementById("archive" + (new Date()).getFullYear()); if (year) { year.className = "year-hdr expanded"; rows = year.parentNode.getElementsByTagName("DIV"); for(i=0; i < rows.length; i++) rows[i].style.display = "block"; } </script>
5. Define CSS styles. Here are my definitions:
.year-hdr { cursor: pointer; cursor:hand; font-size: 120%; font-weight: bold; background-repeat: no-repeat; background-position: top left; padding:2px; } .collapsed { background-image: url(images/plus.gif); } .expanded { background-image: url(images/solid.gif); } .month-row { display: none; padding-left: 2em; }
Done.
Leave a comment