Movable Type 4.1 has just been released. This represents first stable release of Movable Type Open Source (MTOS). In addition, the commercial version has also been released, which includes the same MTOS 4.1 + the "Professional Pack", which includes a slick commercial template set and Custom Fields functionality. MT 4.1 includes a number of new features and user interface enhancements. Highlights include system-wide template modules, a pluggable rich-text-editor, and new templates sets feature that lets you choose a template set when you create a new blog.

I have done a quick review of MT Hacks plugins on MT 4.1, and most of them that worked under 4.0x also work fine under 4.1. However, several plugins will need to be updated before they are fully functionally under 4.1. These include:

  • Visitor Stats - If you upgrade to 4.1 now, the plugin will continue to tracks stats, but the dashboard graphs won't show, and there may be a few other admin interface oddities. An upcoming version will address these.
  • User Profiles - Some user interface elements won't appear properly. Also, MT 4.1 comes with user photos as a core feature, so an upcoming version of User Profiles will migrate your profile photos to use the 4.1 system.
  • Fast Search - Fast Search may work fine under many cases in 4.1, but in some cases a "division by zero" error will occur, caused by changes made in 4.1. This will be addressed in an upcoming version. Get the Update Here.
  • Dynamic Menus - Needs to be updated to work with 4.1.
  • Breadcrumbs - On most screens, it is okay, but in some cases, a little wacky.

There may be others, I haven't tested everything yet. If you are brave enough to upgrade to 4.1 right away, please reply to this entry with any issues or strangeness that you encounter with my plugins.

Designed to be used with the Template Installer plugin, Template Exporter is a plugin for Movable Type that enables you to easily export your blog templates in a way that can be shared, distribute, or even sold to to others.

New in Version 1.1

  • Support for the new "Template Sets" feature in MT 4.1. Starting with MT 4.1, when you create a new blog, you can choose from multiple template sets to use. Template Exporter v1.1 enables you to export your current templates into sets that you can chose when creating new blogs, in a very easy way. More info on this feature below.
  • The code has been optimized to improve performance.

Note: templates exported with version 1.1 of Template Exporter cannot be install with older version of the Template Installer plugin, you will need Template Installer v1.1 (or higher).

Also note that version 1.1 can be used with both MT 4.01 and MT 4.1.


The easist way to describe how Template Exporter works is to show you. The first video below shows how you can export all of a blog templates:

And the the following video shows how you can export only selected templates:

Potential Uses of Template Exporter

This plugin can be put to use in several ways:

  • To create a "backup" of their templates, which can be re-installed later if desired.
  • To copy a set of template from one blog (or installation) to another (some call this "template portability").
  • To share your templates with friends, or post them for download on your blog.
  • To package and sell your customized template designs.
  • To deploy a common template design to multiple blogs in an MT installation.
  • To distribute blog Widgets.
  • To distribute blog templates with MT plugins, providing easy installation.

How it Works (if you care)

Template Exporter provides two main functions:

  • It extracts your templates and saves them in files named according to the template_identifier or template_name, such as main_index.mtml. Each template gets stored in its own file. (Technical note: if a template has an "identifier" field defined in the database, then it will be used for the file name. If not, a "dirified" version of the template name will be used, so "Main Index" will become "main_index".)
  • It automagically creates a YAML file named config.yaml, which defined the configuration information for template set. This includes things like the type and name of the template, and for index templates, the output file and "rebuild with indexes" setting. For example of a Template Exporter config.yaml file, click here.

These files are then saved in their own directory inside a "template_exporter" subdirectory of your blog. You can then use FTP or other means to download the directory and files from there, and subsequent shares the exported template or use with Template Installer to install them on another blog or installation.

Using Template Exporter with the MT 4.1 Template Sets Feature

Movable Type 4.1 includes a feature called Templatee Sets that enables you to choose a template set when you create a new blog. Template Exporter supports this template set format, so you can export your favorite template set and use it as one of the template set choices. No code or plugin creation required. Just use these easy steps:

  1. Go to the Templates area for the blog you want.
  2. Choose the "Export Templates" link from the "Actions" menu on the right side of the page.
  3. Give the new set a name and export it.
  4. Now take the exported set (including the folder that contains the set - for example, if you named it "Cool Style Templates" then the folder would be 'cool_style_templates') and move it into the 'plugins' directory.
  5. Create a new blog and your set will be among the options!


  • MT4+


  1. Download and extract the zip file and upload the contents of the 'plugins' folder to the 'plugins' directory of your MT installation.
  2. Go the blog you want, then Design > Templates then choose the "Export Templates" link from the lower right. (Or, to export only selected templates, check the boxes of the templates you want, then choose "Export Template(s)" from the "more actions" drop-down box, then click "Go".)
  3. Give the template set a name, using only letters, numbers, and spaces, and then click Continue.

