Migrate Your MT 2.x Blog To Movable Type 3

| | Comments (8) | TrackBacks (34)

You've heard all about it by now: a more stable engine and plugin architecture, the closer-to-valid XHTML that it creates, the fabulousity of stopping spammers dead in their tracks with TypeKey's comment registration and the licensing drama. But does it all seem light-years away from your MT 2.x blog?

Well, there's hope for you yet! Over the past week, I've been sharing the love by converting a couple of blogs for my friends and family. Now I'm going to take you through the changes you'll make to each template, from the Main Index to the Individual Archive to the Comment Pending page. Once you get the hang of it, you won't be able to convert just one!

Breathe and Stop

Okay, see, stop. You're all anxious and sweaty and carrying on. Take a deep breath. *inhale* *exhale* Yeah, that's it. Light some incense for extra effect. I'm going for the least complicated way to get you to the goods, so relax (even though you can REALLY mess things up). I'm assuming two things: 1) that your blog is based on the default 2.x templates and 2) that you've already upgraded from MT 2.x to 3. If your blog is more complicated than that, you might be able to use this entry sporadically, but it won't be a total solution. If you haven't upgraded to MT 3 yet, go do that first.

Set It Off

First, go to TypeKey. You'll be signing up for two things: a TypeKey user that allows you to leave registered comments on TypeKey-powered blogs and a TypeKey token that lets your blog accept comments from TypeKey users. (Make sure you check the Generate a TypeKey token ... box.) Copy that token and be sure to fill out your TypeKey profile with lots of juicy details like a picture and maybe some URLs.

Then come back to your blog's Core Setup page and go to Preferences. Go to Comment Configuration.

Check the Accept Comments from Unregistered Visitors box unless you are absolutely sure you don't want to receive ANY comments from anyone who is not a registered TypeKey user. To force every unregistered visitor to leave a (potentially fake) name and e-mail address, check the Require Name and Email Address Information box. To enable moderation of unregistered comments (meaning that you'll have to approve every unregistered comment before it can be seen on your blog), check the Enable Unregistered Comment Moderation box. Here's a warning about that, though: Comments that are sent by spammers can become e-mail sent by spammers if MT sends you an e-mail every time you get a new comment.

Just below it you'll see the doorway to Movable Type 3's pièce de resistance - the Accept Comments from Registered Visitors checkbox. Check it and paste the TypeKey token in the appropriately named field. Checking Enable Auto-Approval disables moderation of comments from registered TypeKey users - their comments appear immediately on your blog. You can also force TypeKey users to reveal their e-mail addresses to you by checking the Require Email Addresses from TypeKey box - really handy when you want to provide a mailto: link to every commenter's e-mail address.

Now that you have your comments on lockdown from knuckleheads, why not check that Allow HTML in Comments box? Hypertext links (especially relevant ones) from your commenters will make your content that much more rich. And if you really want to receive an e-mail heralding each and every comment you get, check the E-mail New Comments box.

Slowly, Surely

There are many templates within Movable Type and you always have the ability to create more. It can be confusing, even downright daunting, but it's cool - we only need to edit a few of them. Repeat that about 7 times, with incense wafting through the air. Take your time - this is not something you want to rush through. It's not that bad but if you're really apprehensive, maybe you should make copies of each template and edit the copies. If you do this, don't forget to enable these changes in the Archive Files section of your Core Setup.

Also, keep in mind that Movable Type's new default templates for MT 3 are always available either at The Mothership or by creating a new weblog. These templates are a lot closer to valid XHTML Transitional code than their predecessors; I hope your own code reflects the same thoughtfullness.

Main Index and Date-Based Archives
There's not much to change in these templates, really. We're going to be replacing the code that creates those trackback and/or comment pop-up windows in default MT 2.x with a less spastic link to the trackbacks and/or comments section of that entry's solo page - its Individual Archive. This code is identical on the Main Index and Date-Based Archives templates.

First, we're going to scrap all that Javascript in the <head> tags. It looks like this:

<script language="javascript" type="text/javascript"> function OpenComments (c) { window.open(c, 'comments', 'width=480,height=480,scrollbars=yes,status=yes'); }
function OpenTrackback (c) { window.open(c, 'trackback', 'width=480,height=480,scrollbars=yes,status=yes'); } </script>

Just get rid of it. Neither the Main Index nor any Date-Based Archive needs it. If you still want pop-ups with MT 3, it is possible, but this is supposed to be easy, right? It's not that kinda party up in here.

