<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
<channel>
<title>Movable Tweak</title>
<link>http://www.movabletweak.com/</link>
<description>Getting Things Done With Movable Type</description>
<copyright>Copyright 2008</copyright>
<lastBuildDate>Fri, 14 Mar 2008 16:00:36 -0500</lastBuildDate>
<generator>http://www.movabletype.org/?v=4.1</generator>
<docs>http://blogs.law.harvard.edu/tech/rss</docs> 


<item>
<title>Migrating CustomFields to Movable Type Professional 4.1</title>
<description><![CDATA[<h5>Installing CustomFields Upgrade Assistant</h5>

<p>If you&#8217;re upgrading an MT 4.0 install that was using <a href="http://plugins.movalog.com/customfields/">Arvind&#8217;s CustomFields plugin</a> to <a href="http://www.movabletype.com/download/personal-use.html">MTP 4.1 which has CustomFields</a> built in, the first thing you need to know is that MTP will not automatically import your old CustomFields data.  You need to install the <a href="http://code.sixapart.com/trac/mtplugins/browser/trunk/CustomFieldsUpgradeAssistant/plugins/CustomFields?rev=464">CustomFields Upgrade Assistant plugin</a> to do the migration for you.  (Six Apart <em>please</em> get this out of Trac and into the Plugin Directory!)</p>

<p>A note about installing the upgrader: Arvind&#8217;s CustomFields plugin lives in the /plugins/ directory; the CustomFields that ships with MTP lives in the /addons/ directory.  You should remove the old CustomFields plugin when installing the CF Upgrade Assistant plugin.  Make sure that it&#8217;s actually <em>replacing</em> your old /plugins/CustomFields/ directory.  Leaving the old plugin code in there presents troubles because MT tries to use the old plugin code.  The final location for your CF Upgrade assistant should be /plugins/CustomFields/lib/CustomFieldsUpgrader/</p>

<h5>Murphy&#8217;s Law</h5>

<p>I tried logging into Movable Type, but I kept getting the following error: </p>

<blockquote>
  <p>A Error during upgrade: Can&#8217;t call method &#8220;can&#8221; on an undefined value at /var/www/dev/html/mt/addons/Commercial.pack/lib/CustomFields/Util.pm line 260</p>
</blockquote>

<p>I first thought that the MTP upgrade and the CF Upgrade Assistant could not be run at the same time.  However, it turns out that errors in the CF upgrade were keeping me stuck in the upgrade loop.  </p>

<p><strong>Important note for Safari users:</strong>  <em>If the upgrade is throwing errors, you won&#8217;t see them if you&#8217;re using Safari.  I&#8217;m not sure why, but when the upgrade fails, it gives no feedback or error message in the log window, returns an &#8220;Upgrade Complete!&#8221; and throws you right back into an upgrade loop.  I suspect it has something to do with the javascript.</em></p>

<h5>Troubleshooting Orphans</h5>

<p>Hopefully you didn&#8217;t read a space into the first word of that subtitle.</p>

<p>Anyhow, I was stuck in an upgrade loop.  <a href="http://tweezersedge.com/archives/stories/about_tweezerman.html">David Phillips</a>, God bless his soul, stepped in at this point with some heavy duty troubleshooting.  Turns out that the upgrade assistant chokes when it gets to orphaned custom field data.  What do I mean by orphaned data?  You can create custom fields for almost every object in the system (blog, entry, author).  However, the older version of CustomFields would not delete the custom field data even if the object associated with that custom field got deleted.  So if you had an entry with custom field data, and that entry was deleted, the custom field data would still live in the database, but you&#8217;d never see it in the UI.  The upgrade assistant would then find these objects, try to migrate them and then fail because the object they&#8217;re supposed to be associated with no longer exists.</p>

<p>Unfortunately, there&#8217;s no elegant solution.</p>

<p>At this point, the orphans can only be cleaned up through the database.  However, to help speed things up, I&#8217;m posting the queries I used to get rid of my orphaned data.  You can issue these fairly easily through something like phpMyAdmin or CocoaMySQL.  And the standard warning: <strong>Make sure you back up your database before doing any type of massive database manipulations.</strong></p>

<p>To clean up orphaned custom fields data associated with <strong>entries</strong>, use the following SQL query:</p>

<pre><code> DELETE FROM mt_plugindata WHERE 
 LEFT( plugindata_key, 6 ) = 'entry_' 
 AND plugindata_plugin = 'CustomFields' 
 AND (SELECT entry_id FROM mt_entry 
 WHERE LEFT( plugindata_key, 6 ) = 'entry_' 
 AND plugindata_plugin = 'CustomFields' 
 AND SUBSTRING( plugindata_key, 7 ) = entry_id) IS NULL;
</code></pre>

<p>To clean up orphaned custom fields data associated with <strong>authors</strong>, use the following SQL query:</p>

<pre><code> DELETE FROM mt_plugindata WHERE
 LEFT( plugindata_key, 1 ) = '_' 
 AND plugindata_plugin = 'CustomFields' 
 AND (SELECT author_id FROM mt_author 
 WHERE LEFT( plugindata_key, 1 ) = '_' 
 AND plugindata_plugin = 'CustomFields' 
 AND SUBSTRING( plugindata_key, 2 ) = author_id) IS NULL;
</code></pre>

<h5>One Last Bug Squash</h5>

<p>All your orphans should be gone.  But there&#8217;s a minor bug in CustomFields that we need to take care of.  If you tried running your upgrade at this point, you&#8217;d get this error message:</p>

<blockquote>
  <p>Error during upgrade: Can&#8217;t call method &#8220;text&#8221; on an undefined value at /var/www/dev/html/mt/addons/Commercial.pack/lib/CustomFields/Util.pm line 322.</p>
</blockquote>

<p>You need to edit Util.pm.  If you open it up in a text browser, you&#8217;ll see this at line 322:</p>

<pre><code> my $text = ($entry-&gt;text || '') . "\n" . ($entry-&gt;text_more || '');
</code></pre>

<p>Both occurrences of <code>$entry</code> need to be changed to <code>$obj</code>.  The final code should look like this:</p>

<pre><code> my $text = ($obj-&gt;text || '') . "\n" . ($obj-&gt;text_more || '');
</code></pre>

<h5>Upgrade!</h5>

<p><strong>If you followed these somewhat complicated instructions carefully, the upgrade process should run through smoothly and your CF data should be migrated successfully.</strong></p>

<p>Please feel free to leave your comments or questions here.  Several people have told me that they&#8217;ve run into this; the more scenarios we can address, the more useful this article will be.  Thanks.</p>
]]></description>
<link>http://www.movabletweak.com/app/migrating_customfields_movable_type.php</link>
<guid>http://www.movabletweak.com/app/migrating_customfields_movable_type.php</guid>
<category>App</category>
<pubDate>Fri, 14 Mar 2008 16:00:36 -0500</pubDate>
<author>
<name>Plasticmind</name>
</author>
</item>