Get Template Exporter

Commercial License - $97

Personal License - $33

Comments and suggestions are welcome.

Template Installer is a plugin for Movable Type that makes it easy to install new template sets for your blogs. Combined with Template Exporter plugin, this makes is very easy:

  • For bloggers to share templates / widgets with others
  • For designers to package, sell, and distribute template sets.
  • For companies to deploy template sets to company blogs

Currently, sharing templates requires a lot of cutting and pasting, a very time consuming process. Using Template Installer it takes only a few clicks to install a partial or complete template set in your blog.

New in Version 1.1

Update 1/25/08 13:15 EST:Due to an error on my part, the download link was pointing to the old version for the previous 24 hours. This is now fixed. Please use the download link below to get the new version.
  • Version 1.1 of Template Installer now includes support for MT 4.1. You can use this version with either MT 4.01 or MT 4.1.
  • The code has also been optimized to reduce CPU / memory usage, thus improving performance.
  • No new features have been added.

Note: Template Installer v1.1 can be used to install templates that have been exported using any version of Template Exporter. Templates exported by the new Template Exporter v1.1 cannot be installed with older versions of Template Installer, you'll need version 1.1 for those.


The following screencast shows how easy it is to install new templates using Template Installer. In this example, the user chooses to install the "Default Templates", which is handy when you want to revert back to the defaults. The same process would be used to install a completly new set of templates. Click on the video below to watch:

As you can see, it is very quick and easy. As you can see from the last screen, Template Installer will back up your existing templates if they have been customized from the MT defaults.

The missing step from the above example is to upload the desired template set to the /plugins/TemplateInstaller/template_sets directory. No need to edit any files or settings. Once you have uploaded the set, it will appear as an option when you click "Install Templates" from the right side of the Manage Templates screen.


  • MT4+
  • Template Refresh plugin (included with MT4)


  1. Download and extract the zip file, and upload the contents of 'plugins' folder to the 'plugins' directory of your Movable Type installation.
  2. Go to Design > Templates and then choose the "Install Templates" link from the lower right of the page.
  3. Choose a template set from the drop-down box, then click continue.
  4. View the results, then click "return to templates", and you are done.

Included Template Sets

The current version of Template Installer includes 3 template sets:

  • Default Templates - These are the default templates that come with MT4. While you can also use the Template Refresh plugin to re-install these, Template Installer provides easy access to do so. This set is also a good example set to see how it works.
  • Default Templates with Prefix Notation - A version of the default templates that use the new prefix notation. For example, <MTEntries> becomes <mt:Entries>, and so on. This template set will have the same output in your published blog as the default set, only the notation used is different. Note that the tags in this are not complete lowercases (it used mt:EntryTitle and not mt:entrytitle) Thank you to Marleen Zachte for creating this set and giving permission for its inclusion with this plugin!
  • Page Template Only - This set will install the MT4 default "Page" template, as well as the included "Page Detail" module. This set will be useful for those upgrading from previous version of MT, since the Page template is not automatically installed on existing blogs, during the MT4 upgrade.
  • 2 Column Layout Header - This set provides a replacement to the "Header" template module. The default MT4 templates use a 3-column layout. If you want to eaily change your blog to a 2-column layout, just install this template set.
  • Template Installer Widget - The set includes a widget template that you can use with the MT Widget Manager to show your support and spread the word about Template Installer. It is also a good example of how Template Installer can be used to distribute and install blog widgets.

Want more template sets?

Template Installer is new, so there are currently not many template sets available. If you have template sets that you would like to share, I will post a link to them here. Please contact me using the contact link in the menu above. You should also check and post your template sets to the following page on the MT wiki: Template Sets for MT4.

Get Template Installer

Template Installer is free to MT Hacks members for commercial or non-commercial use:

Download Now:

Download Now
Downloads: 4885

Membership required, please sign-in or register:

A Feature for Plugin Developers

For certain plugins, it makes sense to distribute custom template or widgets along with the plugin code. In the past, I included a special template installer routine to help users install such templates. In future, I will be use Template Installer for this purpose, and you can too. Rather than ask users to upload your template set to the Template Installer directory and ask them to install the set, I have include a "side door" feature that can be used instead. Using this approach, the templates are stored in a sub-directory of your plugin. Then you can simply present a link to your users to install the templates. The link would look something like this:

<a href="javascript:void(0)" onclick="return openDialog(false, 'install_blog_templates', 'template_path=$your_template_path&set=$your_set_name&blog_id=$blog_id &magic_token=$magic_token&return_args=$your_return_args')">Install Templates</a>

Of course, you will likely use template tags to form this url, but the key things are to make it open a dialog, to set the "template_path" parameter to the path to your template files (relative to the mt root directory), the "set" parameter to name of your set, and you can also set the "return_args" to return the user to your plugin screen after the templates have been installed. When users click this link, they will bypass the "choose a template set" screen and your templates will be installed immediately.