The other changes in these two templates are the trackback and comment links after each entry. You may be wondering "Why doesn't he say comment and trackback links? That's the order I'm used to! I'm so confused ..." Well, the page that you'll be linking to now contains all the trackback pings and comments of that entry - in that order. It's here, it's queer - get used to it.

Let me reiterate: now, instead of launching a pop-up window for either trackback or comments listings, you will be linking to an anchor on the entry's Individual Archive page. This should feel like an old friend; you've been linking to those extended part of your entries like this since who knows when. So, instead of http://www.myblog.com/archives/000123.html#more, the URL will look something like http://www.myblog.com/archives/000456.html#trackbacks or http://www.myblog.com/archives/000789.html#comments.

Before:

<MTEntryIfAllowComments> | <a href="<$MTCGIPath$><$MTCommentScript$>?entry_id=<$MTEntryID$>" onclick="OpenComments(this.href); return false">Comments (<$MTEntryCommentCount$>)</a> </MTEntryIfAllowComments> <MTEntryIfAllowPings> | <a href="<$MTCGIPath$><$MTTrackbackScript$>?__mode=view&entry_id=<$MTEntryID$>" onclick="OpenTrackback(this.href); return false">TrackBack</a> </MTEntryIfAllowPings>

After:

<MTEntryIfAllowComments> | <a href="<$MTEntryPermalink archive_type="Individual"$>#comments">Comments (<$MTEntryCommentCount$>)</a> </MTEntryIfAllowComments> <MTEntryIfAllowPings> | <a href="<$MTEntryPermalink archive_type="Individual"$>#trackbacks">TrackBack (<$MTEntryTrackbackCount$>)</a> </MTEntryIfAllowPings>

There! If you rebuild either of these templates now, it will look like you've done absolutely nothing. Mouseover those links just to make sure.

Individual Archives
Now's the time to roll up your sleeves. And praying to a technology god wouldn't hurt, either ...

There are two things you'll be replacing within the <head> section this time: the <link> tags and the Javascript. So we'll start with the links ...

Before:

<link rel="stylesheet" href="<$MTBlogURL$>styles-site.css" type="text/css" /> <link rel="alternate" type="application/rss+xml" title="RSS" href="<$MTBlogURL$>index.rdf" />
<link rel="start" href="<$MTBlogURL$>" title="Home" /> <MTEntryPrevious> <link rel="prev" href="<$MTEntryPermalink$>" title="<$MTEntryTitle encode_html="1"$>" /> </MTEntryPrevious> <MTEntryNext> <link rel="next" href="<$MTEntryPermalink$>" title="<$MTEntryTitle encode_html="1"$>" /> </MTEntryNext>

After:

<link rel="stylesheet" href="<$MTBlogURL$>styles-site.css" type="text/css" /> <link rel="alternate" type="application/rss+xml" title="RSS" href="<$MTBlogURL$>index.rdf" /> <link rel="alternate" type="application/atom+xml" title="Atom" href="<$MTBlogURL$>atom.xml" />
<link rel="start" href="<$MTBlogURL$>" title="Home" /> <MTEntryPrevious> <link rel="prev" href="<$MTEntryPermalink$>" title="<$MTEntryTitle encode_html="1"$>" /> </MTEntryPrevious> <MTEntryNext> <link rel="next" href="<$MTEntryPermalink$>" title="<$MTEntryTitle encode_html="1"$>" /> </MTEntryNext>

... and now the Javascript ...

Before:

<script type="text/javascript" language="javascript"> <!--
function OpenTrackback (c) { window.open(c, 'trackback', 'width=480,height=480,scrollbars=yes,status=yes'); }
var HOST = '<$MTBlogHost$>';
// Copyright (c) 1996-1997 Athenia Associates. // http://www.webreference.com/js/ // License is granted if and only if this entire // copyright notice is included. By Tomer Shiran.
function setCookie (name, value, expires, path, domain, secure) { var curCookie = name + "=" + escape(value) + ((expires) ? "; expires=" + expires.toGMTString() : "") + ((path) ? "; path=" + path : "") + ((domain) ? "; domain=" + domain : "") + ((secure) ? "; secure" : ""); document.cookie = curCookie; }
function getCookie (name) { var prefix = name + '='; var c = document.cookie; var nullstring = ''; var cookieStartIndex = c.indexOf(prefix); if (cookieStartIndex == -1) return nullstring; var cookieEndIndex = c.indexOf(";", cookieStartIndex + prefix.length); if (cookieEndIndex == -1) cookieEndIndex = c.length; return unescape(c.substring(cookieStartIndex + prefix.length, cookieEndIndex)); }
function deleteCookie (name, path, domain) { if (getCookie(name)) document.cookie = name + "=" + ((path) ? "; path=" + path : "") + ((domain) ? "; domain=" + domain : "") + "; expires=Thu, 01-Jan-70 00:00:01 GMT"; }
function fixDate (date) { var base = new Date(0); var skew = base.getTime(); if (skew > 0) date.setTime(date.getTime() - skew); }
function rememberMe (f) { var now = new Date(); fixDate(now); now.setTime(now.getTime() + 365 * 24 * 60 * 60 * 1000); setCookie('mtcmtauth', f.author.value, now, '', HOST, ''); setCookie('mtcmtmail', f.email.value, now, '', HOST, ''); setCookie('mtcmthome', f.url.value, now, '', HOST, ''); }
function forgetMe (f) { deleteCookie('mtcmtmail', '', HOST); deleteCookie('mtcmthome', '', HOST); deleteCookie('mtcmtauth', '', HOST); f.email.value = ''; f.author.value = ''; f.url.value = ''; }
//--> </script>

After:

<script type="text/javascript" language="javascript"> <!--
var HOST = '<$MTBlogHost$>';
// Copyright (c) 1996-1997 Athenia Associates. // http://www.webreference.com/js/ // License is granted if and only if this entire // copyright notice is included. By Tomer Shiran.
function setCookie (name, value, expires, path, domain, secure) { var curCookie = name + "=" + escape(value) + (expires ? "; expires=" + expires : "") + (path ? "; path=" + path : "") + (domain ? "; domain=" + domain : "") + (secure ? "secure" : ""); document.cookie = curCookie; }
function getCookie (name) { var prefix = name + '='; var c = document.cookie; var nullstring = ''; var cookieStartIndex = c.indexOf(prefix); if (cookieStartIndex == -1) return nullstring; var cookieEndIndex = c.indexOf(";", cookieStartIndex + prefix.length); if (cookieEndIndex == -1) cookieEndIndex = c.length; return unescape(c.substring(cookieStartIndex + prefix.length, cookieEndIndex)); }
function deleteCookie (name, path, domain) { if (getCookie(name)) document.cookie = name + "=" + ((path) ? "; path=" + path : "") + ((domain) ? "; domain=" + domain : "") + "; expires=Thu, 01-Jan-70 00:00:01 GMT"; }
function fixDate (date) { var base = new Date(0); var skew = base.getTime(); if (skew > 0) date.setTime(date.getTime() - skew); }
function rememberMe (f) { var now = new Date(); fixDate(now); now.setTime(now.getTime() + 365 * 24 * 60 * 60 * 1000); if (f.author != undefined) setCookie('mtcmtauth', f.author.value, now, '/', HOST, ''); if (f.email != undefined) setCookie('mtcmtmail', f.email.value, now, '/', HOST, ''); if (f.url != undefined) setCookie('mtcmthome', f.url.value, now, '/', HOST, ''); }
function forgetMe (f) { deleteCookie('mtcmtmail', '', HOST); deleteCookie('mtcmthome', '', HOST); deleteCookie('mtcmtauth', '', HOST); f.email.value = ''; f.author.value = ''; f.url.value = ''; }
//--> </script>

... and that's that. These two replacements didn't change all that much (basically you added a link to an Atom-flavored main index and tweaked the same cookie-related stuff), but better safe than sorry.

Cool. You still with me? Cool! Okay, there's the little matter of that old Trackback link at the end of the entry. It used to be so cute, launching that little pop-up window. *sigh* Well, since we've utterly destroyed the Javascript it refers to, we don't need it anymore. So, it's goodbye yellow brick road for ye olde Trackback link. See ya, buddy.

Before:

<span class="posted">Posted by <$MTEntryAuthor$> at <$MTEntryDate$> <MTEntryIfAllowPings> | <a href="<$MTCGIPath$><$MTTrackbackScript$>?__mode=view&entry_id=<$MTEntryID$>" onclick="OpenTrackback(this.href); return false">TrackBack</a> </MTEntryIfAllowPings> <br /></span>
</div>

After:

<span class="posted">Posted by <$MTEntryAuthor$> at <$MTEntryDate$><br /></span>
</div>

