Adaptive Path's MT setup

As I was starting a follow-up entry on the Adaptive Path redesign, Jay Allen posted a comment under Wednesday’s entry in response to another reader’s question. In an earlier comment, Leonya wrote:

It would also be great to see some technical details about the programming side — MT plugins used, tricks, etc. I’m doing development with MT, so such details can be very helpful.

To reiterate from Wednesday’s entry, Jay played a major role in building out most of the pages and PHP scripts for the new Adaptive Path site, and also customized AP’s Movable Type setup to generate and publish key portions of the site. He didn’t start out intending to write a long response. But as tends to happen when someone is passionate and knowledgeable about a subject, a lot can be said or written. Whether you use Movable Type or not, the information Jay revealed in his response is too valuable to be left buried in one of the many comments on that entry. So I asked him if I could at least pull it up to it’s own entry, potentially exposing it to a wider audience. He agreed. So here it is, in its entirety:


Hey Leonya, most of the backend for Adaptive path is pretty simple right now. The whole site is controlled by four Movable Type blogs: Appearances, Essays, News and static content.

The appearances blog outputs team appearance content on and

The Essays blog controls output of the individual essays as well as the essays index and the essays archive index. It also produces a listing of the latest essay by each team member on each of their individual pages. Each entry in the blog is a full essay with excerpt and is categorized by author and subject which makes for easy indexing down the road as well as the conditional output to the team members’ pages.

The most exotic wrestling with Movable Type on the AP site is the news blog which contains all of the other dynamic content on the site (including Articles Elsewhere, Essay Announcement, Interview and News). These seemingly disparate types of information are output differentially using categories (as with the team members essays).

The static content blog is something I started doing recently with Jad Fair ( Essentially the blog contains no entries, but only templates and template modules. In a perfect world (which AP will reach when we finish up later this year), every single piece of static text and all image tags will be editable through the Movable Type interface obviating the need for anyone to go in an edit files on the file system or to hunt through hundreds of Movable Type templates.

With Jad Fair, I made a gateway page with direct links into every part of the system that Jad would have to use (screenshot). This was important because Jad’s system is even more complicated than the Adaptive Path site is currently and Jad is a novice when it comes to web design so I didn’t want to present him with a very steep learning curve.

If you look at the screen shot, you’ll notice that from that page, Jad can not only access every part of his site, but can also get many different views of all of the entries in the system in every blog. There are also links to create new entries and, in the static content section, links to each template module containing static text. This is essentially what will happen later with Adaptive Path.

We also strived to keep repeating elements out of the templates so every page sets a certain number of variables (main/sub page flag, layout type, and title) and includes the header, footer, announcement box and mailing list box via PHP.

The header file is not static HTML but in fact a full-blown PHP script which sets up functions for use throughout the site and handles differential HTML output between sections as well as top-level pages vs. subpages (e.g. /team vs /team/veen.php) and more…

Lastly the announcement box is a nice piece of coding which essentially dynamically outputs the most important announcement relevant to the current section being viewed. The script initially searches for the top-level (site-wide) announcement file in the web document root directory. If it exists, the contents are read and displayed as the PHP include on a site-wide basis.

If the top-level announcement file does not exist then the top-level section directory is searched next. For instance, if you are loading this essay, then the script would look in the /publications directory for an announcement box relevant to the publications section and that would be displayed regardless of how deeply you descend in that section.

In this way, each section can have its own custom announcement box, or, if there is really big news, they can all be overridden by the main announcement box file.

Needless to say, all of these files can be edited via the static content blog described above.

There are many other things in store for Adaptive Path later in the year, but I’m not going to give away any surprises at the moment. Eventually, as soon as I get some time NOT developing sites, I’ll write up a lot of these things that I do with each client in an article in an online web design zine to be named. I will also explain how, with my most recent client, I pulled together the Movable Type and phpBB user authentication systems for a universal login and seamless integration on the site. Fun stuff!

In closing, I will say that a large part of making PHP and Movable Type work for clients is customizing the MT interface for their needs and making things drop dead simple. After development has ended, my account becomes the administrator account and can be used to control everything and anything but is rarely accessed. All user accounts are set up with permissions to do only the things that are necessary for each blog. On a blog with no categories, no one has permission to edit categories. On the static blog, the only two actions available to people are template editing and rebuilding. This strips down the interface to the bare essentials. Of course, in the case that a gateway page exists, it’s hardly necessary to even navigate with the MT system itself since all links are direct links to the parts of the system needed.

That’s all folks!

[Originally posted by Jay Allen as Comment #80 on a July 9 entry.]