How do I Export Templates for use with Template Installer?

While you could do it manually, and it wouldn't be too hard, you probably want to use the sister plugin, Template Exporter, which automates the process in a single click.

As always, thoughts and suggestions appreciated.

Pagination is plugin for Movable Type that enables you to paginate lists of entries. For example, at the bottom of your home page, you could add a "Next" link so your readers can go to "Page 2" and read previous entries. You can display a list of linked page numbers to enable visitors to jump to any page number they want.

With Pagination Pro, you can also paginate your Category, Author, and date-based archives, and even paginate your Entry archives, displaying only a small number of comments on each page.

Try it Now - Live Demo

The MT4 Test Blog has the Pagination Pro plugin enabled. Scroll to the bottom of the home page to see the list of pages and follow the links. Also take a look at an example of a paginated Category archive here. Finally, take a look at a paginated version of a 300+ comment entry here.

How it Works

My goal here was to create a pagination plugin with high performance. I didn't want it to slow down rebuilds, and I wanted pages to display for readers without delay. With these goals in mind, I decided to dynamically render pages 2, 3, 4, and so on. This means that unlike the default for most pages in Movable Type, pages 2+ are not static files that get published to your blog directories. They dynamically rendered by the plugin's page viewer script. Note that this viewer script is Perl-based and does not use MT's built-in PHP-based dynamic publishing system. The benefit of this is that you can virtually any plugin template tags in your paginated templates, and you don't need to use PHP. So when someone views page 2, the script goes into action and builds the page and displays it.

Paginated URLs are clean, ending in index.html?page=2 (or similar). Pagination makes use of mod_rewrite for Apache to keep these URLs clean (most MT sites run on Apache, but there may be some alternative approaches for other web servers).

Page-Level Caching

To speed up dynamic page views and reduce CPU/memory/database usage, Pagination supports (optional) page-level caching, powered by the Cache Block plugin. This means that once the plugins generates the HTML for "page 2", it will store that in the cache for next time. And next time someone wants to see "page 2", it can be quickly fetched from the cache. In my tests, dynamic page views from the cache took about 0.04 seconds, so this is very fast. In the plugin settings you can specify how long to cache pages before refreshing the cache.

Template Tags

Pagination comes with a template module that makes it easy to implement -- in most cases you can simply include the module in your existing templates and it will 'just work'. So you may not need to learn or use the template tags below. But if you want to customize the appearance of your Pagniation links, you can use/edit the following tags:

  • <mt:PaginationPages> - This is a container tag for displaying linked page numbers, previous / next page links, etc. This tag should only be placed inside the following containers: <mt:EntriesFooter>, <mt:EntriesHeader>, <mt:CommentsFooter>, and <mt:CommentsHeader>. There are several arguments:
    • max_pages - (Required) The maximum number of page numbers to display at one time. Note that page numbers will roll forward as readers view higher page numbers, just like Google paginated search results.
    • glue - (Optional) This should contain some text or symbols that you to display bewteen each page number. For example, if you want 1 - 2 - 3, then use glue=" - ".
    • lastn - (Required) The number of items shown on each page. This must match the lastn argument of the parent <mt:Entries> or <mt:PaginatedComments> tag.
    • archive_type - (Optional) For advanced use, you can use this tag to override the archive_type used to calculate the page numbers and links. If omitted, the plugin will use the archive_type of the page being built.
    • class_type - (Optional) For advanced use, this tag will override the type of MT object being counted to determine the number of pages.
  • <mt:PaginationPageNumber> - Used inside a <mt:PaginationPages> container, this tag will display the page number being processed in the loop (not the current page number that is being published/viewed).
  • <mt:PaginationPageLink> - Used inside a <mt:PaginationPages> container, this tag will display the URL to page number being processed in the loop.
  • <mt:IfPreviousPage> - Conditional tag that is true if the page being displayed is 2 or higher.
  • <mt:PaginationPreviousPageLink> - The URL to the previous page.
  • <mt:IfNextPage> - Conditional tag that is true if the currently viewed page is not the last page.
  • <mt:IfNotLastPage> - Conditional tag that is relative to the page being processed, not the page being viewed - returns true if the page being processed is not the final page.
  • <mt:LastPageLink> - The URL to the last page.
  • <mt:LastPageNumber> - The number of the last page.
  • <mt:PaginatedComments> - (Pro only) This is replacement container tag for <mt:Comments>. If you want to paginate the list of comments on an Entry archive, you should use <mt:PaginatedComments> instead of <mt:Comments>. You can use all the same <mt:Comment_____> tags inside the container. Arguments include:
    • show - The number of comments to show per page. (Note that you can also use 'lastn' for this argument)
    • offset - The offset for the page of comments. This should always be set to "$pagination_offset".