Really, you could chuck that <br /> tag and change that <span> tag to a <p> tag, but, again, you want to change as little as possible. Infusing better XHTML standards within your code is beyond. Way beyond. And well worth the effort.

Right here, following the entry, there's a listing of all trackback pings (from wherever you're being pinged from) and a listing of all comments (from registered and unregistered users). So for our next trick, you'll add something completely new - the listing of trackback pings to this entry. Just pop it in right here. Here ya go:

<MTEntryIfAllowPings> <a id="trackbacks"></a> <div class="comments-head">Trackback Pings</div> <p class="techstuff">TrackBack URL for this entry:<br /> <$MTEntryTrackbackLink$></p>
<MTIfNonZero tag="MTEntryTrackbackCount"> <p>Listed below are links to weblogs that reference <a href="<$MTEntryPermalink$>"><$MTEntryTitle$></a>:</p>
<MTPings> <a id="p<$MTPingID$>"></a> <div class="comments-body"> <p>&raquo; <a href="<$MTPingURL$>"><$MTPingTitle$></a> from <$MTPingBlogName$><br /> <$MTPingExcerpt$> <a href="<$MTPingURL$>">[Read More]</a></p> <span class="comments-post">Tracked on <$MTPingDate$></span> </div> </MTPings> </MTIfNonZero> </MTEntryIfAllowPings>

Okay, now the listing of comments of this entry goes here. Very little has changed, but you'll notice the difference immediately - when a registered user leaves a comment.

Before:

<MTComments> <div class="comments-body"> <$MTCommentBody$> <span class="comments-post">Posted by: <$MTCommentAuthorLink spam_protect="1"$> at <$MTCommentDate$></span> </div> </MTComments>

After:

<MTComments> <a id="c<$MTCommentID$>"></a> <div class="comments-body"> <$MTCommentBody$> <span class="comments-post">Posted by: <$MTCommentAuthorLink spam_protect="1"$> <MTCommentAuthorIdentity> at <$MTCommentDate$></span> </div> </MTComments>

*Bonus Round* You want linkable comments? Add this instead:

<MTComments> <a id="c<$MTCommentID$>"></a> <div class="comments-body"> <$MTCommentBody$> <span class="comments-post">Posted by: <$MTCommentAuthorLink spam_protect="1"$> <MTCommentAuthorIdentity> at <a href="<$MTEntryPermalink$>#c<$MTCommentID$>"><$MTCommentDate$></a></span> </div> </MTComments>

Now, we're in the belly of the beast. This is where all that new logic exists that lets you get comments the old way (from unregistered users with a name and e-mail address - if that's what you require) and the new way (from users with registered TypeKey profiles). Remember *squeezes your hand* you're a champ! You can do this! Breathe!

Now, this easiest way to do this is to gut this template from the opening <MTEntryIfCommentsOpen> tag to the closing </MTEntryIfAllowComments> tag. If you have customized your forms, they won't survive. Maybe once you're up and running, you can go back and tweak them, but for now, you want them to work - with your sanity intact.

So, replace that gaping hole you just made in your template with the following code:

<MTEntryIfCommentsOpen>
<MTIfCommentsAllowed>
<div class="comments-head">Post a comment</div> <div class="comments-body">
<MTIfRegistrationRequired>
<MTIfNonEmpty tag="MTTypeKeyToken"> <div id="thanks"> <p>Thanks for signing in, <script type="text/javascript" src="<MTCGIPath><MTCommentScript>?__mode=cmtr_name_js"></script><script>document.write(commenter_name);</script>. Now you can comment. (<a href="<$MTCGIPath$><$MTCommentScript$>?__mode=handle_sign_in&static=1&entry_id=<$MTEntryID$>&logout=1">sign out</a>)</p>
<p>(If you haven't left a comment here before, you may need to be approved by the site owner before your comment will appear. Until then, it won't appear on the entry. Thanks for waiting.)</p>
<form method="post" action="<$MTCGIPath$><$MTCommentScript$>" name="comments_form" onsubmit="if (this.bakecookie[0].checked) rememberMe(this)"> <input type="hidden" name="static" value="1" /> <input type="hidden" name="entry_id" value="<$MTEntryID$>" />
<p><label for="url">URL:</label><br /> <input tabindex="1" type="text" name="url" id="url" /> Remember me? <input type="radio" id="remember" name="bakecookie" /><label for="remember">Yes</label><input type="radio" id="forget" name="bakecookie" onclick="forgetMe(this.form)" value="Forget Info" style="margin-left: 15px;" /><label for="forget">No</label><br style="clear: both;" />
</p>
<p><label for="text">Comments:</label><br /> <textarea tabindex="2" id="text" name="text" rows="10" cols="50"></textarea></p>
<div align="center"> <input type="submit" tabindex="3" name="preview" value=" Preview " /> <input style="font-weight: bold;" tabindex="4" type="submit" name="post" value=" Post " /> </div> </form>
</div>
<script language="javascript" type="text/javascript"> <!-- if (commenter_name) { document.getElementById('thanks').style.display = 'block'; } else { document.write('<p>You are not signed in. You need to be registered to comment on this site. <a href="<$MTSignOnURL$>&<MTIfNeedEmail>need_email=1&</MTIfNeedEmail>t=<MTTypeKeyToken>&_return=<$MTCGIPath$><MTCommentScript>%3f__mode=handle_sign_in%26static=1%26entry_id=<$MTEntryID$>"> Sign in</a></p>'); document.getElementById('thanks').style.display = 'none'; } // --> </script>
<MTElse> <p>! Comment registration is required but no TypeKey token has been given in weblog configuration!</p> </MTElse> </MTIfNonEmpty>
<MTElse> <MTIfNonEmpty tag="MTTypeKeyToken"> <script type="text/javascript" src="<MTCGIPath><MTCommentScript>?__mode=cmtr_name_js"></script> <p><script language="javascript" type="text/javascript"> <!-- if (commenter_name) { document.write('Thanks for signing in, ', commenter_name, '. Now you can comment. (<a href="<$MTCGIPath$><$MTCommentScript$>?__mode=handle_sign_in&static=1&entry_id=<$MTEntryID$>&logout=1">sign out</a>)'); } else { document.write('If you have a TypeKey identity, you can <a href="<$MTSignOnURL$>&<MTIfNeedEmail>need_email=1&</MTIfNeedEmail>t=<MTTypeKeyToken>&_return=<$MTCGIPath$><MTCommentScript>%3f__mode=handle_sign_in%26static=1%26entry_id=<$MTEntryID$>"> sign in</a> to use it here.'); } // --> </script></p> </MTIfNonEmpty>
<form method="post" action="<$MTCGIPath$><$MTCommentScript$>" name="comments_form" onsubmit="if (this.bakecookie[0].checked) rememberMe(this)"> <input type="hidden" name="static" value="1" /> <input type="hidden" name="entry_id" value="<$MTEntryID$>" />
<div id="name_email"> <p><label for="author">Name:</label><br /> <input tabindex="1" id="author" name="author" /></p>
<p><label for="email">Email Address:</label><br /> <input tabindex="2" id="email" name="email" /></p> </div>
<MTIfNonEmpty tag="MTTypeKeyToken"> <script language="javascript" type="text/javascript"> <!-- if (commenter_name) { document.getElementById('name_email').style.display = 'none'; } // --> </script> </MTIfNonEmpty>
<p><label for="url">URL:</label><br /> <input tabindex="3" type="text" name="url" id="url" /> Remember Me? <input type="radio" id="remember" onClick="rememberMe(this.form)" name="bakecookie" /><label for="remember">Yes</label><input type="radio" id="forget" name="bakecookie" onclick="forgetMe(this.form)" value="Forget Info" style="margin-left: 15px;" /><label for="forget">No</label><br style="clear: both;" /> </p>
<p><label for="text">Comments:</label> <MTIfAllowCommentHTML> (you may use HTML tags for style)</MTIfAllowCommentHTML><br/> <textarea tabindex="4" id="text" name="text" rows="10" cols="50"></textarea></p>
<div align="center"> <input type="submit" name="preview" tabindex="5" value=" Preview " /> <input style="font-weight: bold;" type="submit" name="post" tabindex="6" value=" Post " /> </div> </form>
</MTElse> </MTIfRegistrationRequired> </div> </MTIfCommentsAllowed>
<script type="text/javascript" language="javascript"> <!-- if (document.comments_form.email != undefined) document.comments_form.email.value = getCookie("mtcmtmail"); if (document.comments_form.author != undefined) document.comments_form.author.value = getCookie("mtcmtauth"); if (document.comments_form.url != undefined) document.comments_form.url.value = getCookie("mtcmthome"); if (getCookie("mtcmtauth") || getCookie("mtcmthome")) { document.comments_form.bakecookie[0].checked = true; } else { document.comments_form.bakecookie[1].checked = true; } //--> </script> </MTEntryIfCommentsOpen> </MTEntryIfAllowComments>