<item>
<title>Get An Email List of All Authors On Your System</title>
<description><![CDATA[<p>This little snip of code will dump out a list of all the users and their email addresses on your install in a comma-delimited format that you can easily import into your email client.  It&#8217;s particularly useful on larger installs:</p>

<pre><code>&lt;mt:Authors include_blogs="all"&gt;
    &lt;mt:IfNonEmpty tag="AuthorEmail"&gt;
        &lt;mt:IfNonEmpty tag="AuthorDisplayName"&gt;"&lt;mt:AuthorDisplayName /&gt;" &lt;/mt:IfNonEmpty&gt;
        &amp;lt;&lt;mt:AuthorEmail /&gt;&amp;gt;,
    &lt;/mt:IfNonEmpty&gt;
&lt;/mt:Authors&gt;
</code></pre>

<p>And the <a href="http://www.movabletype.org/documentation/appendices/tags/authors.html">Authors tag</a> allows for all sorts of cool filtering attributes so you can get at any group of authors in the system, ordered however you like:</p>

<ul>
<li>display_name: Specifies a particular author to select.</li>
<li>lastn: Limits the selection of authors to the specified number.</li>
<li>sort<em>by: Supported values: display</em>name, name, created_on.</li>
<li>sort_order: Supported values: ascend, descend.</li>
<li>roles: comma separated list of values. eg &#8220;Author, Commenter&#8221;</li>
<li>need_entry: 1 | 0 (default is 1)</li>
<li>status: Supported values: enabled, disabled. Default is enabled.</li>
</ul>

<p><strong>Note:</strong> Some people have asked about creating an email list of all the commenters on the system, and it&#8217;s very simple.  The code stays the same, but you just need to specify roles=&#8221;Commenter&#8221; and need_entry=&#8221;0&#8221; (since most commenters won&#8217;t have written an entry).  Here&#8217;s the code to do it:</p>

<pre><code> &lt;mt:Authors include_blogs="all" roles="Commenter" need_entry="0" sort_by="display_name"&gt;&lt;mt:IfNonEmpty tag="AuthorEmail"&gt;&lt;mt:IfNonEmpty tag="AuthorDisplayName"&gt;"&lt;mt:AuthorDisplayName /&gt;" &lt;/mt:IfNonEmpty&gt;&amp;lt;&lt;mt:AuthorEmail /&gt;&amp;gt;, &lt;/mt:IfNonEmpty&gt;
 &lt;/mt:Authors&gt;
</code></pre>

<p>Notice the code is much more compressed than the code given previously.  If you tried the previous code, you probably noticed that the spacing is crazy because of all the hard returns and spaces we have in there.  This second set of code I posted will give you a highly compact list of email addresses than can literally be copied and pasted into an email client.</p>

<p><strong>Just make sure you use this for good, not evil.</strong></p>
]]></description>
<link>http://www.movabletweak.com/templates/email_list_of_all_authors.php</link>
<guid>http://www.movabletweak.com/templates/email_list_of_all_authors.php</guid>
<category>Templates</category>
<pubDate>Thu, 13 Mar 2008 13:08:45 -0500</pubDate>
<author>
<name>Plasticmind</name>
</author>
</item>