Templates Set

Pagination comes with two templates:

  • Pagination - A template module that can be included in other templates to display page links.
  • HTACCESS for Pagination - An index template that builds the required mod_rewrite rules. Important: The output file for this template has been set to "htaccess.txt" on purpose. Some sites have already have a ".htaccess" file and you want to be careful not to overwrite the existing one (for example, if you use MT's PHP dynamic publishing, with my Fast Search plugin or otherwise). Check to see if you already have an .htaccess file and if you do, you may want build this template as "htaccess.txt" and then copy and paste the rules into the appropriate place in your .htaccess file (if using MT's dynamic publishing, paste before the existing rules.) If you want to use this template to build your .htaccess file, you will need to change the output file to ".htaccess".


Note: while not required, the Cache Block plugin is needed if you want to use the Pagination caching features.


  1. Download the zip file and upload the contents of the 'plugins' folder to the 'plugins' directory of your MT installation.
  2. Change the permissions of the /plugins/Pagination/pages.cgi script to 755 (CHMOD 755).
  3. Go to the blog you want and then to Preferences > Plugins and then open the settings for the Pagination plugin. Enable the caching settings if desired, then Save.
  4. Return to the settings and click the "Install Templates" button. This will install the templates mentioned above.
  5. Setup your .htaccess file with the Pagination rules, as described above.
  6. Edit your Main Index template and add the following before the </MTEntries> tag:

    <mt:Include module="Pagination">

  7. Modify your <MTEntries tag to include the argument offset="$pagination_offset". This is important. Example: <MTEntries lastn="10" offset="$pagination_offset">

  8. (Pro only) Do the same for your "Entry Listing" archive template, for both MTEntries containers.

  9. (Pro only) If you want to paginate your comment listings on your Entry archives, edit the "Comments" template module to replace the <MTComments> container with the MTPaginatedComments container, as discussed above. Be sure to include show="10 offset="$pagination_offset".

Get Pagination Pro

Commercial License for 1 to 10 blogs - $97

Blog Network License for 10+ blogs - $249

Personal License for 1 to 4 blogs - $33

Get Pagination

Pagination is free for personal or commercial use, but you must leave the "powered by" link, which is added automatically below the paginations links.

Download Now

Download Now
Downloads: 1631

Membership required, please sign-in or register:

As always, comments, questions, and suggestions are welcome.

Cache Block is a plugin for Movable Type that can dramatically speed up publishing by caching blocks of built template code. Cache Block is very flexible, enabling you to cache an entire page, a small template snippet, a template module, a sidebar widget, and entire sidebar, etc. Each block can be set to expire after a certain duration -- some blocks you may want to cache for 5 minutes, others for hours, or even days. When used wisely, the result is significantly faster publishing times and faster comment-posting.

Cache Block on ReadWriteWeb

ReadWriteWeb is a very popular technology blog with many entries and comments. And with over 130 front page Diggs and counting, ReadWriteWeb gets a lot of traffic. With the goal of speeding up publishing and comment posting, I recently implemented Cache Block on ReadWriteWeb. Combined with other optimizations, Cache Block helped to significantly improve publishing speed and now comments post much faster. This is one example of Cache Block being used on a live, busy site.

How It Works

For each page that is published by Movable Type, a large number of template tags are evaluated by the system, which often requires many database lookups. The Cache Block plugin strives to reduce those database lookups by caching groups of template code that has already been evaluated. For example, suppose you decided to cache your entire sidebar. The first time MT publishes that sidebar, it will do many database lookups to generate lists of recent entries, comments, lists of archives and tags, etc. After that, the Cache Block plugin will take all of that sidebar HTML and save it in the cache. The next time MT needs to publish your sidebar, it will find it in the cache, so it will skip the evaluation and related database lookups for the entire sidebar, and simply fetch the pre-built sidebar from the cache. This can speed up the process a lot. Imagine if you are trying to publish a 1000 page site, and each of those pages includes the sidebar!

Behind the scenes, Cache Block checks to see if memcached is available and enabled. If it is, CacheBlock will stores blocks using memcached, which is very fast. BUT, you don't need to have memcached! If memcached is not available, Cache Block will simply store the block in the database. As such, it will still require a database lookup to retrieve it from the cache, but you can save dozens or even hundreds of database lookups by caching significant segments of built template code, by replacing them with a single lookup to the cache. Even without memcached, Cache Block can dramatically speed up publishing.

Template Tags