... and you're done! The worst is over! I guess that blood sacrifice paid off after all! *LOL!*

Comment Pending, Comment Preview and Comment Error
Okay, we're in the home stretch. And I have to admit a bit of laziness. If you've already read this entry, you know that this section was originally called "Comment Pending" ... so no, it's not you, it's me. I thought I could gloss over the Comment Preview and Comment Error templates because, for real, how many people actually use them? Well, as I tested someone's blog after making the rest of the changes, I did a preview. Movable Type used the layout originally designed for a tiny pop-up on the whole page. Ill! Hence, the edit.

Creating these template might be a little tricky, but it's easy. Basically you're going to delete whatever's in your Comment Pending, Comment Preview and Comment Error templates, copy your Main Index template, paste that back into each template and replace everything between the <div class="content"> tags (including all that sidelink stuff) with either a message thanking the unregistered commenter and asking her/him not to bug out and that the comment will be posted as soon as it's approved - with a handy link back to the entry (Comment Pending) or the comment that was just submitted for preview (Comment Preview) or an error message (Comment Error). Got all that?

Comment Pending, for <div class="content">:

<h3 class="title">Thank You for Commenting</h3>
<p>Your comment has been received. To protect against malicious comments, I have enabled a feature that allows your comments to be held for approval the first time you post a comment. I'll approve your comment when convenient; there is no need to re-post your comment.</p>
<p><a href="<MTEntryLink>">Return to the comment page</a></p>

Great great great ... actually, there's something else I neglected to mention: you also need to add a little bit of Javascript to the <head> section for the Comment Preview and Comment Error templates. Right after that <link> tag would be lovely. Tunnel, light, blah blah blah - let's do this.

Comment Preview and Comment Error, for <head>:

<script language="JavaScript"> function getCookie (name) { var prefix = name + '='; var c = document.cookie; var nullstring = ''; var cookieStartIndex = c.indexOf(prefix); if (cookieStartIndex == -1) return nullstring; var cookieEndIndex = c.indexOf(";", cookieStartIndex + prefix.length); if (cookieEndIndex == -1) cookieEndIndex = c.length; return unescape(c.substring(cookieStartIndex + prefix.length, cookieEndIndex)); } </script>

Comment Preview, for <div class="content">:

<h3 class="title">Previewing your Comment</h3>
<$MTCommentPreviewBody$> <span class="posted">Posted by <$MTCommentPreviewAuthorLink spam_protect="1"$> at <$MTCommentPreviewDate$><br /></span>
<MTIfCommentsAllowed> <MTCommentFields> </MTIfCommentsAllowed>
<div class="comments-head">Previous Comments</div>
<MTComments> <div class="comments-body"> <$MTCommentBody$> <span class="comments-post">Posted by <$MTCommentAuthorLink spam_protect="1"$> at <$MTCommentDate$></span> </div> </MTComments>

Comment Error, for <div class="content">:

<h3 class="title">Comment Submission Error</h3>
<p>Your comment submission failed for the following reasons:</p>
<blockquote><strong><$MTErrorMessage$></strong></blockquote>
<MTIfCommentsAllowed> <MTCommentFields> </MTIfCommentsAllowed>

Mission accomplished! Now you probably have the flyest blog on your block! And I feel SOOOO much better now that I've edited this section, giving you everything you need to make your (and your readers') MT 3 experience complete and oh so nice. YAY!

Troubleshooting
If you are having problems once you've finished massaging all of your templates, these tips might help:

  • Restart your browser
    If your browser is a cache fiend like mine, restart it. Or open up another browser. Or download another browser!
  • Check your URLs
    TypeKey is EXTREMELY demanding. If TypeKey tells you "The site you're trying to comment on has not signed up for this feature" and you KNOW that you've done that and have entered your TypeKey token into your blog's Core Setup | Preferences | Comment Configuration, then check your URLs. The URL that you enter into your TypeKey profile must appear EXACTLY as it does in your Core Setup. No, http://myblog.com is NOT the same as http://www.myblog.com/.

The End of the Road

