Archive Date Header Plugin

Freshness Warning
This article is over 16 years old. It's possible that the information you read below isn't current.

In the Movable Type support forums I’ve seen requests for the ability to group archives by date. Most of the time, people want to have an archive index that looks something like:

2002 August July June May April March February January

December November October September August July June May April March February January

There have been a few people that have posted solutions using PHP or JavaScript, but I thought it would be nice to do this straight out of Movable Type.

Thus the Archive Date Header plugin was born.

Tim Appnel has taken over the maintenance and support of this plugin as of Oct 2004.


You can get this plugin by downloading


Unzip and connect to your FTP server and open the directory where you have Movable Type installed.

Create a directory there called plugins if there isn’t one already and copy to the plugins directory.

Using the plugin

Once you’ve installed the plugin you will have a new container tag, MTArchiveDateHeader. The tag only works within an MTArchiveList container tag, and if you try and use it elsewhere, you’ll receive an error.

If you use monthly archives, the contents of this container will only be printed when a new year starts.

If you use weekly archives, the contents of this container will only be printed when a new month starts.

If you use another sort of archive, the contents of this tag won’t be printed at all.

Here’s an example:

<MTArchiveList archive_type="Monthly">
<p><b><MTArchiveDate format="%Y"></b></p>
<a href="<$MTArchiveLink$>"><MTArchiveDate format="%B"></a> 


Like our other freeware, this plugin is released under the open-source MIT License. In plain English, that means you can do whatever you want with the software, including modifying it, selling it, or eating it, but we’re not responsible for anything that goes wrong.

Revision History

1.0 - August 4, 2002 Initial release.

October 6, 2002 12:27 AM

I'd like to see a tag for better formatting possibilities. For instance, I'd like to have the year, followed by the months as an unnumbered list, but there is no way to add a closing tag after the months with this plugin.

October 17, 2002 7:54 AM

It's nice. But I'd like to build a nested set of list elements. I can kick off a list with a *ul* in *MTArchiveDateHeader*, but without *MTArchiveDateFooter* I can't close it again with its */ul* tag.

January 24, 2003 6:20 AM

Is there anyway I can use both? so if I display my entries by weeks (which I do) it can then display... 2003 January 01/01/03-07/01/03 08/01/03-etc... Feburary 03/02/03-

January 24, 2003 6:30 AM

Nevermind I'm being slighty stupid... I've worked out a way of doing more or less the same thing

March 3, 2003 1:24 PM

This is a great little plugin, just what I've been looking for. there a way to list only a single year?

Adam Kalsey
March 4, 2003 9:24 AM

There's no way to do that with the plugin or with the built-in MT template tags.

July 19, 2003 5:00 AM

How can I reverse the months? i.e. 2002 jan feb mar... 2001 jan mar apr...

Adam Kalsey
July 20, 2003 10:35 AM

What you'd need is a way of reversing the archive sort order. I don't MT can do that natively, but you might find a plugin that does it if you hunt around at

Rob Novak
August 22, 2003 6:07 AM

This is just what I've been looking for. Thanks for putting the time in on this plugin.

Rob Novak
August 22, 2003 6:46 AM

Found a bug. If the archive_type="Weekly", then a new header is generated for each archive entry. Here's the offending code: } elsif ($at eq "Weekly"){ $this_date = substr $ts, 5, 6; This extracts the 6-character substring starting at zero-based offset 5. Unforunately, this captures the 2nd digit of the month, the day, and part of the zero-padding. So, it's unique for each entry. These lines should read: } elsif ($at eq "Weekly"){ $this_date = substr $ts, 4, 2; Grab the 2 characters (the month) at zero-based offset 4. The datestamp from $ts is chars 0-3 (year), 4-5 (month), and 6-7 (day).

Rob Novak
August 22, 2003 8:01 AM

If you want to handle Daily archives with per-month headers as well, the following if..elsif..else statement will do it nicely: if ($at eq "Monthly") { $this_date = substr $ts, 0, 4; } elsif ($at eq "Weekly"){ $this_date = substr $ts, 4, 2; } elsif ($at eq "Daily"){ $this_date = substr $ts, 4, 2; } else { return ''; }

September 4, 2003 8:27 AM

Forgot to thank you so.. Thanks :)

November 18, 2003 2:02 PM

To generate nested lists of archives you can use this plugin together with Brad Choate's MTPerlScript plugin, with your template something like this: ----- <ul> <MTArchiveList archive_type="Monthly"> <MTArchiveDateHeader> <li><$MTArchiveDate format="%Y"$> <ul> </MTArchiveDateHeader> <li><$MTArchiveDate format="%B"$></li> <MTPerlScript> $a = '<MTArchivePrevious><$MTArchiveDate format="%Y"></MTArchivePrevious$>'; $b = '<$MTArchiveDate format="%Y"$>'; if ($a ne $b) {print "</ul></li>"}; </MTPerlScript> </MTArchiveList> </ul> ----- Example of output: <ul> <li>2003 <ul> <li>February</li> <li>January</li> </ul> </li> <li>2002 <ul> <li>December</li> <li>November</li> <li>October</li> </ul> </li> </ul>

September 17, 2004 11:30 PM


Excerpt: しました。 Archive Date Header Pluginを入れて。 ソースも書いてあるので、そちらを参考に。...

Trackback from BnKB
February 16, 2005 11:50 PM

Archive Date Header Plugin

Excerpt: In the Movable Type support forums I’ve seen requests for the ability to group archives by date. Most of the time, people want to have an archive index. There have been a few people that have posted solutions using PHP...

These are the last 15 comments. Read all 19 comments here.

This discussion has been closed.

Follow me on Twitter

Best Of

  • Pitching Bloggers Forget what you learned in your PR classes. Start acting like a human instead of a marketer, and the humans behind the blogs will respond.
  • Debunking predictions Read/Write Web's authors have some goofy predictions.
  • Google on the desktop Google picks up Picasa, giving them an important foothold on people's PCs.
  • Best of Newly Digital There have been dozens of Newly Digital entries from all over the world. Here are some of the best.
  • Rounded corners in CSS There lots of ways to create rounded corners with CSS, but they always require lots of complex HTML and CSS. This is simpler.
  • More of the best »

Recently Read

Get More

Subscribe | Archives



Networking as an entrepreneur (Oct 23)
Having a network is crazy important. Networking is not.
Stretching your team (Jun 11)
Stretching your team is one of the best ways to improve your output, your team's happiness, and your velocity. But they'll need coaching.
Physical camera shutter for Cisco Spark Board (Jul 6)
A 3d printable design for a camera shutter for a Cisco Spark Board
My Travel Coffee Setup (Jan 20)
What my travel coffee brewing setup looks like, and how you can build your own for under $100.
Turkey Legs (May 30)
Product naming gone awry.
Speaking for Geeks: Your Slides (Dec 17)
Tips and tricks for creating great slides.
Speaking for Geeks: Writing Your Talk (Dec 14)
Don’t wait until the night before the talk to write it. Crazy, I know.
Speaking for Geeks: Tell a Story (Dec 13)
Telling a story keeps your presentation focused, keeps your audience interested, and makes it easier for you to remember your talk.

Subscribe to this site's feed.


Voice and communications platforms, including Tropo and Phono. Work.
The Sacramento technology startup community.
Pinewood Freak
Pinewood Derby tips and tricks


Adam Kalsey

Mobile: 916.600.2497

Email: adam AT

AIM or Skype: akalsey



©1999-2018 Adam Kalsey.
Content management by Movable Type.