Cache Block has just one template tag:

  • <MTCacheBlock> - This container tag should be wrapped around the block that you want to cache. Everything between the opening <:MTCacheBlock> and the closing </MTCacheBlock> will be saved as a single block in the cache. There are several arguments for this tag:
    • key - (Required) The key argument represents the cache key, a unique identifier for the cache block. Each block should have unique key. Note that keys are not namespaced on a per-blog basis -- meaning that a key of "foo" used in one blog will overwrite a key of "foo" on another blog.
    • expiry - (Required) The number of minutes that the block will be stored in the cache. Longer expiry times will result in more speed improvements, but the ideal expiry depends greatly on the content being cached and the volume of activity of your site.
    • refresh - (Optional) This argument is designed for temporary use only. Adding refresh=1 will force an update of the cache. In other words, with this argument, blocks will never be fetched from the cache. This argument is useful when you are making design changes to your templates, and you want to refresh the cache block so that you can view your changes on your site. After your template editing is complete, remember to remove the refresh=1 from all MTCacheBlock tags, so you can once again reap the benefits of the cache.

Cache Block Expiry

For Cache Block stored in the database, blocks are expired by a scheduled task that is set to run once per minute, at most. To ensure timely expiry of cache blocks, I strongly recommend that you set up a cron job to run the /tools/run-periodic-tasks script on a regular frequency that is consistent with your caching strategy. Click here for more information about scheduled tasks and setting up a cron job.

Cache Block Pro

Cache Block Pro includes the same powerful caching features, and adds powerful administration tools to facilitate further optimization and management of your Cache Blocks. Features include:

  • Flush Entire Cache - This useful function provides a quick way to flush your entire cache. Normally, you wouldn't want to do this, but during a redesign of your site, this one can come in handy.
  • Cache Blocks Widget - When you are editing a template, this widget will appear on the right side of the page, listing the Cache Blocks used by the template. When possible, listed blocks will have a "flush" link next to them so you can flush a single block easily. You can also click on the linked names of the blocks to view the contents of the Cache Block.
  • View All Cache Blocks - Use this feature to view a list of all Cache Blocks on the system, including the expiry date of each. Note that this feature is not currently available if you are using memcached.
  • Edit Cache Block - Manually edit the contents of specific Cache Blocks and change the expiry dates as desired.
  • View Rendered Block - From the Edit Cache Block screen, you can view the rendered HTML of the block. Instead of view the built HTML source, this will display thye block as it would be shown in the browser (in most cases, without applying your external styles)


  • MT3.3+

Note: The Pro features described above require MT4.01 or higher.


  1. Upload the contents of the 'plugins' folder to the 'plugins' directory of your MT installation (usually /cgi-bin/mt/plugins/)
  2. Start using the >MTCacheBlock> tag in your templates, as described above.

Click here for Cache Block Examples.

Get Cache Block Pro

Commercial License for 1 to 10 blogs - $97

Blog Network License for 10+ blogs - $249

Personal License for 1 to 4 blogs - $33

Get Cache Block

Cache Block is free for personal or evaluation use.

Download Now

Download Now
Downloads: 401

Membership required, please sign-in or register:

As always, comments, questions, and suggestions are welcome.

MT Forum is a forum plugin for Movable Type.

I have been using Movable Type as a forum for over 3 years. Finally, I have taken the time to package it all up so that it can be released as a plugin. Actually, most of it has been completely re-written to include more features and for better performance.

Sneak Preview: Live Demo of MT Forum

The first version of MT Forum will be released soon. For now, you can give it a try on the MT4 Test Blog. MT Forum has the familiar look and feel of online discussion forums. You can register for an account, or sign-in with OpenID, Vox, etc. Or post without authenticating (admins decide who can post). Try out the demo by following the link below, create some new topics and reply to existing topics:

Click here to try MT Forum

Please note that some of the features shown in the demo are provided by other plugins from MT Hacks, such as Visitor Stats Pro, User Profiles Pro, and Comment Titles. These plugins are not required to use MT Forum, but certain features (such as topic view counts, user profile pages, and comment titles) will only be available if you have these plugins installed. The Entry Post plugin is required.

Please reply to this entry with feedback, or post on the demo forums!

Stay tuned for more info and the upcoming release of MT Forum.

I am going to submit this as a bug report as well, but I wanted to share this on Pronet, as it may save other MT consultants/developers the hours of support time that I have spent on this issue. I have seen this 3 times with user of plugins, and it can be difficult to diagnose.

In short the problem seems to affect people:

- who upgrade to MT4 from a previous version of MT,
- AND who used dynamic publishing before and after the upgrade,
- AND whose path to MT4 is different from the path to the older version (for example, before the upgrade is was /var/www/cgi-bin/mt and after it was /var/www/cgi-bin/mt4)

The problem is that the old mtview.php (in the blog root directory) does not get updated. The side effect is that the mtview.php file is still pointing to the pre-MT4 directory, point to the old mt-config.cgi and the old mt.php file. In many cases the old versions of these files still exist at the old paths, because when people upgrade they often upload MT4 to a new directory, leaving the older MT in place -- this makes this problem difficult to diagnose, because MT4 is read a valid config file and valild mt.php library -- it doesn't know that it has the old files.