This concludes our journey together. If all has gone well, you are now the proud owner of a blog powered by Movable Type 3, a blog now brimming with even more possibilities. Now go forth and share your brand-new funky fresh blog with the world! And once you've done it a couple of times for your loved ones, you might want to consider helping out over at the support forums. There's always someone there who would love your help. Enjoy!

Oh, and if this entry has helped you at all, let me know - leave a comment and/or ping this entry. And please consider leaving a tip. I would really appreciate it!

34 TrackBacks

Listed below are links to blogs that reference this entry: Migrate Your MT 2.x Blog To Movable Type 3.

TrackBack URL for this entry: http://www.anzidesign.com/cgi-bin/mt-tb.cgi/438

This post will dissapear in one week from Negro, Please: Back in Black on June 17, 2004 9:46 PM

upgrades. Read More

Updated June 17, 2004 Movable Type 3.0 is ushering in a whole new look for its default style templates, based on what we've seen with Typepad default styles. The new stylesheets can be found here in the Movable Type documentation. The new stylesheets d... Read More

from anzidesign, fix up your comments with the new stuff Read More

migrate your MT2.x blog to MT3 from anil dash's daily links on June 18, 2004 6:59 PM

http://www.anzidesign.com/archives/000443.html#820... Read More

and for future reading: migrating from mt 2.x to mt 3.0d... Read More

How to migrate your blog from MT2 to MT3. Handy guide.... Read More

Kalamu ya Salam's "mama what's an afro geek?" (via an Art McGee love-tap in Orkut) Spoke too soon on Elvis Mitchell and Richard Pryor? (via Gawker) Director-File: "Eternal Sunshine of the Spotless Mind" DVD will be released in America Sept... Read More

مهاجرت از MT 2.x به MT 3 - تغييرات لازم در قالب شما... Read More

Tell your friends- exponent's back. It's still a technical madhouse though. Pardon my dust. Read More

If you plan on moving from MovableType version 2.x to version 3, I'd keep this guide handy. I still am probably going to be migrating to Wordpress at some point,... Read More

http://www.anzidesign.com/archives/000443.html... Read More

MT 3 Migration from Mama Write's Sideblog on June 21, 2004 2:28 PM

Migrate your MT 2.x mlog to MT 3... Read More