<item>
<title>Image CustomFields in Movable Type 4.1</title>
<description><![CDATA[<h5>Dilemma: Image Link Instead of Image</h5>

<p>Many of the sites I build use CustomFields to place a masthead image at the top of an entry.  This takes the hassle out of uploading and really just makes it easier for customers to have a consistent look and feel for their posts.  Trouble is, when I upgraded to Movable Type 4.1 (see this post for details about how to upgrade from Arvind&#8217;s CustomFields plugin to the one that&#8217;s built in to MT Professional Pack), the image asset links were only showing up as text links.  For example, using the code they suggested on the CustomFields screen:</p>

<pre><code> &lt;mt:IfNonEmpty tag="EntryDataMastheadImage"&gt;
      &lt;mt:EntryDataMastheadImage /&gt;
 &lt;/mt:IfNonEmpty&gt;
</code></pre>

<p>Resulted not in a placement of the image, but rather the words &#8220;View Image&#8221; with a link to the photo.  Not exactly what I had in mind.  I want the actual photo itself.  </p>

<p>Now, there are all sorts of cool new tags (like <code>&lt;mt:AssetLabel /&gt;</code> and <code>&lt;mt:AssetUrl /&gt;</code>) that let you get at any part of your uploaded asset.  The only trouble is, there&#8217;s no documented way to put the asset you want (in our case <code>&lt;mt:EntryDataMastheadImage /&gt;</code>)  in context.  Sure, you can do an mt:Assets loop that lets you list the last however many assets; but we&#8217;re trying to get at <code>mt:EntryDataMastheadImage</code>, nothing else.</p>

<h5>Solution: Create CustomField Container With -Asset Suffix</h5>

<p>When you create a custom field in Movable Type, it creates two tags for you.  The first is the one I listed before: <code>&lt;mt:EntryDataMastheadImage /&gt;</code> and it&#8217;s a single tag that&#8217;s used to call to the asset in question.  There&#8217;s another, undocumented tag that&#8217;s created: <code>&lt;mt:EntryDataMastheadImageAsset /&gt;</code>.  <strong>This</strong> tag is a container tag that does exactly what we need: puts that particular CustomField data in context.  Once it&#8217;s in context, we can use all of those nifty tags to get at whatever specific asset information we want.  Here&#8217;s how I solved my particular problem:</p>

<pre><code> &lt;mt:IfNonEmpty tag="EntryDataMastheadImage"&gt;
      &lt;mt:EntryDataMastheadImageAsset&gt;
           &lt;img src="&lt;mt:AssetURL /&gt;" /&gt;
      &lt;/mt:EntryDataMastheadImageAsset&gt;
 &lt;/mt:IfNonEmpty&gt;
</code></pre>

<p><em>A great big round of applause to <a href="http://mt-hacks.com">Mark Carey</a> for helping me discover this little undocumented nugget.  Update: Arvind pointed out that <a href="http://plugins.movalog.com/forums/viewtopic.php?id=642">it&#8217;s documented on his forums</a>.</em></p>
]]></description>
<link>http://www.movabletweak.com/templates/image_customfields_in_movable.php</link>
<guid>http://www.movabletweak.com/templates/image_customfields_in_movable.php</guid>
<category>Templates</category>
<pubDate>Wed, 05 Mar 2008 14:20:29 -0500</pubDate>
<author>
<name>Plasticmind</name>
</author>
</item>

<item>
<title>Movable Type Template Map (.PDF)</title>
<description><![CDATA[<p><a href="http://movabletweak.com/assets/mt_templatemap.pdf"><img src="http://farm3.static.flickr.com/2413/2293166344_a3a080ef07.jpg?v=0" alt="" /></a></p>

<p>For those of you just upgrading to <a href="http://www.movabletype.com/products/mt4.html">Movable Type 4</a>, I&#8217;m sure you&#8217;re experiencing a considerable amount of confusion regarding the new modular template approach.  If you&#8217;ve just gotten on board, it probably makes even less sense.</p>

<p>I won&#8217;t go into too much detail on this modular approach, because <a href="http://www.movabletweak.com/architecture/mt3_vs_mt4_templates.php">I&#8217;ve already dealt with it previously on this site</a>.  The gist of it is this: instead of having dozens of copies of the same code strewn across all your templates, the new approach is having all the code snippets you&#8217;re likely to use more than once&#8212;headers, sidebars, entry lists&#8212;stored in template modules and called to from each individual template.  So instead of changing your sidebar in seven different templates, you only have to change it once.</p>

<p>A great big thanks to <a href="http://www.thenorwoodhome.com/">Mark Norwood</a> for putting this together.  There are a few changes I&#8217;d like to make as well as a giant &#8220;cheat sheet&#8221; that might prove handy.  But I figure I&#8217;d get it out there now for anyone struggling with the new template structure.</p>

<p><strong><a href="http://movabletweak.com/assets/mt_templatemap.pdf">Download Movable Type 4 Template Map (.pdf/80k)</a></strong></p>
]]></description>
<link>http://www.movabletweak.com/templates/movable_type_template_map_pdf.php</link>
<guid>http://www.movabletweak.com/templates/movable_type_template_map_pdf.php</guid>
<category>Templates</category>
<pubDate>Mon, 25 Feb 2008 22:42:40 -0500</pubDate>
<author>
<name>Plasticmind</name>
</author>
</item>

<item>
<title>List Random Authors (via PHP)</title>
<description><![CDATA[<p>It&#8217;s been far too long since I posted to the Tweak.  Sometimes it&#8217;s hard to document when you&#8217;re working, but one of my resolutions is to do better with this (especially with the phenomenal strides Movable Type has taken recently).  In the mean time, you&#8217;ll probably find more frequent, shorter posts that may not have as much explanation as you might have found in the past.  The hope is that getting a lot of quick solutions out there for public consumption is better than a few comprehensive ones.  <strong>Enjoy.</strong></p>

<p>A couple of things to note first:  Makes sure that you&#8217;ve got author archives set up.  You can hack this to work with author profiles, but that&#8217;s not the scope of this tutorial.</p>

<pre><code>&lt;?php
    $displayed_authors = array(); // Will hold indexes from $authors for authors already displayed
    $show = 25; // How many authors should we show?

    &lt;mt:Authors&gt;
        $authors[&lt;mt:AuthorId /&gt;] = '&lt;li&gt;&lt;a href="&lt;mt:EntryLink archive_type="Author" /&gt;"&gt;&lt;mt:EntryAuthorDisplayName encode_php='1' /&gt;&lt;/a&gt;&lt;/li&gt;';
    &lt;/mt:Authors&gt;

    for ($i=1; $i &lt;= $show; $i++) {
        $rn = array_rand($authors); 
        // Loops until it finds an author not displayed
        while(in_array($rn, $displayed_authors)) {
            $rn = array_rand($authors);
        }
        array_push($displayed_authors, $rn);
        echo $authors[$rn];
    }
?&gt;
</code></pre>

<p>First, we set up an array where we&#8217;ll store all the authors that have already been displayed.  More on that in a minute.  Then we define how many authors we want to show with this block.</p>

<p>Next, we loop through all the authors, stashing them all into an array.  Actually, we&#8217;re stashing the html that we want displayed as it gets looped through.  This can be basically whatever you want.  If you use other Movable Type tags, make sure you add the  <code>encode_php='1'</code> filter or else you could get some nasty PHP parse errors and break your site. (<em>Usually because of single quote/double quote mismatching.</em>)</p>

<p>Next up is displaying the authors.  We&#8217;re going to loop through authors 25 times; remember, that&#8217;s what we set up with the $show variable.  The <code>array_rand</code> function basically says &#8220;pull a random number from 1 to the number of items in our array&#8221;.  We had to put in a special <code>while</code> loop to make sure it didn&#8217;t pick a number already used; this would result in duplicate listings of a single author.  The <code>array_push</code> then stores the new, non-duplicate random number in our displayed authors array to ensure we don&#8217;t duplicate it next time through the loop.</p>

<p>Finally, we echo a random item from the <code>$authors</code> array.  This loops through however many times you&#8217;ve told it to with the <code>$show</code> variable.</p>

<p><strong>Thanks to <a href="http://movalog.com">Arvind</a> for helping me solve the dupe problem.  He also made me say that I will now worship him forever.</strong></p>
]]></description>
<link>http://www.movabletweak.com/templates/list_random_authors.php</link>
<guid>http://www.movabletweak.com/templates/list_random_authors.php</guid>
<category>Templates</category>
<pubDate>Thu, 24 Jan 2008 00:36:23 -0500</pubDate>
<author>
<name>Plasticmind</name>
</author>
</item>

<item>
<title>Rotating Banner Ads MT Style</title>
<description><![CDATA[<p><strong>10/10/2007: Updated for Movable Type 4.x</strong></p>

<p>A recent customer asked me if they could have an easy to manage banner ad setup, with the ability to add advertisements and specify links and alternate text.  All of this while being able to manage them easily.  Sounds like a job for&#8230; Movable Type!</p>

<p>Despite the title, this little tip can be used for any ads&#8212;any images at all for that matter.  There are four basic steps: upload the ad, create an entry for it, create the php file and include it in your template.</p>
]]></description>
<link>http://www.movabletweak.com/templates/rotating_banner_ads_mt_style.php</link>
<guid>http://www.movabletweak.com/templates/rotating_banner_ads_mt_style.php</guid>
<category>Templates</category>
<pubDate>Wed, 10 Oct 2007 15:29:43 -0500</pubDate>
<author>
<name>Plasticmind</name>
</author>
</item>

<item>
<title>Creative Ways To Use Subcategories</title>
<description><![CDATA[<h5>Create a &#8220;Breadcrumb&#8221; Trail In Movable Type Using Subcategories</h5>

<p><strong>Quandary:</strong>  Someone clicks on a subcategory archive, but it looks just like every other category page.  How can we give the user a better sense of context for the subcategory pages?</p>

<p><strong>Solution:</strong>  Breadcrumbs!  You know, they look like: <em>Category » Subcategory</em> , with links that let us get around a complex hierarchy pretty easily.  Put this code where your category title gets displayed:</p>

<p><code>
&lt;mt:HasParentCategory&gt;<br />
&#160;&#160;&#160;&#160;&lt;mt:ParentCategories exclude_current="1"&gt;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;a href="&lt;mt:CategoryArchiveLink/&gt;"&gt;&lt;mt:CategoryLabel /&gt;&lt;/a&gt;<br />
&#160;&#160;&#160;&#160;&lt;/mt:ParentCategories&gt;&#160;&#160;» <br />
&lt;/mt:HasParentCategory&gt;<br />
&lt;mt:ArchiveTitle /&gt;
</code></p>

<p>Essentially, we check to see if the category page we&#8217;re on has a parent.  If it does, we append the title with that parent category name (exclude_current hides the subcategory we&#8217;re in) and link so the user can jump back pretty quickly.</p>

<h5>Display Subcategories As A Menu On A Category Archive Page</h5>

<p><strong>Quandary:</strong> You got several categories with subcategories, and you&#8217;d like to show these subcategories as a menu on the parent category archive page.</p>

<p><strong>Solution:</strong> This is a little tricky because all subcategories are categories too.  So you have to think more in terms of relationships to tackle this one.  Here&#8217;s the code:</p>

<p><code>
&lt;mt:HasSubCategories&gt;<br />
&#160;&#160;&#160;&#160;&lt;ul&gt;<br />
&#160;&#160;&#160;&#160;&lt;mt:SubCategories&gt;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;li&gt;&lt;a href="&lt;mt:CategoryArchiveLink/&gt;"&gt;&lt;mt:CategoryLabel /&gt;&lt;/a&gt;&lt;/li&gt;<br />
&#160;&#160;&#160;&#160;&lt;/mt:SubCategories&gt;<br />
&#160;&#160;&#160;&#160;&lt;/ul&gt;<br />
&lt;/mt:HasSubCategories&gt;<br />
<br />
&lt;mt:HasParentCategory&gt;<br />
&#160;&#160;&#160;&#160;&lt;mt:ParentCategories exclude_current="1"&gt;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;mt:HasSubCategories&gt;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;ul&gt;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;mt:SubCategories&gt;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;li&gt;&lt;a href="&lt;mt:CategoryArchiveLink /&gt;"&gt;&lt;mt:CategoryLabel /&gt;&lt;/a&gt;&lt;/li&gt;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;/mt:SubCategories&gt;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;/ul&gt;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;/mt:HasSubCategories&gt;<br />
&#160;&#160;&#160;&#160;&lt;/mt:ParentCategories&gt;        <br />
&lt;/mt:HasParentCategory&gt;
</code></p>

<p>The first chunk says, &#8220;If this category has subcategories (children), then run through the list of them and create a menu.&#8221;  This part targets the parent category pages, because they have children.</p>

<p>The second chunk is similar, but it&#8217;s meant for the subcategory pages themselves.  This code says, &#8220;If this category has a parent category, then give us a list of subcategories (children) that belong to that parent and make a menu.&#8221;  Since Movable Type doesn&#8217;t have any type of sibling tags, we have to go back to a parent if it exists and then display that parent&#8217;s children (those are the siblings).</p>
]]></description>
<link>http://www.movabletweak.com/categories/creative_subcategories.php</link>
<guid>http://www.movabletweak.com/categories/creative_subcategories.php</guid>
<category>Categories</category>
<pubDate>Sun, 09 Sep 2007 01:49:40 -0500</pubDate>
<author>
<name>Plasticmind</name>
</author>
</item>

<item>
<title>A Brief Review of Movable Type 4.0</title>
<description><![CDATA[<p><img src="/assets/mt4.png" alt="" /></p>

<p>Clearly, this new release from Six Apart is monumental.  Massive changes to both the interface and the innards make this a drastically new product for them.  If you've not yet downloaded it, <a href="http://www.movabletype.org/download/">go on</a>, it doesn't cost you anything.</p>

<h5>Action Oriented Interface</h5>

<p>Movable Type 3.x was primarily object oriented: entries, comments, templates.  Movable Type 4, on the other hand, is very action oriented: Create, Manage, Design.  It's much more content-centric as well.  When you land of the dashboard, you're presented with dynamic content like "Most Recent Comments" or "You have 13 drafts".  </p>

<p>Most everything is where you'd expect it to be.  Vital information shows up on the right hand side with relevant links (imagine that).  There are still some common-sense items that didn't make it in, like a rebuild option on the <strike>entry</strike> template list action menu; but overall it's much easier to navigate that the previous incarnations.</p>

<p>And as I understand it, the application interface is much easier to change; what that means is a plethora of plugins that let you customize the UI to your hearts content.  <a href="http://www.staggernation.com/mtplugins/blog/2007/06/new_plugin_for_mt_4_bookmarks.php">Kevin's Bookmarks plugin</a> gives you a bookmarks menu for your most frequented MT pages.  <a href="http://plugins.movabletype.org/template-shelf/">Arvind's Template Shelf</a> creates a sidebar widget to the app that lets you quickly browse templates in your blog.  Arvind's even created a retro plugin called "My Blogs" (not to be confused with <em>My Humps</em> by The Black Eyed Peas) that makes your MT4 install look like MT3.  And with the launch of the new <a href="http://plugins.movabletype.org/">Plugin Directory</a>, I think it's safe to assume we'll be seeing more in the same vein.</p>

<h5>Common Tasks</h5>

<p>The new workflow takes a little getting used to, and I'm sure it won't work for everyone; but common tasks like reviewing comments and creating entries seems considerably faster.  I know many will balk at the new interface, but it really is much clearer.  There is a much more structured placement of information: System wide information at the very top, blog selection on the next level, then a blog related action menu below that.  It flows well.  </p>

<p>There have been some concerns raised about the menus.  First, clicking versus hover.  Six Apart chose to make the action menu expand on hover and the blog menu expand on click.  I think it's a fair compromise as most people won't be furiously switching blogs (compare this to the jump menu at the top of the old interface, two clicks instead of 3). Second, disabled items graying out versus disappearing.  Six Apart chose to leave them in and just gray them out when they're not available.  Having worked tech support before, I know how maddening a thing disappearing menu items (Microsoft called them personalized menus) can be.  The human brain builds habits or pathways when using an interface; when those constantly change, it can end up taking a considerable amount longer while generating frustration.  (But there is <a href="http://mt-hacks.com/20070814-hide-inactive-mt4-menu-items-with-dynamic-menus.html">a plugin out there</a> for those of you who just have to have it that way.)</p>

<p>One essential technique that speeds up my work is opening new parts of the app in separate tabs; those 1 or 2 second loads can add up quickly.  Just hold down Ctrl or Apple as you click a menu item.</p>

<h5>Javascript Heavy</h5>

<p>The new interface relies on quite a bit of javascript wizardry, which seems to cause quite a bit of drag, especially using Firefox, one of the slowest browsers at processing javascript.  The template editor with code highlighting and line numbering is not just a nice touch, it's really helpful.  Unfortunately, something funny would happen once or twice over the course of a day and I couldn't edit my templates without a full reboot of the system.  The scripting is really great, but they need to tighten the belt before they release 4.1.</p>

<h5>New User Controls</h5>

<p>If you're a lone blogger, you may never touch this feature, but poke around in there.  The ability to define custom roles and permission sets and then assign them to different users makes MT4 the platform of choice for community blogs.  Movable Type can even build a profile page with author information.</p>

<h5>Code Base</h5>

<p>I'm not a developer, but I follow the developer lists; several of the more well-known MT developers were really frustrated with some of the new changes to the code base.  Whether that's just a normal response to a major code overhaul or because the plugin documentation was scarce up until just a few weeks ago, I can't say for sure.  It had me shaking in my boots when Tim Appnel threw up his hands in frustration when trying to port his Tags.app plugin; but a recent boom in MT4 plugins has slaked some of those concerns.</p>

<h5>Templates</h5>

<p>Aye, there's the rub.  It's a bittersweet thing.  The Movable Type templating language used to be so simple and easy to figure out; but with this release, templates are becoming less like templates and more like a programming language.  This has it's advantages and disadvantages.  The current template structure works much like TypePad's setup: every chunk of template is stored separately and the included based on conditionals.  So much nicer than hunting through six different templates to make a tiny change in the html header; but along with power comes complexity.  Might be daunting for newcomers.  That being said, the old templates work just fine in MT, if that's how you want to roll.</p>

<p>Also, I've been wanting template packs ever since we started <a href="http://www.thestylearchive.com">The Style Archive</a>, and even though it's not in this release, Byrne assures me it's coming in 4.1.</p>

<h5>MT4: Satisfied?</h5>

<p>I'm really pleased with Movable Type 4.  It's made several large jumps forward in blogging.  It's going to take some time to get used to the new workflow, so I may be able to give a better review then.  It didn't solve all of my image handling concerns (nor has any online software out there, except Flickr).  But the overall feel and functionality of the new MT makes it really fun to use; and with an open source release of it on the horizon, that settles it for me.</p>

<p>More to come...</p>
]]></description>
<link>http://www.movabletweak.com/app/a_brief_review_of_movable_type.php</link>
<guid>http://www.movabletweak.com/app/a_brief_review_of_movable_type.php</guid>
<category>App</category>
<pubDate>Wed, 15 Aug 2007 02:45:48 -0500</pubDate>
<author>
<name>Plasticmind</name>
</author>
</item>

<item>
<title>Lovable Type (aww)</title>
<description><![CDATA[<p>Shiny, happy people will enjoy this Movable Type wallpaper:</p>

<p><a href="http://www.flickr.com/photos/plasticmind/1127590370/"><img src="http://farm2.static.flickr.com/1204/1127590370_6379c04677_m.jpg" alt="Lovable Type" /></a></p>

<p><a href="http://movabletweak.com/assets/lovabletype-1680.png">http://movabletweak.com/assets/lovabletype-1680.png</a><br />
<a href="http://movabletweak.com/assets/lovabletype-1280.png">http://movabletweak.com/assets/lovabletype-1280.png</a><br />
<a href="http://movabletweak.com/assets/lovabletype-1024.png">http://movabletweak.com/assets/lovabletype-1024.png</a><br />
<a href="http://movabletweak.com/assets/lovabletype-800.png">http://movabletweak.com/assets/lovabletype-800.png</a></p>]]></description>
<link>http://www.movabletweak.com/freebies/lovable_type_aww.php</link>
<guid>http://www.movabletweak.com/freebies/lovable_type_aww.php</guid>
<category>Freebies</category>
<pubDate>Tue, 14 Aug 2007 10:34:22 -0500</pubDate>
<author>
<name>Plasticmind</name>
</author>
</item>

<item>
<title>Tricking RightFields Into Showing Your Extra Fields First</title>
<description><![CDATA[<p><a href="http://www.staggernation.com/mtplugins/RightFields/">Kevin Shay's RightFields</a> is probably one of my most-used plugins for Movable Type, and thanks to Kevin's help I came up with a unique solution to a problem I was facing.</p>

<p>RightFields lets you rename the standard fields (entry body, extended entry, etc.), but I had a strange situation today where I needed to keep the standard fields untouched and use only extra fields.  (The client was migrating from using the entry body for everything to using the extra fields for different types of data, but it's a migration that will take a long time.)  Of course, RightFields handles this beautifully, but the client has a unique request: <em>move the extra fields to the top of the edit entry screen</em>.</p>

<p>Unfortunately, RightFields doesn't have the option to place the extra fields before the standard fields.  But here's the nifty tweak:  </p>

<p>RightFields uses <code>&lt;TMPL_IF NAME=DISP_PREFS_SHOW_TAGS&gt;</code> as an anchor to place the extra fields in the edit_entry.tmpl file.  (This is the template that you see when you edit an entry.)  So let's fool RightFields into moving the extra fields by moving the anchor.</p>

<p>Edit the /MT_DIR/tmpl/cms/edit_entry.tmpl file.</p>

<p>Look for <code>&lt;div id="body-box"&gt;</code> and put the following code right after it:</p>

<p><code><br />
&lt;!-- Lets trick RightFields! --&gt;<br /><br />
	&lt;TMPL_IF NAME=DISP_PREFS_SHOW_TAGS&gt;&lt;/TMPL_IF&gt;<br /><br />
&lt;!-- End trick --&gt;<br />
</code></p>

<p>Your edit entry screen should now display extra fields first!</p>]]></description>
<link>http://www.movabletweak.com/app/reordering-extra-fields.php</link>
<guid>http://www.movabletweak.com/app/reordering-extra-fields.php</guid>
<category>App</category>
<pubDate>Mon, 13 Aug 2007 17:06:43 -0500</pubDate>
<author>
<name>Plasticmind</name>
</author>
</item>

<item>
<title>One Step Back, Two Steps Forward</title>
<description><![CDATA[<p>Please excuse any mess you see around here in the next week or so.  I'm finally unifying my Movable Type installs (why, oh, why did I ever fork them!) and then upgrading to MT4.  Things that you should notice broken:  Code snippets, comment ability, etc.  If you do come across something that isn't the way it ought to be (like the comment function), please <a href="http://plasticmind.com/contact/">let me know</a>.  Danke.</p>]]></description>
<link>http://www.movabletweak.com/announcements/redux.php</link>
<guid>http://www.movabletweak.com/announcements/redux.php</guid>
<category>Announcements</category>
<pubDate>Wed, 01 Aug 2007 02:21:21 -0500</pubDate>
<author>
<name>Plasticmind</name>
</author>
</item>

<item>
<title>Using The Style Archive With Movable Type 4</title>
<description><![CDATA[<p>In the Movable Type Support Forums, <a href="http://forums.sixapart.com/index.php?showtopic=63115&st=0&gopid=253491&#entry253491">Gingermonkey asked a question</a> that will become more and more relevant as the official release of Movable Type 4 draws near:</p>

<blockquote><p>"After reading that MT4 supports previous versions templates, I have been trying to get templates from thestylearchive.com to work.  MT4 is able to connect to the thestylearchive.com, view & select the template -- and files get copied into mt-static equivalent directory. However, the template doesn't reproduce properly at all (in fact neither did any of the templates choosen from thestylearchive.com, only templates built in to MT4 and those from the MT4 Style library.  Is this a known bug with with Movable Type 4.0 RC1b, or am I not setting up something correctly?"</p></blockquote>

<p>Well, for those of you that don't know, the new <a href="http://www.movabletype.org/2007/07/podcasting-yep-we-got-that.html">Movable Type 4 templates are much, much cleaner</a>.  Lots of unnecessary code has been whacked and the end result is a meaner, leaner template.  Now, the good thing about cleaning up MT4's default templates is that they're much more manageable. Hurrah for clean code!</p>

<p>The bad thing, however, is that all of the styles over at <a href="http://www.thestylearchive.com">TheStyleArchive.com</a> are designed to work with the MT3.35 default templates.  Now, MT is MT, so the <a href="http://www.sixapart.com/movabletype/default_templates">default templates</a> from MT3.35 still work with MT4. If you copy the old MT3 templates over into your new MT4 install, Stylecatcher can still pull in the styles from TSA and your site will look as the designer intended...</p>

<p>I know that using the old templates certainly isn't ideal, and because of that, we're working to get the <a href="http://www.thestylearchive.com">TSA</a> styles functional with the MT4 default templates.  Realize, however, that it's going to take some time as converting stylesheets isn't always as simple as search-and-replace.</p>

<p>In the meantime, rest assured that <a href="http://movabletype.org">MT4</a> is shipping with some really beautiful styles that will tide over you styleophiles.</p>]]></description>
<link>http://www.movabletweak.com/templates/the_style_archive_with_mt4.php</link>
<guid>http://www.movabletweak.com/templates/the_style_archive_with_mt4.php</guid>
<category>Templates</category>
<pubDate>Mon, 30 Jul 2007 00:03:42 -0500</pubDate>
<author>
<name>Plasticmind</name>
</author>
</item>

<item>
<title>Movable Type 3 vs. Movable Type 4: A Modular Site Approach</title>
<description><![CDATA[<p>Adam Cleaveland from <a href="http://www.cleavedesign.com/">Cleave Design</a> sent over this question, and I thought it was particularly relevant, especially in light of the new approach Movable Type 4 takes with it's default templates:</p>

<blockquote><p>"I am having a very hard time understanding the "Templates" within MT. I'm used to just being able to make a change within the header.php in Wordpress that affects every page. However, with Movable Type, it seems that if I make any chance in the template, I have to make that change in every different template I have (Main Index, Master Archive, Search Template, Comment-Pending Template, Comment-Error Template, etc., etc.). Am I just completely missing something? Or is this the only way to go about doing it?"</p></blockquote>

<p>The question he raises is a good one.  The first thing is not to confuse "template tags" with "template modules".  As MT is currently bundled, each "template" has all of the code needed for a full page.  The main index page has all of the html header information, the banner has all the banner information, sidebar, etc.  Now, it&apos;s nice because most information like the blog name and description and meta tags are all stored in MT and get put into the page by using template tags (i.e. <MTBlogName>).  But essentially if you want to change the HTML for the header or the banner or anything else, you have to change it on that particular template.  So, for example, adding a div above the banner would require opening each template and adding the div above the banner.</p>

<p><img src="/assets/templateapproach-mt3.gif" alt="" /></p>

<p>Now, there are ways around this; in fact, that&apos;s one of the reasons Six Apart is changing it&apos;s approach with the new Movable Type 4.  It makes a lot more sense (even though it&apos;s a bit more confusing for the beginner).  The basic approach is this: commonly used chunks of code are stored as template "modules" and then called to from each template.  Makes MUCH more sense because you don&apos;t repeat code.  If the header code is the same for all of your pages, then the only thing you need on each page is a call to the template module (<MTInclude module="Foo">) that holds your header code.  It&apos;s all in one place.</p>

<p>Of course, sometimes you&apos;ve got things in those modules that need to be custom for each page, like the entry title in the HTML header area.  Movable Type handles nearly all of that stuff with template tags.  Put <MTEntryTitle> in between your <title> tags and Movable Type figures out the context and puts the right information in there.  Sometimes, though, there are things you might want to, for example, add to your sidebar for particular pages; Movable Type allows you to set variables and call them from your templates.  This gives you the ability to add specific content or check against a Boolean "switch" to turn parts of your module on or off.  </p>

<p><img src="/assets/templateapproach-mt4.gif" alt="" /></p>

<p>Lots of developers use a similar approach with PHP.  Common elements like the header and footer get created as index templates and then included with a simple PHP include.  This saves you considerably on rebuilds because MT is only building one file that all your pages include instead of building the same code for every page.  It&apos;s not always the best option, but it's often worth considering.</p>

<p>The learning curve for this new approach is slightly higher because you have to be able to follow the linking; but the power it brings you is tremendous.  Instead of trying to scrounge through all of your templates and replace code each time a change is made to these common elements, you can just change it in one place and MT will build it out across your site.</p>]]></description>
<link>http://www.movabletweak.com/architecture/mt3_vs_mt4_templates.php</link>
<guid>http://www.movabletweak.com/architecture/mt3_vs_mt4_templates.php</guid>
<category>Architecture</category>
<pubDate>Tue, 24 Jul 2007 02:07:29 -0500</pubDate>
<author>
<name>Plasticmind</name>
</author>
</item>

<item>
<title>MTTags.com: A Handy Reference For Movable Type Template Tags</title>
<description><![CDATA[<p><a href="http://mttags.com" title="MTTags.com: A Handy Reference For Movable Type Template Tags"><img src="http://www.mttags.com/images/logo.png" alt="MTTags.com: A Handy Reference For Movable Type Template Tags" /></a></p>

<p>I've had a hard time finding my way around the current Movable Type documentation, especially the tag reference, and I've heard some others saying the same thing; so I put together a new site that lets you get at all of the tags in a number of different ways.  If you find it helpful, cool; if it's not your thing, that's cool too.  Just trying to make it easier to find/use MT template tags.</p>

<p>Some of the things still on my to do list:</p>

<ul>
<li>Add miscellaneous tag related help:  Global tag attribute filters and date formats. Prominent links back to the official MT User Manual.</li>
<li>Downloadable/printable PDF tag reference:  An at-a-glance tag reference card so you don't have to keep switching screens to look up your MT tags.</li>
<li>More Code Samples: The real purpose of this site is to have real-life examples of these tags in action, much like the O'Reilley cookbooks. Ideally this process of posting/sharing examples will be automated.</li>
<li>Tag Versions: With the release of MT4, some older tags are deprecated, some newer tags are introduced. Look for markers soon to help make this reference version-specific.</li>
</ul>

<p><a href="http://mttags.com">MTTags.com</a> -- Hope it's a helpful!</p>]]></description>
<link>http://www.movabletweak.com/templates/mttagscom_a_handy_reference_fo.php</link>
<guid>http://www.movabletweak.com/templates/mttagscom_a_handy_reference_fo.php</guid>
<category>Templates</category>
<pubDate>Mon, 11 Jun 2007 14:32:40 -0500</pubDate>
<author>
<name>Plasticmind</name>
</author>
</item>

<item>
<title>Movable Type 4.0 Beta Wallpaper</title>
<description><![CDATA[<p>Show your colors with this durable, pre-shrunk, poly-cotton blend wallpaper:</p>

<p><br />
<a href="http://www.flickr.com/photos/plasticmind/532053320/"><img src="http://farm2.static.flickr.com/1261/532053320_67f1d64be8_m.jpg" alt="Movable Type 4.0 Beta" /></a></p>

<p><a href="http://movabletweak.com/assets/mt4-1680.jpg">http://movabletweak.com/assets/mt4-1680.jpg</a><br />
<a href="http://movabletweak.com/assets/mt4-1280.jpg">http://movabletweak.com/assets/mt4-1280.jpg</a><br />
<a href="http://movabletweak.com/assets/mt4-1024.jpg">http://movabletweak.com/assets/mt4-1024.jpg</a><br />
<a href="http://movabletweak.com/assets/mt4-800.jpg">http://movabletweak.com/assets/mt4-800.jpg</a><br />
</p>]]></description>
<link>http://www.movabletweak.com/freebies/movable_type_4_wallpaper.php</link>
<guid>http://www.movabletweak.com/freebies/movable_type_4_wallpaper.php</guid>
<category>Freebies</category>
<pubDate>Tue, 05 Jun 2007 16:00:04 -0500</pubDate>
<author>
<name>Plasticmind</name>
</author>
</item>


</channel>
</rss>