Things can get even more confusing when the old MT config file points to a old, pre-upgrade version of the database that still exists -- one user of Fast Search was stumped (as was I) when after upgrading to MT4, his search results included only the pre-MT4 entries -- there were no error messages at all, but the search was being handled by the older version of MT against the older version of the database!

Another symptom of this problem is when MT can't seem to find certain dynamic template tags. Errors like:
Smarty error: [in mt:17 line 23]: syntax error: unrecognized tag 'MTTemplateTagName' will result, even though the php files may be in the correct location.

Part of the problem here stems from the fact that MT4 got "smart" and no longer included the "dynamic bootstrapper" template with each blog, that built the mtview.php, but rather built it behind the scenes when publishing settings are saved. The side effect was that the file didn't get rebuilt with indexes, as was the default in previous versions. It was also "out of sight, out of mind" with MT4. While the MT4 upgrade includes an upgrade task to remove the mtview.php bootstrapper, it does not delete the the old mtview.php file, nor does it attempt to update the existing mtview.php file(s). :( I think (but am not sure) that saving the publishing settings for blog will attempt to update the the file, but who changes there publishing setting after upgrading?

If you or a client run into any strange dynamic publishing issues under MT4, I recommend the following as one of the first troubleshooting steps:

1. Rename the existing mtview.php file.
2. Save the Publishing settings for the blog. This should recreate the mtview.php.

I hope this helps save others from the hours of frustrating troubleshooting that I have ensured on this....

User Profiles is a plugin for Movable Type 4 that extends the user profiles in MT4. Version 1.5 adds the ability for commenters to add user profile images (sometimes called avatars), which can be displayed when posting comments. Also new is User Profiles Pro, which includes user profile pages for all authors and commenters, and extended profiles with many built-in fields and support for extra fields.

From the admin interface, here what the author photos feature looks like on the dashboard:

In the Pro version, extended profiles can be edited from the admin interface, or by commenters:

New Features in User Profiles 1.5

  • Commenters can upload a profile image (any authenticated commenter, including Vox, OpenID, etc.)
  • Authenticated commenters can edit basic profile info
  • Members widget displays user profile images

Features in User Profiles Pro

User Profiles Pro includes the following additional features:

  • Authors and commenters have extended profiles. Extended profiles come with 22 built-in fields (such as City, Country, Birthdate, About Me, etc.).
  • Custom fields for extended profiles can be defined by system administrators
  • Publish profile pages for each author and commenter, including profile images, basic and extended profile info, recent entries, and recent comments.
  • Automatically import profile images (avatars) for all your existing users from Gravatar, MyBlogLog, Vox, Livejournal, and BlogCatalog.
  • AJAX function auto-imports avatars in the background after new commenters login.

How it Works

From admin MT4 interface, users can add a profile image by editing their profile. (System admins can perform this task for any user on the system):

Users will the be prompted to upload a profile image:

Square images are recommended, but if the uploaded photo is not a square, the plugin will automatically crop the image to make it a square.

After saving the profile image, the image will appear in the user profile:

Authenticated commenters can use a similar process to edit their profiles and upload a profile image:

Finally, the <MTAuthorImageURL> and <MTCommenterImageURL> tags can be used to display the user's profile image on your published blog pages.

Profile images are stored as Assets within Movable Type. This means that these images can also be used in other ways, such as inserting them into entries. Movable Type will keep the full size image (cropped to square, if necessary) and create thumbnails when using the tags described below. Each profile image is tagged with 'profileimage'.

With User Profiles Pro, extended profiles can be edited, either from the admin interface, or by commenter via the "edit profile" link after they login. User Profile pages are published automatically as static pages, which boosts performance for high traffic sites.

Live Demo - Try User Profiles Pro Now

User Profiles Pro has been enabled on the MT Test Blog. Start from this entry and read the instructions. Sign in, edit your profile, upload a photo, view your published profile. Try it now!

Template Tags

Version 1.5 of User Profiles includes the following template tags:

  • <MTAuthorImageURL> - This displays the url to a thumbnail of the author's profile image. There is one optional argument:
    • size - the size in pixels of square thumbnail, default is 50 pixels (each side)
  • <IfMTAuthorImage> - This conditional tag displays its contents if the author has uploaded a profile image.
  • <MTAuthorImageURL> - This displays the url to a thumbnail of the commenter's profile image. There is one optional argument:
    • size - the size in pixels of square thumbnail, default is 50 pixels (each side)
  • <IfMTCommenterImage> - This conditional tag displays its contents if the commenter has a profile image. Note: if you posted a comment on your own blog (while signed in), your profile image will be displayed using this tag.

Example: In your "Entry Metadata" template module, your could add the following:

<MTIfAuthorImage><img src="<MTAuthorImageURL size="50">" align="left" /> </MTIfAuthorImage>