A couple of people have emailed me asking about this. Maybe this will help someone else making the transition. :) Migrate Your MT 2.x Blog To Movable Type 3 Step by step information. :) Super helpful. (Best of all, he... Read More

Another Friday, Another Five from Bewitched, Bothered, Bewildered on June 25, 2004 7:11 AM

It's another Friday Five for you lot today, and not a word about football amongst this lot. I've got a selection from motoring, computer games, Movable Type and something that will come in extremely useful for any budding writers out... Read More

Between this gentleman's excellent tutorial and my new MT paid support, I have gotten my new installation (mostly) up and running. Read More

Movable Type 3.01 دیگر برای علاقه مندان ایساتیس وب , 100 دلار نیست ! ما این هدیه صد دلاری را به همه ی شما دوستداران تقدیم می کنیم ! می دونم که خیلی حرف و... Read More

Pardon our Dust from 夢窓 The World We Live In and Life In General on September 25, 2004 5:06 AM

I upgraded the site from Movable Type 2.661 to 3.11 today. Well, yesterday for those of you who go to bed before sunrise. The upgrade went flawlessly. To implement some new features I wanted to use I've had to do... Read More

TypeKey Comments from Mama Write's Sideblog on September 29, 2004 7:18 PM

This tutorial on using TypeKey for MT comments might help me figure out why I'm not getting any notifications from my ENGL course blog. Also need to reference this migration tutorial for template details.... Read More

Migrate Your MT 2.x Blog [templates] to Movable Type 3. The upgrade went flawlessly. I kept my old templates. I like them. I didn't want to redesign twelve Weblogs at a time. Now I want to replace some of the... Read More

The last couple of days silence is due to the upgrading of the blog steam engine. Changes to the templates to take advantage of newer version is not for the faint hearted! A very good step by step intruction of... Read More

So perhaps it doesn't take much to give me a thrill, but now that I've finally fully upgraded Cronaca's Movable... Read More

Okay, I'm gonna use anzidesign's tips to fix the css, I'm sure that won't bee too hard.. but here's my other problem: When I try post a comment here, it gets through the typekey sign-in process okay, but then it rejects my post because "Name and email ... Read More

Riika and myself had a grand ole time upgrading our blogs to MT 3.1 last night. We came into a glitch though when we tried to implement Typekey into our comments. Well, after two hours, I've figured it out, thanks... Read More

Comment spam has been forcing me to take more precautionary measures to detect bad/automated posts. I get hit with about a dozen a day so far and the fact is that these spiders eat up uneccesary bandwidth and display unwanted... Read More

Musings on migration of MT 2.x to 3.1 from Nothing to see, move along - isileth.org on December 29, 2004 9:30 PM

The upgrade of MT 2.6 to 3.1 was indeed painless (aside from not having the tmpl directory in the right location). Everything just worked...my existing templates were kept, entries stayed the same, the only thing I'm not sure about is... Read More

In lieu of writing stuff here the past few days, I’ve been installing upgrades over at Nicholas Packwood’s Ghost of a Flea, which is one of the leading lights in the Canadian blogosphere. (And with traffic to match: last month... Read More

Upgrade from Much Madness is Divinest Sense on January 8, 2005 11:50 PM

Okay, upgrade to Movable Type 3.14 seems to be successful. So far, I like the new features. An upgrade was necessary because I just couldn't take advantage of the new plug-ins with 2.66. Also, 3.14 has more safeguards against comment... Read More

I'm collecting a list of new blogs that are MT (3.x in particular) resources. A great MT resource, Movalog - All Things Movable Type is a must-have link. Tons of hacks, scripts, etc. to enhance the MT experience. Donald has... Read More

A little bit of link love from the rantings of a homicidalManiak on January 17, 2005 3:03 AM

It's now the 17th and I'm really having a good time getting back into the swing of things. Over the past few days I've taken the time to try to read more online while I've been wrestling with blog updates... Read More

MT 3.14 from Timbu :: Musings on January 18, 2005 9:07 PM

Upgrading to MT 3.14 was relatively painless. Other than a little driver error when I uploaded some files as binary, which should have been ascii, it all went smooth. Unfortunately, I can't really say the same for enabling TypeKey. This... Read More

As I mentioned in passing last week, I've upgraded this site to the latest version of Movable Type. But it... Read More

on the move to MT 3 from Al-Muhajabah's Movable Type Tips on February 3, 2005 2:42 AM

I seem to be taking "better late than never" to its ultimate extreme. It's getting close to a year since MT 3.0 was released (I think about nine or ten months now). All this time, I've still been on MT... Read More

Jay Allen, of MT-Blacklist/Comment Spam Clearinghouse fame, generously recommends Brad Choate's Spam Lookup as a more comprehensive solution to webspam/commentspam/trackspam. The nightly build (which fixes a bug in beta 2) is here. So, in short, for sp... Read More

Ch-ch-ch-changes from scribblingwoman on May 14, 2005 6:01 PM

I have been monkeying around with the comments. I think one of two things should now happen when someone comments:... Read More

8 Comments

Donald’s tutorial went over like gangbusters.

Good on ya.

hmm….gonna think about it for a moment.

me brain is hurtin’ yo!!

See, this is why I had to leave updating to you and you alone. This shit confuses the hell out of me. I know simple HTML and just about nothing else.

Hey, what about my translation :) ?

Yes. You are a good man. A very good man. Thanks for the mad tips. I’ll say this…I love the MT interface and I’ll nerd it up with the best of ‘em, but thanks for letting me cut and paste and make my upgrade nice n’ eazy.

-john

I thinks this post was useful. I’m now too tired to go about implementing the changings.. We’ll try later. Mainly trying to get that Typekey stuff to work.

Thank you for the tutorial. I’m thinking of starting my own design blog, and I hope this will help me. Though I’ll definitely have to consult someone who knows html realy well (I know just basics). But that’s great I have your post to help me!!!

I HATE TYPEKEY!! I HATE MOVEABLE TYPE!! My fairly popular blog was being peppered by bad-vibed commenters. I’ve been trying to move over to typekey authentication system. Weeks of trying to change the templates and javascript and typekey tokens and everything have miserably failed. I’ve read this tutorial probably 20 times.. painstakingly following the directions each time. NEVER HAS IT WORKED!!! I HATE COMPUTERS!! this comment probably won’t even work!!!

Leave a comment

Pages

Powered by Movable Type 4.1

About this Entry

This page contains a single entry by Donald published on June 17, 2004 8:44 PM.

Shindig Memo, Sore Muscles, Seeding MT 3 was the previous entry in this blog.

Your Loving Arms is the next entry in this blog.

Find recent content on the main index or look in the archives to find all content.