This would display the author's profile image, if they have one in their profile.

Similarly, in your "Comment Detail" module, you could add:

<MTIfCommenterImage><img src="<MTCommenterImageURL size="50">" align="left" /> </MTIfCommenterImage>

Both example above can be seen in action on the MT4 Test Blog.

User Profiles Pro Template Tags

User Profiles Pro includes the following additional tags:

  • <MTAuthorProfileURL> - This displays the url to the author's published profile page.
  • <MTCommenterProfileURL> - This displays the url to the commenter's published profile page.
  • <MTEntryAuthorLink> - This replaces the core tag of the same name. Instead of linking to the author's URL, it will link to the author's profile page.
  • <MTCommentAuthorLink> - This replaces the core tag of the same name. Instead of linking to the commenter's URL, it will link to the commenter's profile page. If the commenter was not authenticated, it will link to the URL provided.
  • <MTUserProfile> - This tag is used to display extended profile information. There is one required argument:
    • field - the name of the field that you wish to display. For built-in fields, valid values are birthdate, first_name, last_name, address, city, state, country, mobile_phone, land_phone, sex, marital_status, occupation, company, signature, about_me, activities, interests, music, tv_shows, movies, books, or quotes. For custom-defined fields, use the defined name of the field (more on custom fields below). Note that for the built-in "birthdate" field, you can also specify a "date_format" argument that follows MT's date formats.
  • <MTAuthorComments> - This container tag, which is used on the default "User Profile" template, displays the comments from the author in context. On the published User Profile page, this is used to display a list of recent comments by the user.

User Profiles Template Set

User Profiles comes with several default templates that are easy to install with the Template Installer plugin. The User Profile template set includes the following templates:

  • Javascript - This a replacement for the core "Javascript" index template. If you have customized your existing template, it will be backed up during the installation process. The new version includes some new features for User Profiles.
  • Edit User Profile - This template module is used to display the "edit profile" page that commenter's see when they click the "Edit Profile" link. Note that this template also displays the image upload and the "edit extended profile" pages. You can customize the user profile experience (and extended profile fields) bu editing this module. Note: you should not rename this template module.
  • User Profile (Pro only) - This template module is used to publish the User Profile pages. Customize this template to change the way user profiles are displayed. A special note about this template -- when you save it, it will automatically republish all user profile pages (no need to republish your site). Note: you should not rename this template module.
  • Members - This widget template displays thumbnails of member profile images.
  • YUI Javascript (Pro only) - This template module includes reference links to several Yahoo Javascript libraries. This template should be included in the Header template for all feedback templates (Entry archives). The auto-image-import AJAX function uses these libraries. Note: if you are already using the Ajax Comments plugin, then you already have this module, so you don't need to include it again.



  1. Download the zip file and upload the contents of the 'plugins' folder to the 'plugins' directory of your MT installation.
  2. You should now see an Upgrade Screen for User Profiles. For User Profiles Pro, the upgrade will add a new table for extended profiles and import profile images for existing users in your system
  3. Go to System Overview, then to Preferences > Plugins. Then choose User Profiles, then Settings. Entry the blog_id for profile images and templates, and the path for uploading profile images, then save.
  4. Return to the User Profiles settings and click the "Install Templates" button. The templates will be installed into the blog you chose in the previous step.
  5. In your "Header" template, add the following before the </head> tag:

    <MTIf name="include_javascript">
    <script type="text/javascript" src="<$MTLink template="javascript"$>"></script>

    And (Pro only) after the line that reads <MTIf name="entry_template">, add:

    <MTInclude module="YUI Javascript">

    Then save your "Header" template.

  6. Republish your Javascript template and Entry archives for the chosen blog

  7. Upload a profile image from your profile. (Tip: the quickest way to get to your profile is to click the "Hi Username!" link in the very top right of the page.) Click the link to add a profile image and follow the steps as shown above.

  8. Edit your extended profile by clicking "Extended Profile" from your profile page

  9. Edit your templates to display profile images, as described in the Template Tags section above.

Customizing Extended Profiles and Adding Custom Fields

User of User Profiles Pro may want to customized the display of the fields or add custom fields to the profiles. Click to read an in-depth article on how to customize Extended Profiles.

Get User Profiles Pro

Commercial License for 1 to 10 blogs - $97

Blog Network License for 10+ blogs - $249

Personal License for 1 to 4 blogs - $33

Get User Profiles

User Profiles v1.5 is free for both commercial and non-commercial use. Note that User Profiles does no include the "Pro" features mentioned above.

Download Now

Download Now
Downloads: 546

Membership required, please sign-in or register:

As always, comments, questions, and suggestions are welcome.

Blog Janitor is a plugin for Movable Type that preforms various clean-up tasks. Blog Janitor can perform the following tasks:

  • Close comments on old entries.
  • Delete duplicate comments and trackbacks

Blog Janitor does his work automatically, you don't need to edit your templates. Just tell Blog Janitor the tasks you want him to perform (by adjusting the plugin settings), and he will go to work periodically (using the scheduled tasks feature of MT).

New in Version 1.1

  • Support for MT4. Blog Janitor now works with either MT3.3x or MT4+. No new features in this release.

Here are some details on Blog Janitor's current skills:

Close Comments and Trackbacks on Old Entries

One technique for reducing blog spam is to close comments (disable commenting) and trackbacks on entries that are older than a certain number of days. This can be a tedious process to do manually, if you remember to do it. Blog Janitor can take care of this job for you. Simply enable Close Comments in the plugin settings for a blog, and tell Blog Janitor the number of days he should wait before closing comments on an entry. That's all you have to do, Blog Janitor will routinely check for old entries and close comments on them for you.

Delete Duplicate Comments and Trackbacks

Duplicate comments and trackbacks can happen in a number of ways. For example, a commenter may hit the submit button twice, thinking that the comment did not get posted the first time. Another common occurence is duplicate junk comments and trackbacks -- since spammer often post identical spam messages, your Junk folders may be full of duplicates. Blog Janitor is skilled a scanning your recent comments and trackbacks for duplicates. If you give him the order (by enabling duplicate checking in plugin Settings), he look for recent duplicates and delete them. Just tell him how many recent items to scan, and he will go to work every hour looking for recent duplicates. (Note: there is no "undo" when Blog Janitor deletes items, but he does leave a message in the Activity Log notifying you of which items he has deleted).


The Settings is where you give Blog Janitor his orders. Go to the blog you want, then go to the Plugin settings for Blog Janitor. The settings look like this:


  • MT 3.3x or MT4+


  1. Download the zip file and expand it.
  2. Upload the contents of the 'plugins' directory in to the 'plugins' directory of you MT installation (usually /cgi-bin/mt/plugins/)
  3. Adjust the settings as described above


  • If you have a large number if entries in your blog, Blog Janitor will not close comments on every old entry the first time he goes to work. He gets tired if he tries to close comments on too many entries at a time, and his union contract states that he doesn't have to close comments on more than 100 entries each hour. (Okay, the real reason is to save your MT from excess load that might slow things down) Since Blog Janitor works on up to 100 entries each hour, it may take some time before he gets 'caught up'. For example, if you have 2400 entries on your blog, it will take about 24 hours for Blog Janitor to go through all the old entries and close comments and trackbacks.
  • Blog Janitor punches his time clock when he starts and finishes a task. For each task, he posts a message to the Activity Log that explains what task was completed, and how many seconds it took him to complete. If you are concerned about system load, keep an eye on the Log to see how hard he is working.

Get Blog Janitor

Commercial Use: $97

If you buy a commercial license, you will get priority for future features, and an advanced version of Blog Janitor that enables you to give Blog Janitor orders on a system-wide basis (so you can adjust the settings in once place for all blogs on the system).

Blog Janitor is free for personal use:

Download Now

Download Now (Blog Janitor for Personal Use)
Downloads: 765

Membership required, please sign-in or register:

As always, comments and suggestions are welcome - please reply to this entry.

memcached Stats is a plugin for Movable Type 4 (MT4) that provides a admin dashboard widget that displays stats for each of the memcached servers in your MT config.

memcached is an optional advanced feature with MT4. You can read more about memcached here, and about using MT with memcached here. In short, memcached is a caching system that caches data in memory. When configured for MT4, Movable Type will store numerous items in the cache to reduce the number of database queries and improve performance. To use memcached, your probably need a dedicated server with root access, as you have to compile and install several libraries. I installed it earlier today with help of this tutorial.

How it Works

The memcached Stats dashboard widget will display key statistics for each of your memcached servers. It looks like this:

As the example above shows, the widget will display a warning message when memcached is not returning stats for a particular server. This could mean that the memcached process or server has gone down, or that the server is unreachable.


  • MT4+
  • Memcached (plus its dependancies)
  • Cache::Memcached perl module


  1. Download and extract the the contents of the zip file and uploads the contents of the 'plugins' folder to the 'plugins' directory of MT.
  2. Login to MT and go to your Dashboard. On the lower right side of the page you should see a "Select a Widget..." drop down box. Select "Memcached Stats" and click "Go". (Note that only system administrators have permissions to add this widget. Other users won't see this widget in the list)

Get Memcached Stats

Memcached Stats requires the purchase of a commercial license.

Commercial License - $97

Want More Stats?

The memached Stats widget displays only a handful of useful stats, as shown in the image above. There are more stats available, that could be added to the widget in future. A list can be found near the bottom of this page, in the "General-purpose statistics" section. If you see some useful stats that are missing from the widget, please let me know and I will add them.

As always, feedback and suggestions are appreciated.