<?xml version="1.0" encoding="iso-8859-1"?>
<rss version="2.0" 
    xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
    xmlns:admin="http://webns.net/mvcb/"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:content="http://purl.org/rss/1.0/modules/content/">

  <channel>
    <title>Gadgetopia: Content Management</title>
    <link>http://www.gadgetopia.com/Categories/Content Management.html</link>
    <description>This is a sub-feed of the main Gadgetopia RSS feed. This feed displays entries from the "Content Management" category.  The main Gadgetopia feed is available at http://www.gadgetopia.com/index.xml.</description>
    <dc:language>en-us</dc:language>
    <dc:creator>deane@deanebarker.net</dc:creator>
    <dc:rights>Copyright 2008</dc:rights>
    <dc:date>2008-04-21T05:04:20-06:00</dc:date>
    <admin:generatorAgent rdf:resource="http://www.movabletype.org/?v=3.35" />
    <admin:errorReportsTo rdf:resource="mailto:deane@deanebarker.net"/>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <sy:updateBase>2000-01-01T12:00+00:00</sy:updateBase>


    <item>
      <title>Uber-Text Pages and the Lack of Inheritance in Content Management</title>
      <link>http://gadgetopia.com/post/6360</link>
      <description><![CDATA[<p><!-- FM Mobile Post Top Icon --></p>

<script type="text/javascript" src="http://mobileposts.federatedmedia.net/top_icon.js"></script>

<p><!-- /FM Mobile Post Top Icon --></p>

<p>(Note: the audio for this post is <a href="http://gadgetopia.com/media/audio/2008-04-21.mp3">here</a>.)</p>

<p>We had a build meeting the other day for a client&#8217;s site, and we walked through the site map to determine what content types we were going to need to pull this off.</p>

<p>In these cases, the first content type you inevitably define is the ubiquitous &#8220;text page.&#8221;  This is a simple page.  Of text.  Duh.</p>

<p>Text pages usually consist of a title, a summary (for index pages where you&#8217;re listing a bunch of them), and a body of text.  Many content management systems support this model explicitly (it&#8217;s built-in this way &#8212; think of a blogging platform), or you end up modeling your page like this if your system gives you that ability.</p>

<p>But how far do you&#8230;push, the text page?  There are a lot of opportunities to re-use this content type.  How far do you take it?</p>

<p>This particular client also need an &#8220;announcement.&#8221;  We took a long view of it, and determined that their announcements section was really just a group of text pages, reverse-ordered by date.  So, we thought, let&#8217;s just tack a &#8220;date&#8221; field on the text page model, and be done with it.  If the text page is in an announcements section, we&#8217;ll order by that date.  If not, we&#8217;ll ignore it.</p>

<p>Then, the client needed an &#8220;article&#8221; content type.  Well, what is an article?  It&#8217;s a text page&#8230;with a date&#8230;and an author.  So, let&#8217;s just tack an &#8220;author&#8221; datatype on the &#8220;text page&#8221; model, and we&#8217;re good&#8230;right?  We can use it when we need to, and ignore it when we don&#8217;t.</p>

<p>Later, the client needed a &#8220;newsletter&#8221; content type.  Turns out, this is just a text page with a PDF file attachment.  So, we tacked on a &#8220;file&#8221; datatype&#8230;</p>

<p>Now, in truth, this situation was hypothetical.  But you see the idea at work here?  How content types are really just derivative of a core content type?  The fact is, an awful lot of content types can be defined as:</p>

<ol>
<li>Title</li>
<li>Summary</li>
<li>Text body</li>
</ol>

<p>Tack on these datatypes &#8212;</p>

<ol>
<li>Date</li>
<li>Author</li>
<li>File attachment</li>
</ol>

<p>&#8212; and you&#8217;ve handled four separate, logical types in our mythical client&#8217;s content model: text page, announcement, article, and newsletter.</p>

<p>So, the question is, did we take this too far?  Or is what we have planned here an elegant solution to modeling this content?</p>

<p>In the end, it depends.  It depends on a lot of your content management system&#8217;s functionality external to content modeling.  Dividing these four logical types into multiple actual types is often valuable for more than just content modeling &#8212; many systems will drive things like templating and permissions by content type.  And what happens when you need to add a property to your Announcements, but not your Articles?  So having everything as some uber-text page can lead to other issues.</p>

<p>In the end, it comes down to repetition vs. elegance.  While duplicating your core set of properties on every content type is a pain, you avoid some tricky issues.  Conversely, pushing the envelope with a single content type is elegant, but you can paint yourself into a corner pretty quickly.</p>

<p>But, my point here is that we shouldn&#8217;t have to do this.  And here&#8217;s why &#8212;</p>

<p>Very few content management systems are using the object-oriented concept of inheritance these days.  Inheritance says that Class B is a superset of Class A &#8212; it includes all of Class A&#8217;s functionality, and then some more.  So if I happen to change Class A, Class B will change too.</p>

<p>In this case, I would model a &#8220;Page&#8221; object with these properties:</p>

<ol>
<li>Title</li>
<li>Menu Title (for <a href="http://gadgetopia.com/post/6331">implicitly menued systems</a>)</li>
<li>Summary</li>
<li>Body</li>
<li>META keywords</li>
<li>META description</li>
</ol>

<p>Then, would extend this base &#8220;Page&#8221; object into the &#8220;Announcement&#8221; object by adding a &#8220;date.&#8221;  I would extend <em>that</em> into an &#8220;Article&#8221; object by adding an &#8220;author,&#8221; and into the &#8220;Newsletter&#8221; object by adding a &#8220;file.&#8221;</p>

<p>Then, say I want to geo-locate everything someday.  I just add a &#8220;location&#8221; attribute to the base object, and everything extends from that.</p>

<p>Very few content management systems allow this.  I&#8217;ve seen it in exactly two systems, both heavy of document management &#8212; <a href="http://alfresco.com/">Alfresco</a> and <a href="http://documentum.com/">Documentum</a>.  It&#8217;s elegant, it&#8217;s precise, and it&#8217;s powerful, which should be obvious since it&#8217;s been a core tenet of object-oriented programming for years.</p>

<p>Sadly, implementing this kind of system is complicated, and usually computationally expensive.  Documentum, for example, maintained a database table for every level of inheritance, and did one-to-one joins all the way down the inheritance tree to return a big database row for an object.  (But, on the other hand, this is <a href="http://gadgetopia.com/post/4297">built-in to Postgres</a>, so WTH?)</p>

<p>Even if a system didn&#8217;t let you do traditional inheritance, N-levels deep, it would be handy if you had a &#8220;base object&#8221; from which you could derive your types from.  Meaning, you could alter a base object to include things like the title, summary, text, etc., then each type would be adding properties to this base type.  You couldn&#8217;t go more than the one level deep, but it would still solve a number of problems.</p>

<p>If your CMS has a strong <a href="http://gadgetopia.com/post/4237">content tree</a>, you could fake inheritance a bit.  You could create a base content type, then add <a href="http://www.gadgetopia.com/post/5889">subcontent</a> to &#8220;flavor&#8221; it.  Your base type would have the core properites, and you could add subcontent underneath it to hold other information specific to the pseudo-class you need that particular object to act like.  This is hack-ish, but it might work well in some cases, and it fits the model of &#8220;Custom Field Sets&#8221; we discussed <a href="http://gadgetopia.com/post/4698">several years ago</a>.</p>

<p>In the end, content type inheritance is the holy grail of content modeling, and you don&#8217;t see it that often, which is too bad.  It would be a huge asset to any CMS that implemented it.  <a href="http://ez.no/">eZ publish</a> claims that it&#8217;s on the roadmap, but I&#8217;ve yet to see anyone put a date on it.</p>

<p><!-- FM Mobile Post Widget --></p>

<script type="text/javascript" src="http://mobileposts.federatedmedia.net/gadgetopia/663/mobile_post.js"></script>

<p><!-- /FM Mobile Post Widget --></p>
]]></description>
      <guid isPermaLink="false">6360@http://gadgetopia.com/</guid>
      <content:encoded><![CDATA[<p><!-- FM Mobile Post Top Icon --></p>

<script type="text/javascript" src="http://mobileposts.federatedmedia.net/top_icon.js"></script>

<p><!-- /FM Mobile Post Top Icon --></p>

<p>(Note: the audio for this post is <a href="http://gadgetopia.com/media/audio/2008-04-21.mp3">here</a>.)</p>

<p>We had a build meeting the other day for a client&#8217;s site, and we walked through the site map to determine what content types we were going to need to pull this off.</p>

<p>In these cases, the first content type you inevitably define is the ubiquitous &#8220;text page.&#8221;  This is a simple page.  Of text.  Duh.</p>

<p>Text pages usually consist of a title, a summary (for index pages where you&#8217;re listing a bunch of them), and a body of text.  Many content management systems support this model explicitly (it&#8217;s built-in this way &#8212; think of a blogging platform), or you end up modeling your page like this if your system gives you that ability.</p>

<p>But how far do you&#8230;push, the text page?  There are a lot of opportunities to re-use this content type.  How far do you take it?</p>

<p>This particular client also need an &#8220;announcement.&#8221;  We took a long view of it, and determined that their announcements section was really just a group of text pages, reverse-ordered by date.  So, we thought, let&#8217;s just tack a &#8220;date&#8221; field on the text page model, and be done with it.  If the text page is in an announcements section, we&#8217;ll order by that date.  If not, we&#8217;ll ignore it.</p>

<p>Then, the client needed an &#8220;article&#8221; content type.  Well, what is an article?  It&#8217;s a text page&#8230;with a date&#8230;and an author.  So, let&#8217;s just tack an &#8220;author&#8221; datatype on the &#8220;text page&#8221; model, and we&#8217;re good&#8230;right?  We can use it when we need to, and ignore it when we don&#8217;t.</p>

<p>Later, the client needed a &#8220;newsletter&#8221; content type.  Turns out, this is just a text page with a PDF file attachment.  So, we tacked on a &#8220;file&#8221; datatype&#8230;</p>

<p>Now, in truth, this situation was hypothetical.  But you see the idea at work here?  How content types are really just derivative of a core content type?  The fact is, an awful lot of content types can be defined as:</p>

<ol>
<li>Title</li>
<li>Summary</li>
<li>Text body</li>
</ol>

<p>Tack on these datatypes &#8212;</p>

<ol>
<li>Date</li>
<li>Author</li>
<li>File attachment</li>
</ol>

<p>&#8212; and you&#8217;ve handled four separate, logical types in our mythical client&#8217;s content model: text page, announcement, article, and newsletter.</p>

<p>So, the question is, did we take this too far?  Or is what we have planned here an elegant solution to modeling this content?</p>

<p>In the end, it depends.  It depends on a lot of your content management system&#8217;s functionality external to content modeling.  Dividing these four logical types into multiple actual types is often valuable for more than just content modeling &#8212; many systems will drive things like templating and permissions by content type.  And what happens when you need to add a property to your Announcements, but not your Articles?  So having everything as some uber-text page can lead to other issues.</p>

<p>In the end, it comes down to repetition vs. elegance.  While duplicating your core set of properties on every content type is a pain, you avoid some tricky issues.  Conversely, pushing the envelope with a single content type is elegant, but you can paint yourself into a corner pretty quickly.</p>

<p>But, my point here is that we shouldn&#8217;t have to do this.  And here&#8217;s why &#8212;</p>

<p>Very few content management systems are using the object-oriented concept of inheritance these days.  Inheritance says that Class B is a superset of Class A &#8212; it includes all of Class A&#8217;s functionality, and then some more.  So if I happen to change Class A, Class B will change too.</p>

<p>In this case, I would model a &#8220;Page&#8221; object with these properties:</p>

<ol>
<li>Title</li>
<li>Menu Title (for <a href="http://gadgetopia.com/post/6331">implicitly menued systems</a>)</li>
<li>Summary</li>
<li>Body</li>
<li>META keywords</li>
<li>META description</li>
</ol>

<p>Then, would extend this base &#8220;Page&#8221; object into the &#8220;Announcement&#8221; object by adding a &#8220;date.&#8221;  I would extend <em>that</em> into an &#8220;Article&#8221; object by adding an &#8220;author,&#8221; and into the &#8220;Newsletter&#8221; object by adding a &#8220;file.&#8221;</p>

<p>Then, say I want to geo-locate everything someday.  I just add a &#8220;location&#8221; attribute to the base object, and everything extends from that.</p>

<p>Very few content management systems allow this.  I&#8217;ve seen it in exactly two systems, both heavy of document management &#8212; <a href="http://alfresco.com/">Alfresco</a> and <a href="http://documentum.com/">Documentum</a>.  It&#8217;s elegant, it&#8217;s precise, and it&#8217;s powerful, which should be obvious since it&#8217;s been a core tenet of object-oriented programming for years.</p>

<p>Sadly, implementing this kind of system is complicated, and usually computationally expensive.  Documentum, for example, maintained a database table for every level of inheritance, and did one-to-one joins all the way down the inheritance tree to return a big database row for an object.  (But, on the other hand, this is <a href="http://gadgetopia.com/post/4297">built-in to Postgres</a>, so WTH?)</p>

<p>Even if a system didn&#8217;t let you do traditional inheritance, N-levels deep, it would be handy if you had a &#8220;base object&#8221; from which you could derive your types from.  Meaning, you could alter a base object to include things like the title, summary, text, etc., then each type would be adding properties to this base type.  You couldn&#8217;t go more than the one level deep, but it would still solve a number of problems.</p>

<p>If your CMS has a strong <a href="http://gadgetopia.com/post/4237">content tree</a>, you could fake inheritance a bit.  You could create a base content type, then add <a href="http://www.gadgetopia.com/post/5889">subcontent</a> to &#8220;flavor&#8221; it.  Your base type would have the core properites, and you could add subcontent underneath it to hold other information specific to the pseudo-class you need that particular object to act like.  This is hack-ish, but it might work well in some cases, and it fits the model of &#8220;Custom Field Sets&#8221; we discussed <a href="http://gadgetopia.com/post/4698">several years ago</a>.</p>

<p>In the end, content type inheritance is the holy grail of content modeling, and you don&#8217;t see it that often, which is too bad.  It would be a huge asset to any CMS that implemented it.  <a href="http://ez.no/">eZ publish</a> claims that it&#8217;s on the roadmap, but I&#8217;ve yet to see anyone put a date on it.</p>

<p><!-- FM Mobile Post Widget --></p>

<script type="text/javascript" src="http://mobileposts.federatedmedia.net/gadgetopia/663/mobile_post.js"></script>

<p><!-- /FM Mobile Post Widget --></p>
]]></content:encoded>
      <dc:subject>Content Management</dc:subject>
      <dc:date>2008-04-21T05:04:20-06:00</dc:date>
    </item>

    <item>
      <title>Audio: What Makes a Content Management System?</title>
      <link>http://gadgetopia.com/post/6350</link>
      <description><![CDATA[<p><!-- FM Mobile Post Top Icon --></p>

<script type="text/javascript" src="http://mobileposts.federatedmedia.net/top_icon.js"></script>

<p><!-- /FM Mobile Post Top Icon --></p>

<p>In this latest audio post, we re-visited the grand-daddy of content management posts on Gadgetopia: <a href="http://gadgetopia.com/post/5940">What Makes a Content Management System?</a></p>

<p>For 33 blessed minutes, I ramble on about exactly what makes your site management system turn the corner from a simple &#8220;relational database with an admin section&#8221; and turn into a bonafide &#8220;content management system.&#8221;  In doing so, I present a broad overview of content management functionality.</p>

<p>Audio is <a href="http://gadgetopia.com/media/audio/2008-04-15a.mp3">here</a>.</p>

<p><!-- FM Mobile Post Widget --></p>

<script type="text/javascript" src="http://mobileposts.federatedmedia.net/gadgetopia/637/mobile_post.js"></script>

<p><!-- /FM Mobile Post Widget --></p>
]]></description>
      <guid isPermaLink="false">6350@http://gadgetopia.com/</guid>
      <content:encoded><![CDATA[<p><!-- FM Mobile Post Top Icon --></p>

<script type="text/javascript" src="http://mobileposts.federatedmedia.net/top_icon.js"></script>

<p><!-- /FM Mobile Post Top Icon --></p>

<p>In this latest audio post, we re-visited the grand-daddy of content management posts on Gadgetopia: <a href="http://gadgetopia.com/post/5940">What Makes a Content Management System?</a></p>

<p>For 33 blessed minutes, I ramble on about exactly what makes your site management system turn the corner from a simple &#8220;relational database with an admin section&#8221; and turn into a bonafide &#8220;content management system.&#8221;  In doing so, I present a broad overview of content management functionality.</p>

<p>Audio is <a href="http://gadgetopia.com/media/audio/2008-04-15a.mp3">here</a>.</p>

<p><!-- FM Mobile Post Widget --></p>

<script type="text/javascript" src="http://mobileposts.federatedmedia.net/gadgetopia/637/mobile_post.js"></script>

<p><!-- /FM Mobile Post Widget --></p>
]]></content:encoded>
      <dc:subject>Content Management</dc:subject>
      <dc:date>2008-04-15T23:55:47-06:00</dc:date>
    </item>

    <item>
      <title>Share Magazine: We&apos;re Famous</title>
      <link>http://gadgetopia.com/post/6339</link>
      <description><![CDATA[<p>Me and Joe are featured in<a href="http://ez.no/company/news/share_magazine_for_april_is_out"> eZ publish&#8217;s Share Magazine for April</a>.  They did an interview, and there&#8217;s a snazzy picture of us.</p>

<blockquote>
  <p>What comes out of the box with eZ Publish is just a starting point. Don’t be afraid to extend the platform, through custom classes, extensions, template operators, etc. Don’t accept a limitation. If you feel hindered in any way, ask questions, because there’s a way to do anything.</p>
</blockquote>

<p>Click on the cover image to get the PDF (warning &#8212; it&#8217;s big).</p>
]]></description>
      <guid isPermaLink="false">6339@http://gadgetopia.com/</guid>
      <content:encoded><![CDATA[<p>Me and Joe are featured in<a href="http://ez.no/company/news/share_magazine_for_april_is_out"> eZ publish&#8217;s Share Magazine for April</a>.  They did an interview, and there&#8217;s a snazzy picture of us.</p>

<blockquote>
  <p>What comes out of the box with eZ Publish is just a starting point. Don’t be afraid to extend the platform, through custom classes, extensions, template operators, etc. Don’t accept a limitation. If you feel hindered in any way, ask questions, because there’s a way to do anything.</p>
</blockquote>

<p>Click on the cover image to get the PDF (warning &#8212; it&#8217;s big).</p>
]]></content:encoded>
      <dc:subject>Content Management</dc:subject>
      <dc:date>2008-04-10T17:21:54-06:00</dc:date>
    </item>

    <item>
      <title>The Necessity of Subcontent Re-visited</title>
      <link>http://gadgetopia.com/post/6333</link>
      <description><![CDATA[<p><!-- FM Mobile Post Top Icon --></p>

<script type="text/javascript" src="http://mobileposts.federatedmedia.net/top_icon.js"></script>

<p><!-- /FM Mobile Post Top Icon --></p>

<p>In this audio post, we re-visit <a href="http://gadgetopia.com/post/5889">last year&#8217;s post on subcontent</a> &#8212; the concept of modeling content by stacking it on top of each other.  I feel just as strongly about this as the day I wrote the original post.</p>

<p>Audio is <a href="http://gadgetopia.com/media/audio/2008-04-06.mp3">here</a>.</p>

<p>(Note: there&#8217;s one blatant mistake in this one that I didn&#8217;t realize until I played it back.  Toward the end I say &#8220;node dependent,&#8221; when I really meant &#8220;position dependent.&#8221;  Not being remotely capable with audio editing, I have no idea how to fix it short of re-recording the whole thing.)</p>

<p><!-- FM Mobile Post Widget --></p>

<script type="text/javascript" src="http://mobileposts.federatedmedia.net/gadgetopia/590/mobile_post.js"></script>

<p><!-- /FM Mobile Post Widget --></p>
]]></description>
      <guid isPermaLink="false">6333@http://gadgetopia.com/</guid>
      <content:encoded><![CDATA[<p><!-- FM Mobile Post Top Icon --></p>

<script type="text/javascript" src="http://mobileposts.federatedmedia.net/top_icon.js"></script>

<p><!-- /FM Mobile Post Top Icon --></p>

<p>In this audio post, we re-visit <a href="http://gadgetopia.com/post/5889">last year&#8217;s post on subcontent</a> &#8212; the concept of modeling content by stacking it on top of each other.  I feel just as strongly about this as the day I wrote the original post.</p>

<p>Audio is <a href="http://gadgetopia.com/media/audio/2008-04-06.mp3">here</a>.</p>

<p>(Note: there&#8217;s one blatant mistake in this one that I didn&#8217;t realize until I played it back.  Toward the end I say &#8220;node dependent,&#8221; when I really meant &#8220;position dependent.&#8221;  Not being remotely capable with audio editing, I have no idea how to fix it short of re-recording the whole thing.)</p>

<p><!-- FM Mobile Post Widget --></p>

<script type="text/javascript" src="http://mobileposts.federatedmedia.net/gadgetopia/590/mobile_post.js"></script>

<p><!-- /FM Mobile Post Widget --></p>
]]></content:encoded>
      <dc:subject>Content Management</dc:subject>
      <dc:date>2008-04-07T01:26:59-06:00</dc:date>
    </item>

    <item>
      <title>The USA Today Content Tree</title>
      <link>http://gadgetopia.com/post/6332</link>
      <description><![CDATA[<p><a title="USA TODAY Content Tree - USATODAY.com" href="http://asp.usatoday.com/community/tags/topic-index.aspx">USA TODAY Content Tree</a>: While looking for an internal link for my last story, I Googled &#8220;<a href="http://www.google.com/search?q=the+content+tree">the content tree</a>.&#8221;  The second result was interesting &#8212; a taxonomy of all USA Today stories in a clickable, expandable tree structure.</p>

<blockquote>
  <p>The following topic tree represents the entire USA TODAY story collection going back as far as late 2003. We&#8217;ve presented these stories within our site structure, which has up to four (4) levels in each of our seven (7) site sections. </p>
</blockquote>

<p>If you&#8217;re into Information Architecture, this is an interesting case study of content classification.</p>
]]></description>
      <guid isPermaLink="false">6332@http://gadgetopia.com/</guid>
      <content:encoded><![CDATA[<p><a title="USA TODAY Content Tree - USATODAY.com" href="http://asp.usatoday.com/community/tags/topic-index.aspx">USA TODAY Content Tree</a>: While looking for an internal link for my last story, I Googled &#8220;<a href="http://www.google.com/search?q=the+content+tree">the content tree</a>.&#8221;  The second result was interesting &#8212; a taxonomy of all USA Today stories in a clickable, expandable tree structure.</p>

<blockquote>
  <p>The following topic tree represents the entire USA TODAY story collection going back as far as late 2003. We&#8217;ve presented these stories within our site structure, which has up to four (4) levels in each of our seven (7) site sections. </p>
</blockquote>

<p>If you&#8217;re into Information Architecture, this is an interesting case study of content classification.</p>
]]></content:encoded>
      <dc:subject>Content Management</dc:subject>
      <dc:date>2008-04-05T19:31:33-06:00</dc:date>
    </item>

    <item>
      <title>Menuing in Content Management: Implicit vs. Explicit</title>
      <link>http://gadgetopia.com/post/6331</link>
      <description><![CDATA[<p><!-- FM Mobile Post Top Icon --></p>

<script type="text/javascript" src="http://mobileposts.federatedmedia.net/top_icon.js"></script>

<p><!-- /FM Mobile Post Top Icon --></p>

<p>(Audio is also <a href="http://gadgetopia.com/media/audio/2008-04-07.mp3">here</a>. Sorry about the quality &#8212; I was using a different mic this time, and the input levels were all hosed up.)</p>

<p>Navigation is often a pain when it comes to content management.  Now, don&#8217;t confuse &#8220;navigation&#8221; with information architecture &#8212; that grand plan of what goes where in relation to what.</p>

<p>By &#8220;navigation,&#8221; I mean &#8220;menuing.&#8221;  It&#8217;s less theory, and more practical application of how do you get a specific group of links in a specific spot on a page, and make sure the right group of links shows up with the right content?</p>

<p>In the broadest possible sense, there are two theories to handle menuing:</p>

<ol>
<li>Implicit, meaning the menus are driven off the content structure of the site.</li>
<li>Explicit, meaning you have a specific &#8220;menu&#8221; structure, and it links to specified content in the site, regardless of where that content is.</li>
</ol>

<p>Interestingly enough, <a href="http://ektron.com.">Ektron</a> and <a href="http://ez.no/">eZ publish</a> &#8212; the two systems <a href="http://blendinteractive.com/">Blend</a> works with most often &#8212; are perfect examples of the two approaches.</p>

<p>eZ publish is usually used as an implicit system.  It has a very strong <a href="http://gadgetopia.com/post/4237">content tree</a>, so you build your site as a series of content objects stacked on each other.  Under the &#8220;home node,&#8221; you usually have a series of top-level content pages representing your top-level categories.</p>

<p>On the templating side, you simply spin through this list of nodes, and print out their titles and URLs as your main menu.  When you get into a second-level page, you query the siblings of that page to make your secondary navigation menu.</p>

<p>On the one hand, this is elegant and has benefits:</p>

<ol>
<li><p>Content automatically appears in menus.  You create a new page in a section, and that section&#8217;s menus suddenly get a new link.</p></li>
<li><p>You can enforce security in navigation.  To add something to Menu A, you have to have access to create content in Section A.</p></li>
<li><p>Menu information and settings is handled a lot like content.  Since the menu is based on the content and therefore tightly bound to it, it gets versioned &#8212; by rolling content back, you roll the menu back too.</p></li>
<li><p>It&#8217;s easy to match menus with content.  Since you don&#8217;t have an explicit &#8220;Products Menu,&#8221; you don&#8217;t have to worry about how to make sure that menu appears on all the pages in the products section.  The menu is built-in to the content.</p></li>
</ol>

<p>But, on the other hand, this approach can be frustrating.  The first problem is that you often want the representation of content in a menu to differ, meaning it often has to have a different title.  If your page is called &#8220;Selected Case Studies of our Product in Action,&#8221; you probably just want the link in the menu to say &#8220;Case Studies.&#8221;</p>

<p>This is usually accomplished by giving every object an attribute called &#8220;Menu Title&#8221; or something similar, which is the title used in the menu.  Thus, you can give your pages a full title, and a shorter title so your menus don&#8217;t get out of control.</p>

<p>The second problem is that sometimes (1) the content structure, and (2) the navigation structure, of your site are just not the same thing.  In these cases, you can jump through hoops trying to get your navigation to come out right.</p>

<p>Say you have a node which you don&#8217;t want to appear in the menu.  You need to find a way to suppress it.  In these cases, you often find yourself architecting your templates so that if the content object doesn&#8217;t have a menu title, it doesn&#8217;t appear in any menus.</p>

<p>But what do you do if you don&#8217;t want you menu to mirror the structure of the site?  Well, therein lies the rub &#8212; if you&#8217;re basing your menu on content, you need to make sure you have content for every option. In eZ, you can create a class which just has a title and a reference to another object, and use that has a &#8220;dummy node,&#8221; just so a menu link shows up, but this can get out of hand awfully quick.</p>

<p>And what if you want to link to a URL not on your site or a URL not represented by a content-managed object?  Then you have to create an &#8220;External Link&#8221; content node or something just to get that link in a menu.  In this way, the line between content and navigation starts to blur, in that you have content that&#8217;s really just navigation.</p>

<p>Finally, there&#8217;s something that may seem to be a minor point, but it&#8217;s really not: for implicit menuing to work, your content management system has to allow for arbitrary ordering of content.  Menus are order-sensitive &#8212; the order of menu options is almost always important and can rarely be derived.  If your menus are simple iterations of content, then you need to make sure that content can be ordered in some arbitrary way.</p>

<p>Ektron is the exact opposite to the eZ publish scenario &#8212; it&#8217;s an explicitly-menued system where there&#8217;s a separate menuing system, so menus are a completely separate conceptual idea from content.</p>

<p>To create a menu in Ektron, there a special interface for it.  You can create a menu, and put menu options into it, from which you can pick content from anywhere on the site.</p>

<p>There are several benefits here:</p>

<ol>
<li><p>It&#8217;s simple.  While developers tend to enjoy elegance and purity of content, users often just want a link in their admin interface that says &#8220;Menus&#8221; and just want to know how to get Link A to appear in Menu B without any concern of the relative conceptual merit of it all.</p></li>
<li><p>The navigation structure of your site can be completely separate from the content structure, which is handier than you might think.  Any menu can be comprised of links to completely random content from around the site.</p></li>
<li><p>The menu subsystem can handle very menu-specific functionality.  For instance, it can a little checkbox where you pick how you want the hyperlink to be handled &#8212; should it pop in the same window or a new window?  This is a very specific menu-type construct, and an explicit system makes it pretty simple.</p></li>
</ol>

<p>However, there are some downsides &#8212;</p>

<p>While explicit menus are simple, they&#8217;re more de-coupled from the content, so you can do some odd things with them.  Someone might be able to add some random content to the products menu, which you don&#8217;t want, or delete the menu entirely.  The menu just becomes something else you have to manage.</p>

<p>What&#8217;s worse is that very rarely are explicit menus subjected to the same controls as content.  They&#8217;re not versioned, very rarely can they go though workflow, and some systems don&#8217;t even put individual permissions on them &#8212; if you can &#8220;Manage Menus,&#8221; you can manage all the menus.  In this sense, they become second class citizens.  They can&#8217;t be managed as tightly as content, yet they&#8217;re just as important to the functioning of your site.</p>

<p>Finally, you&#8217;re often trapped by the menu system&#8217;s functionality, since they&#8217;re probably not extensible.  For instance, if you have to have scope notes with your menu links &#8212; little one sentence explanations of what&#8217;s behind the links &#8212; you may be out of luck.  Menus aren&#8217;t content, so they&#8217;re not as definable or extensible as content, which means you&#8217;re often stuck with what your system has, and nothing more.</p>

<p>So, which is better?  I&#8217;m going to take the absolute middle ground here and say that they both have their merits, and the best content management systems can handle both of them.</p>

<p>As I said, eZ publish is normally an implicitly menued system, but it can handle other methods as well.  There&#8217;s a &#8220;Toolbars&#8221; subsystem that can be used for simple explicit menus.  Additionally, you could build a menuing system out of content objects fairly easily.  eZ publish has such great content modeling tools that it wouldn&#8217;t be hard to model a &#8220;Menu&#8221; and &#8220;Menu Option&#8221; class and effectively roll your own menuing system.</p>

<p>Ektron, on the other hand, has great explicit menuing tools, but does not do implicit menuing easily, primarily because of the lack of arbitrary ordering.  You can iterate nodes in Ektron, but you&#8217;re very limited on how they can be ordered.  Ektron stores content as XML, so you can&#8217;t even order them easily by some interior &#8220;sequence&#8221; property.</p>

<p>The bottom line is that you need both options.  Different scenarios can call for different things, and in working with the two methods I&#8217;ve described here, there is always at least one time in every project where I yearn for the option I don&#8217;t have.</p>

<p><!-- FM Mobile Post Widget --></p>

<script type="text/javascript" src="http://mobileposts.federatedmedia.net/gadgetopia/588/mobile_post.js"></script>

<p><!-- /FM Mobile Post Widget --></p>
]]></description>
      <guid isPermaLink="false">6331@http://gadgetopia.com/</guid>
      <content:encoded><![CDATA[<p><!-- FM Mobile Post Top Icon --></p>

<script type="text/javascript" src="http://mobileposts.federatedmedia.net/top_icon.js"></script>

<p><!-- /FM Mobile Post Top Icon --></p>

<p>(Audio is also <a href="http://gadgetopia.com/media/audio/2008-04-07.mp3">here</a>. Sorry about the quality &#8212; I was using a different mic this time, and the input levels were all hosed up.)</p>

<p>Navigation is often a pain when it comes to content management.  Now, don&#8217;t confuse &#8220;navigation&#8221; with information architecture &#8212; that grand plan of what goes where in relation to what.</p>

<p>By &#8220;navigation,&#8221; I mean &#8220;menuing.&#8221;  It&#8217;s less theory, and more practical application of how do you get a specific group of links in a specific spot on a page, and make sure the right group of links shows up with the right content?</p>

<p>In the broadest possible sense, there are two theories to handle menuing:</p>

<ol>
<li>Implicit, meaning the menus are driven off the content structure of the site.</li>
<li>Explicit, meaning you have a specific &#8220;menu&#8221; structure, and it links to specified content in the site, regardless of where that content is.</li>
</ol>

<p>Interestingly enough, <a href="http://ektron.com.">Ektron</a> and <a href="http://ez.no/">eZ publish</a> &#8212; the two systems <a href="http://blendinteractive.com/">Blend</a> works with most often &#8212; are perfect examples of the two approaches.</p>

<p>eZ publish is usually used as an implicit system.  It has a very strong <a href="http://gadgetopia.com/post/4237">content tree</a>, so you build your site as a series of content objects stacked on each other.  Under the &#8220;home node,&#8221; you usually have a series of top-level content pages representing your top-level categories.</p>

<p>On the templating side, you simply spin through this list of nodes, and print out their titles and URLs as your main menu.  When you get into a second-level page, you query the siblings of that page to make your secondary navigation menu.</p>

<p>On the one hand, this is elegant and has benefits:</p>

<ol>
<li><p>Content automatically appears in menus.  You create a new page in a section, and that section&#8217;s menus suddenly get a new link.</p></li>
<li><p>You can enforce security in navigation.  To add something to Menu A, you have to have access to create content in Section A.</p></li>
<li><p>Menu information and settings is handled a lot like content.  Since the menu is based on the content and therefore tightly bound to it, it gets versioned &#8212; by rolling content back, you roll the menu back too.</p></li>
<li><p>It&#8217;s easy to match menus with content.  Since you don&#8217;t have an explicit &#8220;Products Menu,&#8221; you don&#8217;t have to worry about how to make sure that menu appears on all the pages in the products section.  The menu is built-in to the content.</p></li>
</ol>

<p>But, on the other hand, this approach can be frustrating.  The first problem is that you often want the representation of content in a menu to differ, meaning it often has to have a different title.  If your page is called &#8220;Selected Case Studies of our Product in Action,&#8221; you probably just want the link in the menu to say &#8220;Case Studies.&#8221;</p>

<p>This is usually accomplished by giving every object an attribute called &#8220;Menu Title&#8221; or something similar, which is the title used in the menu.  Thus, you can give your pages a full title, and a shorter title so your menus don&#8217;t get out of control.</p>

<p>The second problem is that sometimes (1) the content structure, and (2) the navigation structure, of your site are just not the same thing.  In these cases, you can jump through hoops trying to get your navigation to come out right.</p>

<p>Say you have a node which you don&#8217;t want to appear in the menu.  You need to find a way to suppress it.  In these cases, you often find yourself architecting your templates so that if the content object doesn&#8217;t have a menu title, it doesn&#8217;t appear in any menus.</p>

<p>But what do you do if you don&#8217;t want you menu to mirror the structure of the site?  Well, therein lies the rub &#8212; if you&#8217;re basing your menu on content, you need to make sure you have content for every option. In eZ, you can create a class which just has a title and a reference to another object, and use that has a &#8220;dummy node,&#8221; just so a menu link shows up, but this can get out of hand awfully quick.</p>

<p>And what if you want to link to a URL not on your site or a URL not represented by a content-managed object?  Then you have to create an &#8220;External Link&#8221; content node or something just to get that link in a menu.  In this way, the line between content and navigation starts to blur, in that you have content that&#8217;s really just navigation.</p>

<p>Finally, there&#8217;s something that may seem to be a minor point, but it&#8217;s really not: for implicit menuing to work, your content management system has to allow for arbitrary ordering of content.  Menus are order-sensitive &#8212; the order of menu options is almost always important and can rarely be derived.  If your menus are simple iterations of content, then you need to make sure that content can be ordered in some arbitrary way.</p>

<p>Ektron is the exact opposite to the eZ publish scenario &#8212; it&#8217;s an explicitly-menued system where there&#8217;s a separate menuing system, so menus are a completely separate conceptual idea from content.</p>

<p>To create a menu in Ektron, there a special interface for it.  You can create a menu, and put menu options into it, from which you can pick content from anywhere on the site.</p>

<p>There are several benefits here:</p>

<ol>
<li><p>It&#8217;s simple.  While developers tend to enjoy elegance and purity of content, users often just want a link in their admin interface that says &#8220;Menus&#8221; and just want to know how to get Link A to appear in Menu B without any concern of the relative conceptual merit of it all.</p></li>
<li><p>The navigation structure of your site can be completely separate from the content structure, which is handier than you might think.  Any menu can be comprised of links to completely random content from around the site.</p></li>
<li><p>The menu subsystem can handle very menu-specific functionality.  For instance, it can a little checkbox where you pick how you want the hyperlink to be handled &#8212; should it pop in the same window or a new window?  This is a very specific menu-type construct, and an explicit system makes it pretty simple.</p></li>
</ol>

<p>However, there are some downsides &#8212;</p>

<p>While explicit menus are simple, they&#8217;re more de-coupled from the content, so you can do some odd things with them.  Someone might be able to add some random content to the products menu, which you don&#8217;t want, or delete the menu entirely.  The menu just becomes something else you have to manage.</p>

<p>What&#8217;s worse is that very rarely are explicit menus subjected to the same controls as content.  They&#8217;re not versioned, very rarely can they go though workflow, and some systems don&#8217;t even put individual permissions on them &#8212; if you can &#8220;Manage Menus,&#8221; you can manage all the menus.  In this sense, they become second class citizens.  They can&#8217;t be managed as tightly as content, yet they&#8217;re just as important to the functioning of your site.</p>

<p>Finally, you&#8217;re often trapped by the menu system&#8217;s functionality, since they&#8217;re probably not extensible.  For instance, if you have to have scope notes with your menu links &#8212; little one sentence explanations of what&#8217;s behind the links &#8212; you may be out of luck.  Menus aren&#8217;t content, so they&#8217;re not as definable or extensible as content, which means you&#8217;re often stuck with what your system has, and nothing more.</p>

<p>So, which is better?  I&#8217;m going to take the absolute middle ground here and say that they both have their merits, and the best content management systems can handle both of them.</p>

<p>As I said, eZ publish is normally an implicitly menued system, but it can handle other methods as well.  There&#8217;s a &#8220;Toolbars&#8221; subsystem that can be used for simple explicit menus.  Additionally, you could build a menuing system out of content objects fairly easily.  eZ publish has such great content modeling tools that it wouldn&#8217;t be hard to model a &#8220;Menu&#8221; and &#8220;Menu Option&#8221; class and effectively roll your own menuing system.</p>

<p>Ektron, on the other hand, has great explicit menuing tools, but does not do implicit menuing easily, primarily because of the lack of arbitrary ordering.  You can iterate nodes in Ektron, but you&#8217;re very limited on how they can be ordered.  Ektron stores content as XML, so you can&#8217;t even order them easily by some interior &#8220;sequence&#8221; property.</p>

<p>The bottom line is that you need both options.  Different scenarios can call for different things, and in working with the two methods I&#8217;ve described here, there is always at least one time in every project where I yearn for the option I don&#8217;t have.</p>

<p><!-- FM Mobile Post Widget --></p>

<script type="text/javascript" src="http://mobileposts.federatedmedia.net/gadgetopia/588/mobile_post.js"></script>

<p><!-- /FM Mobile Post Widget --></p>
]]></content:encoded>
      <dc:subject>Content Management</dc:subject>
      <dc:date>2008-04-05T13:17:37-06:00</dc:date>
    </item>

    <item>
      <title>A Case for Movable Type as your Intranet</title>
      <link>http://gadgetopia.com/post/6324</link>
      <description><![CDATA[<p><!-- FM Mobile Post Top Icon --></p>

<script type="text/javascript" src="http://mobileposts.federatedmedia.net/top_icon.js"></script>

<p><!-- /FM Mobile Post Top Icon --></p>

<p>Here&#8217;s a fact: intranets don&#8217;t have to be crazy-complicated.  Intranets are fundamentally about sharing simple information, which is not as hard as some people make it out to be.  As simple as this is, most organizations either have no intranet, or a smattering of HTML pages someone threw together with Front Page that no one looks at.</p>

<p>In working with companies on their intranets, I&#8217;m confronted by the fact that there are fundamentally two types (genres?) of information:</p>

<p>Permanent and temporal.</p>

<p>Reference and announcement.</p>

<p>Eternal and time-sensitive.</p>

<p>Groomed and discarded.</p>

<p>Wiki-ish and blog-ish.</p>

<p>Pages and posts.</p>

<p>Pages and posts &#8212; that brings us back to a couple of posts about the concepts of posts vs. pages:</p>

<ul>
<li><a href="http://www.gadgetopia.com/post/1099">Thoughts on Posts and Articles</a></li>
<li><a href="http://www.gadgetopia.com/post/4361">Ruminations on Posts vs. Pages</a></li>
<li><a href="http://www.gadgetopia.com/post/2964">More Great Wikipedia Coverage</a></li>
</ul>

<p>I&#8217;m not going to re-hash those arguments here, but I recommend you go read them, as they really touch on an important point: some pages on an intranet are eternal, and some are temporal.</p>

<ul>
<li>An announcement of an upcoming potluck &#8212; temporal</li>
<li>The mission statement &#8212; eternal</li>
<li>Information about a news article involving the company &#8212; temporal</li>
<li>A procedure explaining how to apply for a new ID card &#8212; eternal</li>
</ul>

<p>Now, this is a bold statement, but think that 95% of information on an intranet would fit into these two groups.  Something is either an announcement, or it&#8217;s a reference page of some kind.  Sure, there are other types &#8212; a discussion space type, for instance &#8212; but a lot of companies could fit almost everything into these two groups.</p>

<p>The most common phrase I hear about companies and their intranets is: &#8220;Our intranet is a mess.&#8221;  The next most common phrase: &#8220;We just need a list of announcements somewhere&#8230;&#8221;  So, they need a blog, essentially.  And, invariably, they need a smattering of static pages as well.</p>

<p>Going back to that post mentioned above about <a href="http://www.gadgetopia.com/post/2964">the Wikipedia coverage of Hurricane Ivan</a>:</p>

<blockquote>
  <p>With Wikipedia, you’re not seeing a series of posted items. You’re seeing a single body of information, continually updated and groomed. Thus, the basic information stays right where it’s easy to see. Wikis are more “speak to me like I know nothing” information, rather than “tell me the very latest nuance” information.</p>
  
  <p>The ideal is really a combination of both — keep the basic (wiki-ish) information right there, and have a sidebar of the latest (blog-ish) information as it comes in.</p>
</blockquote>

<p>So, we need a platform that allows groups to have blog-ish stuff, and wiki-ish stuff.  What fits?  Three platforms jump to mind:</p>

<ul>
<li><a href="http://wordpress.org/">Wordpress</a></li>
<li><a href="http://google.com/sites/">Google Sites</a></li>
<li><a href="http://movabletype.org/">Movable Type</a></li>
</ul>

<p>Yes, I know there are many more, but these are at the lowest end of the scale in terms of complexity and the highest end of the scale in terms of applicability &#8212; remember, we&#8217;re trying to be simple here.</p>

<p>Wordpress is great, and crazy hackable, but it suffers from what I&#8217;ve always considered a huge limitation: lack of the ability to have more than one blog.  This is something that Movable Type has done from the start, and I&#8217;ve always taken it for granted.</p>

<p>One of the most common requirements for a company intranet is that different organizational units have their own &#8220;spaces.&#8221;  Every department needs a sub-site all their own.  It strikes me that this would be hard with Wordpress, although with all the custom plugins and development, perhaps there&#8217;s something I&#8217;m missing.</p>

<p>Another problem with Wordpress is that it&#8217;s bound to PHP.  More on this below.</p>

<p>Google Sites is really fantastic.  <a href="http://blendinteractive.com/">Blend</a> uses <a href="http://www.google.com/a/">Google Apps for Domains</a>, and so we get Google Sites with it.  I tried it out and was somewhat blown away by what appears to be an arrow shot directly at Sharepoint.  Additionally, it&#8217;s built with the concept of multiple sub-sites in mind &#8212; they even provide tagging tools to organize sites.  Your company could have hundreds and hundreds of Google Sites, and you could search for any sites tagged with &#8220;Human Resources,&#8221; for instance.</p>

<p>But, we all know Google Sites has perhaps a fatal flaw: you don&#8217;t own it.  Your stuff is housed on Google&#8217;s servers, and this is just out of the question for a lot of companies.</p>

<p>Which brings us to Movable Type, which I think is the real winner here.  First, it handles the posts/pages thing well, you can set up multiple blogs and allow individual permissions to each, and then there&#8217;s the biggest benefit of all: MT is a data push system &#8212; basically a big code generator.  It&#8217;s written in Perl, but will effectively publish to anything.</p>

<p>A lot of companies are bound to .Net.  It&#8217;s not their fault, but they&#8217;re Windows shops and all their stuff is in .Net.  It&#8217;s in this environment where I think Movable Type would really shine because it can generate ASP.Net Web forms.</p>

<p><a href="http://gadgetopia.com/">Gadgetopia</a> uses MT to generate PHP files &#8212; why couldn&#8217;t it generate Web forms?  Remember that it would just need to generate the Web form &#8212; all of the pages it generated could extend from the same code-behind.</p>

<p>This way, everyone consuming your intranet stays solidly in the world of .Net.  All your hard-fought Windows user controls could still be in the pages (using <a href="http://www.dansanderson.com/builderoo/">Builderoo</a> or some other tools, you could even get user controls embedded in posts), and you could use all of the other .Net integration goodness that the rest of your company runs on.</p>

<p>And this brings me back to my original point: there is a huge number of organizations out there for which a copy of Movable Type and a well-designed template would be an <em>utterly massive</em> improvement on their ability to share information.</p>

<p>I have built two intranets now using a mid-range CMS &#8212; it cost both companies about $40,000 in software alone.  Looking back, I&#8217;m struck that they&#8217;re not doing much more or less than they could do with a copy of Movable Type.</p>

<p>This may sound simplistic, but take your organization and a single installation of Movable Type.  Give every department their own blog, in which they can manage posts, pages, and media files (have you seen MT 4 yet?  It does supporting files quite well).</p>

<p>Suddenly, every department has a simple announcement list (with RSS, even), and the ability to create whatever reference pages they need.  This would solve a huge number of issues for the majority of companies struggling with their intranets.</p>

<p>Sure, there are higher-level functions that MT wouldn&#8217;t do well &#8212; things like a company directory, or a repository of policies and procedures.  But in my experience, this stuff is often done in the main CMS anyway.  The company directory is probably better served out of Active Directory, and policies and procedures are becoming more specialized with DITA and Docbook and other methodologies.</p>

<p>And of course, we could sit here all day and make up scenarios that would embarrass our humble little blogging platform, but that still doesn&#8217;t help the organization I consulted with two weeks ago.  Even after multiple tries, their intranet is such a mess that they&#8217;ve given up and just they now post announcements to the bulletin board in the hallway and hope people see them.</p>

<p>Movable Type certainly wouldn&#8217;t solve all their problems, but it would solve most of them, and involve less pushpins.</p>

<p><!-- FM Mobile Post Widget --></p>

<script type="text/javascript" src="http://mobileposts.federatedmedia.net/gadgetopia/524/mobile_post.js"></script>

<p><!-- /FM Mobile Post Widget --></p>
]]></description>
      <guid isPermaLink="false">6324@http://gadgetopia.com/</guid>
      <content:encoded><![CDATA[<p><!-- FM Mobile Post Top Icon --></p>

<script type="text/javascript" src="http://mobileposts.federatedmedia.net/top_icon.js"></script>

<p><!-- /FM Mobile Post Top Icon --></p>

<p>Here&#8217;s a fact: intranets don&#8217;t have to be crazy-complicated.  Intranets are fundamentally about sharing simple information, which is not as hard as some people make it out to be.  As simple as this is, most organizations either have no intranet, or a smattering of HTML pages someone threw together with Front Page that no one looks at.</p>

<p>In working with companies on their intranets, I&#8217;m confronted by the fact that there are fundamentally two types (genres?) of information:</p>

<p>Permanent and temporal.</p>

<p>Reference and announcement.</p>

<p>Eternal and time-sensitive.</p>

<p>Groomed and discarded.</p>

<p>Wiki-ish and blog-ish.</p>

<p>Pages and posts.</p>

<p>Pages and posts &#8212; that brings us back to a couple of posts about the concepts of posts vs. pages:</p>

<ul>
<li><a href="http://www.gadgetopia.com/post/1099">Thoughts on Posts and Articles</a></li>
<li><a href="http://www.gadgetopia.com/post/4361">Ruminations on Posts vs. Pages</a></li>
<li><a href="http://www.gadgetopia.com/post/2964">More Great Wikipedia Coverage</a></li>
</ul>

<p>I&#8217;m not going to re-hash those arguments here, but I recommend you go read them, as they really touch on an important point: some pages on an intranet are eternal, and some are temporal.</p>

<ul>
<li>An announcement of an upcoming potluck &#8212; temporal</li>
<li>The mission statement &#8212; eternal</li>
<li>Information about a news article involving the company &#8212; temporal</li>
<li>A procedure explaining how to apply for a new ID card &#8212; eternal</li>
</ul>

<p>Now, this is a bold statement, but think that 95% of information on an intranet would fit into these two groups.  Something is either an announcement, or it&#8217;s a reference page of some kind.  Sure, there are other types &#8212; a discussion space type, for instance &#8212; but a lot of companies could fit almost everything into these two groups.</p>

<p>The most common phrase I hear about companies and their intranets is: &#8220;Our intranet is a mess.&#8221;  The next most common phrase: &#8220;We just need a list of announcements somewhere&#8230;&#8221;  So, they need a blog, essentially.  And, invariably, they need a smattering of static pages as well.</p>

<p>Going back to that post mentioned above about <a href="http://www.gadgetopia.com/post/2964">the Wikipedia coverage of Hurricane Ivan</a>:</p>

<blockquote>
  <p>With Wikipedia, you’re not seeing a series of posted items. You’re seeing a single body of information, continually updated and groomed. Thus, the basic information stays right where it’s easy to see. Wikis are more “speak to me like I know nothing” information, rather than “tell me the very latest nuance” information.</p>
  
  <p>The ideal is really a combination of both — keep the basic (wiki-ish) information right there, and have a sidebar of the latest (blog-ish) information as it comes in.</p>
</blockquote>

<p>So, we need a platform that allows groups to have blog-ish stuff, and wiki-ish stuff.  What fits?  Three platforms jump to mind:</p>

<ul>
<li><a href="http://wordpress.org/">Wordpress</a></li>
<li><a href="http://google.com/sites/">Google Sites</a></li>
<li><a href="http://movabletype.org/">Movable Type</a></li>
</ul>

<p>Yes, I know there are many more, but these are at the lowest end of the scale in terms of complexity and the highest end of the scale in terms of applicability &#8212; remember, we&#8217;re trying to be simple here.</p>

<p>Wordpress is great, and crazy hackable, but it suffers from what I&#8217;ve always considered a huge limitation: lack of the ability to have more than one blog.  This is something that Movable Type has done from the start, and I&#8217;ve always taken it for granted.</p>

<p>One of the most common requirements for a company intranet is that different organizational units have their own &#8220;spaces.&#8221;  Every department needs a sub-site all their own.  It strikes me that this would be hard with Wordpress, although with all the custom plugins and development, perhaps there&#8217;s something I&#8217;m missing.</p>

<p>Another problem with Wordpress is that it&#8217;s bound to PHP.  More on this below.</p>

<p>Google Sites is really fantastic.  <a href="http://blendinteractive.com/">Blend</a> uses <a href="http://www.google.com/a/">Google Apps for Domains</a>, and so we get Google Sites with it.  I tried it out and was somewhat blown away by what appears to be an arrow shot directly at Sharepoint.  Additionally, it&#8217;s built with the concept of multiple sub-sites in mind &#8212; they even provide tagging tools to organize sites.  Your company could have hundreds and hundreds of Google Sites, and you could search for any sites tagged with &#8220;Human Resources,&#8221; for instance.</p>

<p>But, we all know Google Sites has perhaps a fatal flaw: you don&#8217;t own it.  Your stuff is housed on Google&#8217;s servers, and this is just out of the question for a lot of companies.</p>

<p>Which brings us to Movable Type, which I think is the real winner here.  First, it handles the posts/pages thing well, you can set up multiple blogs and allow individual permissions to each, and then there&#8217;s the biggest benefit of all: MT is a data push system &#8212; basically a big code generator.  It&#8217;s written in Perl, but will effectively publish to anything.</p>

<p>A lot of companies are bound to .Net.  It&#8217;s not their fault, but they&#8217;re Windows shops and all their stuff is in .Net.  It&#8217;s in this environment where I think Movable Type would really shine because it can generate ASP.Net Web forms.</p>

<p><a href="http://gadgetopia.com/">Gadgetopia</a> uses MT to generate PHP files &#8212; why couldn&#8217;t it generate Web forms?  Remember that it would just need to generate the Web form &#8212; all of the pages it generated could extend from the same code-behind.</p>

<p>This way, everyone consuming your intranet stays solidly in the world of .Net.  All your hard-fought Windows user controls could still be in the pages (using <a href="http://www.dansanderson.com/builderoo/">Builderoo</a> or some other tools, you could even get user controls embedded in posts), and you could use all of the other .Net integration goodness that the rest of your company runs on.</p>

<p>And this brings me back to my original point: there is a huge number of organizations out there for which a copy of Movable Type and a well-designed template would be an <em>utterly massive</em> improvement on their ability to share information.</p>

<p>I have built two intranets now using a mid-range CMS &#8212; it cost both companies about $40,000 in software alone.  Looking back, I&#8217;m struck that they&#8217;re not doing much more or less than they could do with a copy of Movable Type.</p>

<p>This may sound simplistic, but take your organization and a single installation of Movable Type.  Give every department their own blog, in which they can manage posts, pages, and media files (have you seen MT 4 yet?  It does supporting files quite well).</p>

<p>Suddenly, every department has a simple announcement list (with RSS, even), and the ability to create whatever reference pages they need.  This would solve a huge number of issues for the majority of companies struggling with their intranets.</p>

<p>Sure, there are higher-level functions that MT wouldn&#8217;t do well &#8212; things like a company directory, or a repository of policies and procedures.  But in my experience, this stuff is often done in the main CMS anyway.  The company directory is probably better served out of Active Directory, and policies and procedures are becoming more specialized with DITA and Docbook and other methodologies.</p>

<p>And of course, we could sit here all day and make up scenarios that would embarrass our humble little blogging platform, but that still doesn&#8217;t help the organization I consulted with two weeks ago.  Even after multiple tries, their intranet is such a mess that they&#8217;ve given up and just they now post announcements to the bulletin board in the hallway and hope people see them.</p>

<p>Movable Type certainly wouldn&#8217;t solve all their problems, but it would solve most of them, and involve less pushpins.</p>

<p><!-- FM Mobile Post Widget --></p>

<script type="text/javascript" src="http://mobileposts.federatedmedia.net/gadgetopia/524/mobile_post.js"></script>

<p><!-- /FM Mobile Post Widget --></p>
]]></content:encoded>
      <dc:subject>Content Management</dc:subject>
      <dc:date>2008-03-30T13:19:22-06:00</dc:date>
    </item>

    <item>
      <title>Composite Pages and Embeddable Content</title>
      <link>http://gadgetopia.com/post/6322</link>
      <description><![CDATA[<p><!-- FM Mobile Post Top Icon --></p>

<script type="text/javascript" src="http://mobileposts.federatedmedia.net/top_icon.js"></script>

<p><!-- /FM Mobile Post Top Icon --></p>

<p>(Note: this post exists in both written and audio form.  They&#8217;re more or less the same thing, so take your pick.  I elaborate a bit more in the audio, since I have a tendency to ramble, but I used the written post as an outline for the audio post, so the general gist is the same.  If you want the MP3, it&#8217;s <a href="http://gadgetopia.com/media/audio/2007-03-27.mp3">here</a>)</p>

<p>In Web content management, you can identify two types of pages fairly easily:</p>

<ol>
<li><em>Free-form.</em> <br />
A title and a big WYSIWYG area.</li>
<li><em>Structured.</em> <br />
More database-like &#8212; data is structured into components and assembled into a page.</li>
</ol>

<p>(We discussed the difference in detail in a post called &#8220;<a href="http://gadgetopia.com/post/6202">To Structure or Not to Structure</a>.&#8221;)</p>

<p>However, I&#8217;ve often found that there&#8217;s something in the middle.  You need a big WYSIWYG area, but you need structured areas within it.  This can get tricky.</p>

<p>This is easily explained with an example, which will probably ring true for a lot of content management developers &#8212;</p>

<p>For your company intranet, you have a &#8220;Page&#8221; template.  All is good.</p>

<p>But then your users suddenly want to embed calendars from the Exchange server into their pages.  Okay, you say, and you build a &#8220;Calendar Page&#8221; data type and template.  The data type includes a new &#8220;Calendar URL&#8221; field, and the template includes the code to render the calendar.</p>

<p>You now have two templates.</p>

<p>Later, the users come back, and they want a photo gallery.  So, you create a &#8220;Photo Gallery&#8221; datatype and template, which allows them to upload photos, and the template renders the gallery.</p>

<p>You now have three templates.</p>

<p>Later still, the users come back and say, &#8220;This is great, but we want this page to have a calendar AND a photo gallery in it.  So, we want a bunch of text, then a calendar, then a bunch more text, then a photo gallery.  And maybe another calendar after that&#8230;&#8221;</p>

<p>What now, Einstein?</p>

<p>This is where you start seeing some really bizarre things done to try and jump through these hoops, and jump through the next one, and the next one, etc.  Before long, everything becomes totally unmanageable.  The users are irritated because they think the system is inflexible, and the developer is irritated because he thinks the user are being unreasonable, etc.</p>

<p>However, all is not lost.  Over the years, I&#8217;ve seen and implemented two good ways to handle situations like this.</p>

<p><strong>1. Composite Pages</strong></p>

<p>A composite page is a single page, made out of pieces.  Your users can add a &#8220;Page&#8221; to the system, then add &#8220;Sections&#8221; to the page.  They can pick from different types of sections, like &#8220;text with header,&#8221; &#8220;text with image,&#8221; &#8220;centered image,&#8221; etc.</p>

<p>The idea is that you stack these sections on top of each other, order them, and when the page is rendered, its sections are rendered in sequence from top to bottom.</p>

<p>The benefit here is that the page is broken down into sub-objects, and each of these can contain their own data structures and functionality.  You could have page sections for &#8220;Calendar&#8221; and &#8220;Photo Gallery.&#8221;  Intersperse those with a couple &#8220;Generic Text&#8221; blocks, and you have a much more flexible page structure.</p>

<p>There are a few disadvantages to this model &#8212;</p>

<p>First and foremost, editing can be a pain.  Often users just want to edit their pages without having to juggle more than one content object.  Additionally, the addition of even one structure element into the center of the text breaks the page up into at least three elements.</p>

<p>Consider the example of a single-section page of text, into which a user wants to inject a calendar.  How do they do this?</p>

<p>Users will have to create the calendar section, then create another text section to go under it.  Then they have to transfer some text from the top section into the bottom section, so the calendar appears to be in the middle of of an otherwise unbroken flow of text.  To move the calendar &#8220;up&#8221; in the page means transferring text from the bottom text section to the top text section.</p>

<p>So, the editing model can be complicated.  I&#8217;ll admit that I haven&#8217;t seen a composite page interface that has leveraged all the Ajax-y goodness available these days.  Joe and I have often theorized that it could be done much today than in years past, which could probably mitigate the editing pain that I&#8217;ve experienced.</p>

<p>Second, breaking what was a single object into multiple objects presents some other issues.  What do you do about some of the higher level functions: versioning, workflow, and permissions?  When you save a composite page, are you versioning the sections independently or as a group (if as a group, do you save new versions of sections that haven&#8217;t changed)?  Can you send individual sections through workflow?  Can you set specific permissions on sections?  Etc.</p>

<p>Finally, the composite page model is optimized for pages that have &#8220;horizontal bands&#8221; of content.  What happens when people start to float images to the right and left, and elements start to &#8220;hang over&#8221; other elements, either inadvertently, or on purpose?  The formatting issues can get complicated here, and you might end up with users irritated that they can&#8217;t do something which seems simple, but ends up being complicated or impossible.</p>

<p>(I&#8217;ve seen this done once where the composition model was extended to columns as well, so a &#8220;content row&#8221; could be split into multiple &#8220;content columns&#8221; which each contained different objects.  However, this gets even more complex since, on the Web, horizontal space is usually much more rigid than vertical space.  So what happens if someone divides a row into 20 slivers and then tries to cram a photo gallery into one of them?  The result is that all the possible objects would have to be designed as width-neutral, which is far easier said than done.)</p>

<p>I haven&#8217;t seen a commercial system that uses a composite page model.  I&#8217;ve seen it done several times in one-off systems built by others, and I tried it once years ago.  I&#8217;d love to see a a really high-end implementation of it.</p>

<p><strong>2. Embedded Content</strong></p>

<p>This model is more flexible than a composite page model.  It considers each page as a big WYSIWYG area, into which you can insert and format text.  However, in addition, you can position references (&#8220;markers&#8221;) to more complicated content, which is then &#8220;expanded&#8221; and inserted into its parent content when the page is rendered.</p>

<p>So, to continue our embedded calendar example from above, your users would have a big field of text, and somewhere in it would be a marker of some kind.  When rendered on the public side of the site, this marker would be &#8220;caught&#8221; and expanded into a full-blown calendar.</p>

<p>What is the marker?  It needs to be a text string that (1) allows the passing of variables, and (2) is easily parsed during rendering.</p>

<p>Systems using a good XML editor could allow users to put a custom XML tag.  This is handy because you can validate it, and it&#8217;s quite easy to pass variables in with it, XML being a data serialization engine and all.  So, your calendar marker could look like this:</p>

<pre><code>&lt;Calendar Url="http://somewhere"/&gt;
</code></pre>

<p>Templating engines like PHP&#8217;s <a href="http://smarty.php.net/">Smarty</a> do this well too.  In Smarty:</p>

<pre><code>{Calendar Url="http://somehwere"}
</code></pre>

<p>There are a number of benefits to the embedded content model:</p>

<p>First, the user model is solid, because users can manipulate the page as a single block of content, which usually makes more sense to them than stacking independent objects on top of each other.</p>

<p>Second, the position the calendar in the page is simply a matter of where the marker is.  Move it up or down within the same block of text.</p>

<p>Finally, the position of the embedded content can be affected by what&#8217;s around it.  If users want to align the calendar to the left, simply enclose the marker in a floated DIV (provided there are no width issues).</p>

<p>And, there are drawbacks, which are subtle, but can be significant:</p>

<p>First, there are challenges to insert source code-ish markers in WYSIWYG environments.  If you use XML, will it show in WYSIWYG mode?  Will editors remember where it is?  How will the editor handle and display it?  Some editors handle this better than others.  For example, if you drop a custom XML tag in the source, eWebEditPro from <a href="http://ektron.com/">Ektron</a> can replace the custom tag with an icon in WYSIWYG mode.</p>

<p>Second, users have to know the structure of the markers and how to embed them.  Do you trust them to form an XML tag?  In a perfect world, you can pop a separate window with a form that creates the tag and embeds it, then replaces it with an icon.  Sadly, not all editors are going to support this.</p>

<p>Third, what happens when data required by the embedded content becomes invalid?  What happens when the calendar in the Exchange server is deleted?  Do you somehow identify content that embeds the calendar and&#8230;do what?  Alert someone?  Remove the marker?  Do nothing and just throw an error on rendering?</p>

<p>In general, embedded content suffers from being less identifiable to your system.  With a composite page model, each page section is likely stored as separate database record.  But embedded content is nothing but a small text fragment inside another record, which is not easy to query (unless you&#8217;re using XML and your database supports XML indexing, then you&#8217;re in great shape).</p>

<p>You&#8217;ll quickly get to a point where you need to identify and index all the embedded content when you save a record.  Keep an index in a separate database table which records what embedded content with what variables is contained inside what content.  This makes it easy to find all the content that references Calendar X.</p>

<p>Fourth, what about permissions?  How do you ensure users are only embedding content that they&#8217;re allowed to embed?  It&#8217;s unlikely you can catch this real-time in the editor, so you&#8217;d have to try and catch it on save, which is less-than-ideal from a usability perspective.</p>

<p>Finally, you&#8217;re giving a lot of power to the users here.  If they load their page up with 159 calendars, what happens to server when it renders?  You&#8217;re essentially allowing the users to force your server to execute extra code based on what they put in their content.  Whether or not this is a problem is up to you.</p>

<p>I&#8217;ve seen this model in a lot of systems:</p>

<ol>
<li><a href="http://ez.no/">eZ publish</a> has an embeddable content model, which is built-in and fairly sophisticated.</li>
<li>I&#8217;ve built this with Ektron since eWebEditPro will let users embed custom tags and has fairly good support for editing them.  When rendering, my system parses the XML for tag patterns, then replaces them with the output of corresponding .Net user controls.</li>
<li>Years ago, we wrote about <a href="http://gadgetopia.com/post/4671">a plugin for Movable Type</a> called <a href="http://www.dansanderson.com/builderoo/">Builderoo</a> which enable the definition of macros to be inserted in posts.</li>
<li>A little-known open-source system called <a href="http://www.etomite.org/">Etomite</a> (which I really enjoyed playing with) allows you to define &#8220;snippets&#8221; which map to executable PHP code.</li>
<li>I haven&#8217;t looked at this in ages, but <a href="http://www.joomla.org/">Joomla</a> used to have things called &#8220;mambots&#8221; (a carryover from when it was named &#8220;Mambo Server&#8221;) which allow you to embed functionality in pages.</li>
</ol>

<p>In the end, the embedded content model is tougher to implement, but, done correctly, is considerably more flexible and powerful.</p>

<p><!-- FM Mobile Post Widget --></p>

<script type="text/javascript" src="http://mobileposts.federatedmedia.net/gadgetopia/512/mobile_post.js"></script>

<p><!-- /FM Mobile Post Widget --></p>
]]></description>
      <guid isPermaLink="false">6322@http://gadgetopia.com/</guid>
      <content:encoded><![CDATA[<p><!-- FM Mobile Post Top Icon --></p>

<script type="text/javascript" src="http://mobileposts.federatedmedia.net/top_icon.js"></script>

<p><!-- /FM Mobile Post Top Icon --></p>

<p>(Note: this post exists in both written and audio form.  They&#8217;re more or less the same thing, so take your pick.  I elaborate a bit more in the audio, since I have a tendency to ramble, but I used the written post as an outline for the audio post, so the general gist is the same.  If you want the MP3, it&#8217;s <a href="http://gadgetopia.com/media/audio/2007-03-27.mp3">here</a>)</p>

<p>In Web content management, you can identify two types of pages fairly easily:</p>

<ol>
<li><em>Free-form.</em> <br />
A title and a big WYSIWYG area.</li>
<li><em>Structured.</em> <br />
More database-like &#8212; data is structured into components and assembled into a page.</li>
</ol>

<p>(We discussed the difference in detail in a post called &#8220;<a href="http://gadgetopia.com/post/6202">To Structure or Not to Structure</a>.&#8221;)</p>

<p>However, I&#8217;ve often found that there&#8217;s something in the middle.  You need a big WYSIWYG area, but you need structured areas within it.  This can get tricky.</p>

<p>This is easily explained with an example, which will probably ring true for a lot of content management developers &#8212;</p>

<p>For your company intranet, you have a &#8220;Page&#8221; template.  All is good.</p>

<p>But then your users suddenly want to embed calendars from the Exchange server into their pages.  Okay, you say, and you build a &#8220;Calendar Page&#8221; data type and template.  The data type includes a new &#8220;Calendar URL&#8221; field, and the template includes the code to render the calendar.</p>

<p>You now have two templates.</p>

<p>Later, the users come back, and they want a photo gallery.  So, you create a &#8220;Photo Gallery&#8221; datatype and template, which allows them to upload photos, and the template renders the gallery.</p>

<p>You now have three templates.</p>

<p>Later still, the users come back and say, &#8220;This is great, but we want this page to have a calendar AND a photo gallery in it.  So, we want a bunch of text, then a calendar, then a bunch more text, then a photo gallery.  And maybe another calendar after that&#8230;&#8221;</p>

<p>What now, Einstein?</p>

<p>This is where you start seeing some really bizarre things done to try and jump through these hoops, and jump through the next one, and the next one, etc.  Before long, everything becomes totally unmanageable.  The users are irritated because they think the system is inflexible, and the developer is irritated because he thinks the user are being unreasonable, etc.</p>

<p>However, all is not lost.  Over the years, I&#8217;ve seen and implemented two good ways to handle situations like this.</p>

<p><strong>1. Composite Pages</strong></p>

<p>A composite page is a single page, made out of pieces.  Your users can add a &#8220;Page&#8221; to the system, then add &#8220;Sections&#8221; to the page.  They can pick from different types of sections, like &#8220;text with header,&#8221; &#8220;text with image,&#8221; &#8220;centered image,&#8221; etc.</p>

<p>The idea is that you stack these sections on top of each other, order them, and when the page is rendered, its sections are rendered in sequence from top to bottom.</p>

<p>The benefit here is that the page is broken down into sub-objects, and each of these can contain their own data structures and functionality.  You could have page sections for &#8220;Calendar&#8221; and &#8220;Photo Gallery.&#8221;  Intersperse those with a couple &#8220;Generic Text&#8221; blocks, and you have a much more flexible page structure.</p>

<p>There are a few disadvantages to this model &#8212;</p>

<p>First and foremost, editing can be a pain.  Often users just want to edit their pages without having to juggle more than one content object.  Additionally, the addition of even one structure element into the center of the text breaks the page up into at least three elements.</p>

<p>Consider the example of a single-section page of text, into which a user wants to inject a calendar.  How do they do this?</p>

<p>Users will have to create the calendar section, then create another text section to go under it.  Then they have to transfer some text from the top section into the bottom section, so the calendar appears to be in the middle of of an otherwise unbroken flow of text.  To move the calendar &#8220;up&#8221; in the page means transferring text from the bottom text section to the top text section.</p>

<p>So, the editing model can be complicated.  I&#8217;ll admit that I haven&#8217;t seen a composite page interface that has leveraged all the Ajax-y goodness available these days.  Joe and I have often theorized that it could be done much today than in years past, which could probably mitigate the editing pain that I&#8217;ve experienced.</p>

<p>Second, breaking what was a single object into multiple objects presents some other issues.  What do you do about some of the higher level functions: versioning, workflow, and permissions?  When you save a composite page, are you versioning the sections independently or as a group (if as a group, do you save new versions of sections that haven&#8217;t changed)?  Can you send individual sections through workflow?  Can you set specific permissions on sections?  Etc.</p>

<p>Finally, the composite page model is optimized for pages that have &#8220;horizontal bands&#8221; of content.  What happens when people start to float images to the right and left, and elements start to &#8220;hang over&#8221; other elements, either inadvertently, or on purpose?  The formatting issues can get complicated here, and you might end up with users irritated that they can&#8217;t do something which seems simple, but ends up being complicated or impossible.</p>

<p>(I&#8217;ve seen this done once where the composition model was extended to columns as well, so a &#8220;content row&#8221; could be split into multiple &#8220;content columns&#8221; which each contained different objects.  However, this gets even more complex since, on the Web, horizontal space is usually much more rigid than vertical space.  So what happens if someone divides a row into 20 slivers and then tries to cram a photo gallery into one of them?  The result is that all the possible objects would have to be designed as width-neutral, which is far easier said than done.)</p>

<p>I haven&#8217;t seen a commercial system that uses a composite page model.  I&#8217;ve seen it done several times in one-off systems built by others, and I tried it once years ago.  I&#8217;d love to see a a really high-end implementation of it.</p>

<p><strong>2. Embedded Content</strong></p>

<p>This model is more flexible than a composite page model.  It considers each page as a big WYSIWYG area, into which you can insert and format text.  However, in addition, you can position references (&#8220;markers&#8221;) to more complicated content, which is then &#8220;expanded&#8221; and inserted into its parent content when the page is rendered.</p>

<p>So, to continue our embedded calendar example from above, your users would have a big field of text, and somewhere in it would be a marker of some kind.  When rendered on the public side of the site, this marker would be &#8220;caught&#8221; and expanded into a full-blown calendar.</p>

<p>What is the marker?  It needs to be a text string that (1) allows the passing of variables, and (2) is easily parsed during rendering.</p>

<p>Systems using a good XML editor could allow users to put a custom XML tag.  This is handy because you can validate it, and it&#8217;s quite easy to pass variables in with it, XML being a data serialization engine and all.  So, your calendar marker could look like this:</p>

<pre><code>&lt;Calendar Url="http://somewhere"/&gt;
</code></pre>

<p>Templating engines like PHP&#8217;s <a href="http://smarty.php.net/">Smarty</a> do this well too.  In Smarty:</p>

<pre><code>{Calendar Url="http://somehwere"}
</code></pre>

<p>There are a number of benefits to the embedded content model:</p>

<p>First, the user model is solid, because users can manipulate the page as a single block of content, which usually makes more sense to them than stacking independent objects on top of each other.</p>

<p>Second, the position the calendar in the page is simply a matter of where the marker is.  Move it up or down within the same block of text.</p>

<p>Finally, the position of the embedded content can be affected by what&#8217;s around it.  If users want to align the calendar to the left, simply enclose the marker in a floated DIV (provided there are no width issues).</p>

<p>And, there are drawbacks, which are subtle, but can be significant:</p>

<p>First, there are challenges to insert source code-ish markers in WYSIWYG environments.  If you use XML, will it show in WYSIWYG mode?  Will editors remember where it is?  How will the editor handle and display it?  Some editors handle this better than others.  For example, if you drop a custom XML tag in the source, eWebEditPro from <a href="http://ektron.com/">Ektron</a> can replace the custom tag with an icon in WYSIWYG mode.</p>

<p>Second, users have to know the structure of the markers and how to embed them.  Do you trust them to form an XML tag?  In a perfect world, you can pop a separate window with a form that creates the tag and embeds it, then replaces it with an icon.  Sadly, not all editors are going to support this.</p>

<p>Third, what happens when data required by the embedded content becomes invalid?  What happens when the calendar in the Exchange server is deleted?  Do you somehow identify content that embeds the calendar and&#8230;do what?  Alert someone?  Remove the marker?  Do nothing and just throw an error on rendering?</p>

<p>In general, embedded content suffers from being less identifiable to your system.  With a composite page model, each page section is likely stored as separate database record.  But embedded content is nothing but a small text fragment inside another record, which is not easy to query (unless you&#8217;re using XML and your database supports XML indexing, then you&#8217;re in great shape).</p>

<p>You&#8217;ll quickly get to a point where you need to identify and index all the embedded content when you save a record.  Keep an index in a separate database table which records what embedded content with what variables is contained inside what content.  This makes it easy to find all the content that references Calendar X.</p>

<p>Fourth, what about permissions?  How do you ensure users are only embedding content that they&#8217;re allowed to embed?  It&#8217;s unlikely you can catch this real-time in the editor, so you&#8217;d have to try and catch it on save, which is less-than-ideal from a usability perspective.</p>

<p>Finally, you&#8217;re giving a lot of power to the users here.  If they load their page up with 159 calendars, what happens to server when it renders?  You&#8217;re essentially allowing the users to force your server to execute extra code based on what they put in their content.  Whether or not this is a problem is up to you.</p>

<p>I&#8217;ve seen this model in a lot of systems:</p>

<ol>
<li><a href="http://ez.no/">eZ publish</a> has an embeddable content model, which is built-in and fairly sophisticated.</li>
<li>I&#8217;ve built this with Ektron since eWebEditPro will let users embed custom tags and has fairly good support for editing them.  When rendering, my system parses the XML for tag patterns, then replaces them with the output of corresponding .Net user controls.</li>
<li>Years ago, we wrote about <a href="http://gadgetopia.com/post/4671">a plugin for Movable Type</a> called <a href="http://www.dansanderson.com/builderoo/">Builderoo</a> which enable the definition of macros to be inserted in posts.</li>
<li>A little-known open-source system called <a href="http://www.etomite.org/">Etomite</a> (which I really enjoyed playing with) allows you to define &#8220;snippets&#8221; which map to executable PHP code.</li>
<li>I haven&#8217;t looked at this in ages, but <a href="http://www.joomla.org/">Joomla</a> used to have things called &#8220;mambots&#8221; (a carryover from when it was named &#8220;Mambo Server&#8221;) which allow you to embed functionality in pages.</li>
</ol>

<p>In the end, the embedded content model is tougher to implement, but, done correctly, is considerably more flexible and powerful.</p>

<p><!-- FM Mobile Post Widget --></p>

<script type="text/javascript" src="http://mobileposts.federatedmedia.net/gadgetopia/512/mobile_post.js"></script>

<p><!-- /FM Mobile Post Widget --></p>
]]></content:encoded>
      <dc:subject>Content Management</dc:subject>
      <dc:date>2008-03-27T21:26:39-06:00</dc:date>
    </item>

    <item>
      <title>eZ Publish Commercial Support Explained</title>
      <link>http://gadgetopia.com/post/6320</link>
      <description><![CDATA[<p><a href="http://blendinteractive.com/">Blend Interactive</a> is a certified partner of the eZ publish content management system.  <a href="http://ez.no/">eZ Systems</a>, the company behind eZ publish, sells commercial support for the system.</p>

<p>However, this is sometimes (often, actually) hard to explain to potential customers.  It&#8217;s commercial&#8230;but it&#8217;s open-source&#8230;huh?</p>

<p>To try and solve this, we wrote a document to definitively explain how this works:</p>

<p><a href="http://gadgetopia.com/media/documents/ez_support_explained.pdf">eZ publish: Support and Licensing Explained</a> (90KB PDF) </p>

<p>Some of you out there in the content management world will find this interesting, as it provides a good example of the &#8220;supported open-source&#8221; model that some companies are operating under these days.  This document is a little Blend-specific (we toss in consulting hours with an eZ support agreement purchase), but is otherwise generic to the <a href="http://ez.no/ezpublish/premium">eZ Publish Premium</a> support plan sold by eZ Systems.</p>
]]></description>
      <guid isPermaLink="false">6320@http://gadgetopia.com/</guid>
      <content:encoded><![CDATA[<p><a href="http://blendinteractive.com/">Blend Interactive</a> is a certified partner of the eZ publish content management system.  <a href="http://ez.no/">eZ Systems</a>, the company behind eZ publish, sells commercial support for the system.</p>

<p>However, this is sometimes (often, actually) hard to explain to potential customers.  It&#8217;s commercial&#8230;but it&#8217;s open-source&#8230;huh?</p>

<p>To try and solve this, we wrote a document to definitively explain how this works:</p>

<p><a href="http://gadgetopia.com/media/documents/ez_support_explained.pdf">eZ publish: Support and Licensing Explained</a> (90KB PDF) </p>

<p>Some of you out there in the content management world will find this interesting, as it provides a good example of the &#8220;supported open-source&#8221; model that some companies are operating under these days.  This document is a little Blend-specific (we toss in consulting hours with an eZ support agreement purchase), but is otherwise generic to the <a href="http://ez.no/ezpublish/premium">eZ Publish Premium</a> support plan sold by eZ Systems.</p>
]]></content:encoded>
      <dc:subject>Content Management</dc:subject>
      <dc:date>2008-03-25T06:12:39-06:00</dc:date>
    </item>

    <item>
      <title>Fundamental Questions When Selecting a CMS</title>
      <link>http://gadgetopia.com/post/6319</link>
      <description><![CDATA[<p><!-- FM Mobile Post Top Icon --></p>

<script type="text/javascript" src="http://mobileposts.federatedmedia.net/top_icon.js"></script>

<p><!-- /FM Mobile Post Top Icon --></p>

<p>This post is about three questions you have to answer before you can even go looking for a CMS.  The answers to these questions will drastically narrow the pool of systems you can select from.</p>

<p>(On an editorial note, my level of comfort with these audio posts is decreasing.  I suspect that I sound like one of two things:</p>

<ol>
<li>A bonafide expert</li>
<li>A complete jackass</li>
</ol>

<p>Please let it be the former&#8230;)</p>

<p>As always, if you’re looking at this in RSS, you can (1) visit the post itself to use the little Windows Mobile widget, (2) get the raw MP3 <a href="http://gadgetopia.com/media/audio/2008-03-23.mp3">here</a>, or (3) if Feedburner does what it claims, there should be an MP3 enclosure on this post in your RSS reader.</p>

<p><!-- FM Mobile Post Widget --></p>

<script type="text/javascript" src="http://mobileposts.federatedmedia.net/gadgetopia/458/mobile_post.js"></script>

<p><!-- /FM Mobile Post Widget --></p>
]]></description>
      <guid isPermaLink="false">6319@http://gadgetopia.com/</guid>
      <content:encoded><![CDATA[<p><!-- FM Mobile Post Top Icon --></p>

<script type="text/javascript" src="http://mobileposts.federatedmedia.net/top_icon.js"></script>

<p><!-- /FM Mobile Post Top Icon --></p>

<p>This post is about three questions you have to answer before you can even go looking for a CMS.  The answers to these questions will drastically narrow the pool of systems you can select from.</p>

<p>(On an editorial note, my level of comfort with these audio posts is decreasing.  I suspect that I sound like one of two things:</p>

<ol>
<li>A bonafide expert</li>
<li>A complete jackass</li>
</ol>

<p>Please let it be the former&#8230;)</p>

<p>As always, if you’re looking at this in RSS, you can (1) visit the post itself to use the little Windows Mobile widget, (2) get the raw MP3 <a href="http://gadgetopia.com/media/audio/2008-03-23.mp3">here</a>, or (3) if Feedburner does what it claims, there should be an MP3 enclosure on this post in your RSS reader.</p>

<p><!-- FM Mobile Post Widget --></p>

<script type="text/javascript" src="http://mobileposts.federatedmedia.net/gadgetopia/458/mobile_post.js"></script>

<p><!-- /FM Mobile Post Widget --></p>
]]></content:encoded>
      <dc:subject>Content Management</dc:subject>
      <dc:date>2008-03-24T00:17:25-06:00</dc:date>
    </item>

    <item>
      <title>Load-Bearing Walls in Content Management</title>
      <link>http://gadgetopia.com/post/6313</link>
      <description><![CDATA[<p><!-- FM Mobile Post Top Icon --></p>

<script type="text/javascript" src="http://mobileposts.federatedmedia.net/top_icon.js"></script>

<p><!-- /FM Mobile Post Top Icon --></p>

<p>Today&#8217;s post is about load-bearing walls in content management &#8212; those things that require a content editor to call a developer to change them.  Where do you draw the boundaries?  How much is too much?</p>

<p>Like yesterday, if you’re looking at this in RSS, you can (1) visit the post itself to use the little Windows Mobile widget, (2) get the raw MP3 <a href="http://gadgetopia.com/media/audio/2008-03-19.mp3">here</a>, or (3) if Feedburner does what it claims, there should be an MP3 enclosure on this post in your RSS reader.</p>

<p><!-- FM Mobile Post Widget --></p>

<script type="text/javascript" src="http://mobileposts.federatedmedia.net/gadgetopia/426/mobile_post.js"></script>

<p><!-- /FM Mobile Post Widget --></p>
]]></description>
      <guid isPermaLink="false">6313@http://gadgetopia.com/</guid>
      <content:encoded><![CDATA[<p><!-- FM Mobile Post Top Icon --></p>

<script type="text/javascript" src="http://mobileposts.federatedmedia.net/top_icon.js"></script>

<p><!-- /FM Mobile Post Top Icon --></p>

<p>Today&#8217;s post is about load-bearing walls in content management &#8212; those things that require a content editor to call a developer to change them.  Where do you draw the boundaries?  How much is too much?</p>

<p>Like yesterday, if you’re looking at this in RSS, you can (1) visit the post itself to use the little Windows Mobile widget, (2) get the raw MP3 <a href="http://gadgetopia.com/media/audio/2008-03-19.mp3">here</a>, or (3) if Feedburner does what it claims, there should be an MP3 enclosure on this post in your RSS reader.</p>

<p><!-- FM Mobile Post Widget --></p>

<script type="text/javascript" src="http://mobileposts.federatedmedia.net/gadgetopia/426/mobile_post.js"></script>

<p><!-- /FM Mobile Post Widget --></p>
]]></content:encoded>
      <dc:subject>Content Management</dc:subject>
      <dc:date>2008-03-19T20:49:19-06:00</dc:date>
    </item>

    <item>
      <title>The Four Disciplines of Content Management Re-visited</title>
      <link>http://gadgetopia.com/post/6312</link>
      <description><![CDATA[<p><!-- FM Mobile Post Top Icon --></p>

<script type="text/javascript" src="http://mobileposts.federatedmedia.net/top_icon.js"></script>

<p><!-- /FM Mobile Post Top Icon --></p>

<p>This audio post revisits <a href="http://gadgetopia.com/post/6186">The Four Disciplines of Content Management</a> from last November.  I add quite a bit, and elaborate on a lot of the points, and babble on and on about content management.  Whether or not that&#8217;s a good thing is all a matter of perspective.</p>

<p>(There&#8217;s about a half-dozen words in this post I wish I could excise entirely, because they don&#8217;t make any sense at all.  I&#8217;ll let you figure out which words they are.)</p>

<p>If you&#8217;re looking at this in RSS, you can (1) visit the post itself to use the little Windows Mobile widget, (2) get the raw MP3 <a href="http://gadgetopia.com/media/audio/2008-03-18.mp3">here</a>, or (3) if Feedburner does what it claims, there should be an MP3 enclosure on this post in your RSS reader.</p>

<p><!-- FM Mobile Post Widget --></p>

<script type="text/javascript" src="http://mobileposts.federatedmedia.net/gadgetopia/415/mobile_post.js"></script>

<p><!-- /FM Mobile Post Widget --></p>
]]></description>
      <guid isPermaLink="false">6312@http://gadgetopia.com/</guid>
      <content:encoded><![CDATA[<p><!-- FM Mobile Post Top Icon --></p>

<script type="text/javascript" src="http://mobileposts.federatedmedia.net/top_icon.js"></script>

<p><!-- /FM Mobile Post Top Icon --></p>

<p>This audio post revisits <a href="http://gadgetopia.com/post/6186">The Four Disciplines of Content Management</a> from last November.  I add quite a bit, and elaborate on a lot of the points, and babble on and on about content management.  Whether or not that&#8217;s a good thing is all a matter of perspective.</p>

<p>(There&#8217;s about a half-dozen words in this post I wish I could excise entirely, because they don&#8217;t make any sense at all.  I&#8217;ll let you figure out which words they are.)</p>

<p>If you&#8217;re looking at this in RSS, you can (1) visit the post itself to use the little Windows Mobile widget, (2) get the raw MP3 <a href="http://gadgetopia.com/media/audio/2008-03-18.mp3">here</a>, or (3) if Feedburner does what it claims, there should be an MP3 enclosure on this post in your RSS reader.</p>

<p><!-- FM Mobile Post Widget --></p>

<script type="text/javascript" src="http://mobileposts.federatedmedia.net/gadgetopia/415/mobile_post.js"></script>

<p><!-- /FM Mobile Post Widget --></p>
]]></content:encoded>
      <dc:subject>Content Management</dc:subject>
      <dc:date>2008-03-18T23:50:49-06:00</dc:date>
    </item>

    <item>
      <title>PureEdit</title>
      <link>http://gadgetopia.com/post/6277</link>
      <description><![CDATA[<p>I spent some time this morning looking at <a href="http://pureedit.com/">PureEdit</a>.  It bills itself as a CMS, which is a classification I don&#8217;t know that I can agree with completely.</p>

<p>For the record, I only watched a couple of screencasts and browsed through some of the code.  I don&#8217;t know if it would call it a CMS based on <a href="http://gadgetopia.com/post/5940">the definition we offered a few months ago</a>, since there&#8217;s no higher CMS functionality: versioning, workflow, check-in/out, granular user management, etc.  (PureEdit is, actually, every bit the &#8220;RDBWAAS&#8221; mentioned in the afore-linked article.)</p>

<p>What PureEdit is, however, is a nicely slick way of managing some database tables.  Call it a very polished version of <a href="http://phpmyadmin.net/">phpMyAdmin</a>.  It lets you, the developer, create a very usable interface to let non-developers manage database records of a database you created.</p>

<p>This is handy in a lot of ways, because there&#8217;s no over-arching data storage architecture to worry about (it&#8217;s your database, after all), and there isn&#8217;t any publishing architecture either &#8212; no templating or other stuff to worry about.  You can just pull content from the database on the front end as you see fit, just like you&#8217;ve known how to do for years.</p>

<p>This is a nicely way to solve the problem we discussed a couple of years back: <a href="http://gadgetopia.com/post/4755">The Quandary of the Single Table Web Site</a>.</p>

<blockquote>
  <p>What do you do with sites that need a single table of data updated? These are sites which are totally static, except for this one thing…</p>
  
  <p>[&#8230;] This happens a lot — the sites are all static except for one element, be it a list of locations, events, the ubiquitous “Latest News,” etc.</p>
</blockquote>

<p>What I like about PureEdit is that its datatype handling is pluggable, so you can think up a way that a user needs to manage a field, and the edit interface will present them with a customized widget for that datatype.  (Example: you could plug in a Google Maps interface, have the user select a location from it, and then store the lat/lon information.  This is something we&#8217;ve done for eZ publish, but it&#8217;s order of magnitude more complex in that environment.)</p>

<p>I also like that there&#8217;s no publishing mechanism.  In my experience with content management, I&#8217;ve always felt this was the most wasted area of effort.  Content publishing is vastly more simple than content management or editing (see <a href="http://gadgetopia.com/post/252">The Value-Add Side of Content Management</a>, <a href="http://www.gadgetopia.com/post/2090">CMS&#8217;s Should Manage Content, Not Display It</a> and <a href="http://www.gadgetopia.com/post/2667">CMS Administration vs. Presentation Languages</a>).</p>

<p>So, consider PureEdit a cross between phpMyAdmin and a full-blown CMS.  It&#8217;s a nice, handy way to let non-developers manage tables of data.</p>

<p>It&#8217;s at version 1.1, and I&#8217;m excited to see where it goes.  Add versioning, check in/out (or just simple record locking), and some more finely-grained user management (this user can edit records in Table A, but not Table B), and you&#8217;d really have a heck of a piece of work.</p>
]]></description>
      <guid isPermaLink="false">6277@http://gadgetopia.com/</guid>
      <content:encoded><![CDATA[<p>I spent some time this morning looking at <a href="http://pureedit.com/">PureEdit</a>.  It bills itself as a CMS, which is a classification I don&#8217;t know that I can agree with completely.</p>

<p>For the record, I only watched a couple of screencasts and browsed through some of the code.  I don&#8217;t know if it would call it a CMS based on <a href="http://gadgetopia.com/post/5940">the definition we offered a few months ago</a>, since there&#8217;s no higher CMS functionality: versioning, workflow, check-in/out, granular user management, etc.  (PureEdit is, actually, every bit the &#8220;RDBWAAS&#8221; mentioned in the afore-linked article.)</p>

<p>What PureEdit is, however, is a nicely slick way of managing some database tables.  Call it a very polished version of <a href="http://phpmyadmin.net/">phpMyAdmin</a>.  It lets you, the developer, create a very usable interface to let non-developers manage database records of a database you created.</p>

<p>This is handy in a lot of ways, because there&#8217;s no over-arching data storage architecture to worry about (it&#8217;s your database, after all), and there isn&#8217;t any publishing architecture either &#8212; no templating or other stuff to worry about.  You can just pull content from the database on the front end as you see fit, just like you&#8217;ve known how to do for years.</p>

<p>This is a nicely way to solve the problem we discussed a couple of years back: <a href="http://gadgetopia.com/post/4755">The Quandary of the Single Table Web Site</a>.</p>

<blockquote>
  <p>What do you do with sites that need a single table of data updated? These are sites which are totally static, except for this one thing…</p>
  
  <p>[&#8230;] This happens a lot — the sites are all static except for one element, be it a list of locations, events, the ubiquitous “Latest News,” etc.</p>
</blockquote>

<p>What I like about PureEdit is that its datatype handling is pluggable, so you can think up a way that a user needs to manage a field, and the edit interface will present them with a customized widget for that datatype.  (Example: you could plug in a Google Maps interface, have the user select a location from it, and then store the lat/lon information.  This is something we&#8217;ve done for eZ publish, but it&#8217;s order of magnitude more complex in that environment.)</p>

<p>I also like that there&#8217;s no publishing mechanism.  In my experience with content management, I&#8217;ve always felt this was the most wasted area of effort.  Content publishing is vastly more simple than content management or editing (see <a href="http://gadgetopia.com/post/252">The Value-Add Side of Content Management</a>, <a href="http://www.gadgetopia.com/post/2090">CMS&#8217;s Should Manage Content, Not Display It</a> and <a href="http://www.gadgetopia.com/post/2667">CMS Administration vs. Presentation Languages</a>).</p>

<p>So, consider PureEdit a cross between phpMyAdmin and a full-blown CMS.  It&#8217;s a nice, handy way to let non-developers manage tables of data.</p>

<p>It&#8217;s at version 1.1, and I&#8217;m excited to see where it goes.  Add versioning, check in/out (or just simple record locking), and some more finely-grained user management (this user can edit records in Table A, but not Table B), and you&#8217;d really have a heck of a piece of work.</p>
]]></content:encoded>
      <dc:subject>Content Management</dc:subject>
      <dc:date>2008-02-16T12:14:58-06:00</dc:date>
    </item>

    <item>
      <title>Big Medium 2.0</title>
      <link>http://gadgetopia.com/post/6225</link>
      <description><![CDATA[<p><a title="Big Medium Features (Global Moxie)" href="http://globalmoxie.com/projects/bigmedium/features.shtml#browser-based">Big Medium Features (Global Moxie)</a>: Josh Clark has finally released Big Medium 2.0.</p>

<p>I subscribe to <a href="http://globalmoxie.com/blog/index.shtml">his blog</a>, and I kept seeing release notifications going up and I was wondering what he was doing, but it turns out that Josh wants to deliver something odd in the world of commercial software: a quality product.</p>

<p>I know, I know &#8212; it&#8217;s rare that you hear of these types of products, but they do exist.  Big Medium 2.0 took over 60 released builds and a full year of active beta testing, which is more impressive when you consider that Josh is a one-man shop.</p>

<p>Follow the link above to view the feature list and some screencaps.  I really like that Josh has addressed <a href="http://gadgetopia.com/post/5936">my frustration with image and file handling</a>, and has implemented <a href="http://gadgetopia.com/post/4964">image vs. file abstractions</a>.  Oh, and I got him to <a href="http://gadgetopia.com/post/5971">include versioning</a> as well.  I rule.</p>
]]></description>
      <guid isPermaLink="false">6225@http://gadgetopia.com/</guid>
      <content:encoded><![CDATA[<p><a title="Big Medium Features (Global Moxie)" href="http://globalmoxie.com/projects/bigmedium/features.shtml#browser-based">Big Medium Features (Global Moxie)</a>: Josh Clark has finally released Big Medium 2.0.</p>

<p>I subscribe to <a href="http://globalmoxie.com/blog/index.shtml">his blog</a>, and I kept seeing release notifications going up and I was wondering what he was doing, but it turns out that Josh wants to deliver something odd in the world of commercial software: a quality product.</p>

<p>I know, I know &#8212; it&#8217;s rare that you hear of these types of products, but they do exist.  Big Medium 2.0 took over 60 released builds and a full year of active beta testing, which is more impressive when you consider that Josh is a one-man shop.</p>

<p>Follow the link above to view the feature list and some screencaps.  I really like that Josh has addressed <a href="http://gadgetopia.com/post/5936">my frustration with image and file handling</a>, and has implemented <a href="http://gadgetopia.com/post/4964">image vs. file abstractions</a>.  Oh, and I got him to <a href="http://gadgetopia.com/post/5971">include versioning</a> as well.  I rule.</p>
]]></content:encoded>
      <dc:subject>Content Management</dc:subject>
      <dc:date>2007-12-26T16:03:40-06:00</dc:date>
    </item>

    <item>
      <title>To Structure or Not to Structure</title>
      <link>http://gadgetopia.com/post/6202</link>
      <description><![CDATA[<p>I&#8217;ve talked a lot over the years about content modeling.  <a href="http://gadgetopia.com/post/259">Open and Closed Content Management </a> is probably the most self-referenced post on this site.  Recently I called content modeling one of the <a href="http://gadgetopia.com/post/6186">Four Disciplines of Content Management</a>.</p>

<p>But, lingering behind all the questions about <em>how</em> to model something is a bigger question: do you model it at all?  When is it obvious to structure some content, and when do you just throw it into the &#8220;WYSIWYG pile&#8221;?</p>

<p>We were meeting with a client the other day about applying some content management to their Web site.   We came upon a page of &#8220;business partners.&#8221;  It had a repeated HTML structure consisting of a logo for the partner, their name, their URL, and a few paragraphs about them.  There were maybe a dozen or so partners listed.</p>

<p>It looked like this:</p>

<p><img src="http://gadgetopia.com/images/data_objects.gif"></p>

<p>From a content modeling perspective, you have three ways to handle content like this:</p>

<ol>
<li><p><em>No structure</em> <br />
This is a perfectly viable option &#8212; provided you didn&#8217;t mind a TABLE, the HTML represented here is nothing any decent WYSIWYG editor couldn&#8217;t handle.</p></li>
<li><p><em>Structured as a single content object</em> <br />
For most systems, this means an XML document, with a repeating &#8220;partner&#8221; element, and sub-elements therein for &#8220;logo,&#8221; &#8220;name,&#8221; &#8220;url,&#8221; and &#8220;description.&#8221;</p></li>
<li><p><em>Structured as multiple content objects</em> <br />
You could create a &#8220;partner&#8221; content type, with fields for &#8220;logo,&#8221; &#8220;name,&#8221; &#8220;url,&#8221; and &#8220;description.&#8221;  This page would be a rendering of multiple partner content objects, sequentially down the page.</p></li>
</ol>

<p>Not surprisingly, there are advantages and disadvantages for each, and we threw them around with this client.</p>

<p><em>No Structure</em>  </p>

<ul>
<li>Advantages
<ul>
<li>The simplest, fastest, and cheapest thing to do.</li>
<li>It&#8217;s flexible.  To structure content, it needs to be rigid and consistent.  However, the client will invariably have an exception to this rule, and a WYSIWYG editor will let them do whatever they want.</li>
<li>It&#8217;s likely more usable for the end-user.  They have content in their WYSIWYG editor that looks like it does on the page, and it&#8217;s tough to make more sense than that.</li>
</ul>

<p></li>
<li>Disadvantages</p>

<ul>
<li>You&#8217;re trusting the user to not screw up the formatting.  That can be a <em>huge</em> leap of faith.</li>
<li>You can&#8217;t isolate the individual partner records.   If they suddenly decided they wanted to feature a random partner on the home page, you can&#8217;t easily go pick one out of the list.</li>
<li>The images can be a problem if they have to be resized, given the generally <a href="http://gadgetopia.com/post/4964">poor</a> <a href="http://gadgetopia.com/post/5936">handling</a> of file-based content by WCMSs these days.</li>
<li>WYSIWYG editors don&#8217;t do CSS layouts well, so you may have to settle for some horked up HTML.  The above layout, for instance, would be hard for the average content editor to do in anything but a big TABLE tag.</li>
</ul>

<p></li>
</ul></p>

<p><em>Structured as a single content object</em></p>

<ul>
<li>Advantages
<ul>
<li>You can control the formatting at the template level, which means it&#8217;s much harder for the user to screw it up.  You&#8217;ve taken the formatting out of the user&#8217;s hands and they&#8217;re now working with pure content.</li>
<li>You can programmatically resize and otherwise process the images.</li>
<li>The page remains a single content object, which is simpler for the end user (opposed to multiple content objects, in the next scenario).</li>
<li>There&#8217;s now enough structure to get at the individual records if you need to.</li>
</ul>

<p></li>
<li>Disadvantages</p>

<ul>
<li>With structure comes rigidity.  If the client wants an exception to the format for Partner X, it can become a complicated exception process, or it can be nigh impossible.</li>
<li>Changes to the format now become a developer concern, rather than an editor concern.  If they suddenly decide they want to include a line for &#8220;location,&#8221; they can&#8217;t do that themselves without dual-purposing another field, which kind of defeats the purpose.</li>
<li>To effect this solution, you need to have a CMS that can handle repeating form elements in a content type.  This usually means XML, and an editor that allows repeating XML elements.</li>
<li>While arbitrary ordering of records is simple (most XML editors will let you move child elements around within the parent), sorting based on a property can be problematic.  Support for sorting in XSL is simplistic, and to sort otherwise would require you to parse the XML into some other, sortable data structure, sort it, then publish it from there, or put it <em>back</em> into XML to be transformed.</li>
</ul>

<p></li>
</ul></p>

<p><em>Structured as multiple content objects</em></p>

<ul>
<li>Advantages
<ul>
<li>As before, you can control the formatting at the template level.</li>
<li>You can manage each partner record individually.  For each one, this means you can permission them, version them, subject them to workflow, etc.  You could even give each partner a login and let them manage their own record.</li>
<li>Getting at each of the records individually is as simple as possible.</li>
<li>Most all CMSs can handle this type of structure (as opposed to the need for repeating elements in the prior scenario).</li>
</ul>

<p></li>
<li>Disadvantages</p>

<ul>
<li>As before, with structure comes rigidity.</li>
<li>Can be more complex for the end user.  They have more than one object floating around.  Some users might find this just as simple, some may find it complicated.</li>
<li>Depending on the CMS, ordering the records on the page can be a problem.  You might want to arbitrarily order these records (rather than sorting on a property), and some CMSs do that better than others.</li>
</ul>

<p></li>
</ul></p>

<p>So, there&#8217;s a run-down of the advantages and the disadvantages of the major approaches.  But which one to choose?  </p>

<p>As you&#8217;d imagine, there&#8217;s no clear-cut answer.  Here are some of the factors to consider:</p>

<ul>
<li>To what extent do you need to sub-divide the content?  In the above example, will you <em>ever</em> need to isolate a single partner?</li>
<li>If your answer to the above is &#8220;no,&#8221; how sure are you of that?  How well does the end-user understand the risk they&#8217;re taking by not making the content sub-dividable?  Will they accept extra expense if it has to be structured later?</li>
<li>How many sub-dividable units are there?  The stakes are much lower with a dozen than with 15,000.  Additionally, as the number of units goes up, so does the administrative overhead of managing them all as a group (finding the one that changed out of a dozen is easier than out of 15,000, no matter how good your diffing tool).</li>
<li>What is the technical sophistication of the end-user?  How well do they understand content management?  Can they grasp the concept of compositing a page out of sub-elements, or are they going to be confused if what&#8217;s in the editor doesn&#8217;t look like what&#8217;s on the page?</li>
<li>How often is the content going to change?  When it does change, how often will it be a single element?  Will changes to single units overlap, so if one is in the middle of a workflow, would it help to be able to send another one through workflow as a separate unit?</li>
<li>How intricate is the formatting?</li>
<li>How do they want to order the individual records?</li>
<li>Is there any processing you need to do on sub-elements of a record?  In the example, the image needs to be resized consistently every time.  In other cases, you may need to do consistent calculations of user-supplied values that are best run through a stable algorithm.</li>
<li>Are permissions different on individual units?  In the example, if partners can manage their own record, then they have to be permissioned separately.</li>
<li><p>How sophisticated is your CMS editing tool?  Can it even do repeating elements at all?  If you choose the second option, and structure within a single content object, how closely can the editing form look like what&#8217;s on the page?  (Put another way, how easily can you &#8220;trick&#8221; the end-user into structuring content by making it look like WYSIWYG?)</p>

<p>(Incidentally, <a href="http://ektron.com/">Ektron</a> does a good job of this.  You can make input forms with repeating elements that come very close what what the end result will be.  Joseph Scott&#8217;s <a href="http://editinplace.org/">Edit in Place</a> would do well here too.)</p></li>
</ul>

<p>In writing this post, I tossed it over the pond to <a href="http://bigmedium.com/">Josh Clark</a> for his input.  In his response, he captured one of the more succinct differences between how we (developers) look at content, and how the end users do.  This too, needs to play a role in your decision (emphasis mine):</p>

<blockquote>
  <p>The big advantage to structuring content, of course, is that it lets you repackage it and present it in different forms and contexts. The downside is that <em>it forces editors to approach their content like machines, thinking in terms of abstract fields that might be mixed and matched down the road</em>. The benefits often outweigh this usability cost if you&#8217;re going to present the content elements in multiple contexts and/or offer various sorting options with a large number of elements. If not, then I typically go with unstructured.</p>
</blockquote>

<p>That&#8217;s brilliant, and it&#8217;s so true.  Understand that <em>structuring content can suck the soul out of the authoring process for a lot of people</em>.  Like Josh said, often the advantages are clear enough to justify some soul-sucking, but always approach this with care.</p>

<p>I remember a client for whom we were building a &#8220;case studies&#8221; section of their Web site.  I kept trying to get them to structure the case studies.  I would say things like:</p>

<blockquote>
  <p>If you kept your case studies in an Excel spreadsheet, and each row was a case study, what would the column headings be?</p>
</blockquote>

<p>Now, this is a good question and one that&#8217;s worked well for me in the past, but this client was just not getting it.  Finally, Joe said, &#8220;Dude, I think they just want a page&#8230;&#8221;  And he was right.  The client wasn&#8217;t thinking in terms of structure &#8212; they were thinking in terms of a page with stuff on it.  The figured they could just WYSIWYG it up, and in the end, they did it this way and they were fine.</p>

<p><em>Postscript:</em> So, what are we going to do with our original example?  At this point, I can&#8217;t say, but I&#8217;m leaning away from pure WYSIWYG because of the image processing.  If we get this client on <a href="http://ez.no/">eZ publish</a>, I imagine we&#8217;ll do it in separate records because eZ can&#8217;t repeat sub-elements within the same record.  If we were to go with a CMS that allowed that, then my inclination would be to do as a structured single record.</p>
]]></description>
      <guid isPermaLink="false">6202@http://gadgetopia.com/</guid>
      <content:encoded><![CDATA[<p>I&#8217;ve talked a lot over the years about content modeling.  <a href="http://gadgetopia.com/post/259">Open and Closed Content Management </a> is probably the most self-referenced post on this site.  Recently I called content modeling one of the <a href="http://gadgetopia.com/post/6186">Four Disciplines of Content Management</a>.</p>

<p>But, lingering behind all the questions about <em>how</em> to model something is a bigger question: do you model it at all?  When is it obvious to structure some content, and when do you just throw it into the &#8220;WYSIWYG pile&#8221;?</p>

<p>We were meeting with a client the other day about applying some content management to their Web site.   We came upon a page of &#8220;business partners.&#8221;  It had a repeated HTML structure consisting of a logo for the partner, their name, their URL, and a few paragraphs about them.  There were maybe a dozen or so partners listed.</p>

<p>It looked like this:</p>

<p><img src="http://gadgetopia.com/images/data_objects.gif"></p>

<p>From a content modeling perspective, you have three ways to handle content like this:</p>

<ol>
<li><p><em>No structure</em> <br />
This is a perfectly viable option &#8212; provided you didn&#8217;t mind a TABLE, the HTML represented here is nothing any decent WYSIWYG editor couldn&#8217;t handle.</p></li>
<li><p><em>Structured as a single content object</em> <br />
For most systems, this means an XML document, with a repeating &#8220;partner&#8221; element, and sub-elements therein for &#8220;logo,&#8221; &#8220;name,&#8221; &#8220;url,&#8221; and &#8220;description.&#8221;</p></li>
<li><p><em>Structured as multiple content objects</em> <br />
You could create a &#8220;partner&#8221; content type, with fields for &#8220;logo,&#8221; &#8220;name,&#8221; &#8220;url,&#8221; and &#8220;description.&#8221;  This page would be a rendering of multiple partner content objects, sequentially down the page.</p></li>
</ol>

<p>Not surprisingly, there are advantages and disadvantages for each, and we threw them around with this client.</p>

<p><em>No Structure</em>  </p>

<ul>
<li>Advantages
<ul>
<li>The simplest, fastest, and cheapest thing to do.</li>
<li>It&#8217;s flexible.  To structure content, it needs to be rigid and consistent.  However, the client will invariably have an exception to this rule, and a WYSIWYG editor will let them do whatever they want.</li>
<li>It&#8217;s likely more usable for the end-user.  They have content in their WYSIWYG editor that looks like it does on the page, and it&#8217;s tough to make more sense than that.</li>
</ul>

<p></li>
<li>Disadvantages</p>

<ul>
<li>You&#8217;re trusting the user to not screw up the formatting.  That can be a <em>huge</em> leap of faith.</li>
<li>You can&#8217;t isolate the individual partner records.   If they suddenly decided they wanted to feature a random partner on the home page, you can&#8217;t easily go pick one out of the list.</li>
<li>The images can be a problem if they have to be resized, given the generally <a href="http://gadgetopia.com/post/4964">poor</a> <a href="http://gadgetopia.com/post/5936">handling</a> of file-based content by WCMSs these days.</li>
<li>WYSIWYG editors don&#8217;t do CSS layouts well, so you may have to settle for some horked up HTML.  The above layout, for instance, would be hard for the average content editor to do in anything but a big TABLE tag.</li>
</ul>

<p></li>
</ul></p>

<p><em>Structured as a single content object</em></p>

<ul>
<li>Advantages
<ul>
<li>You can control the formatting at the template level, which means it&#8217;s much harder for the user to screw it up.  You&#8217;ve taken the formatting out of the user&#8217;s hands and they&#8217;re now working with pure content.</li>
<li>You can programmatically resize and otherwise process the images.</li>
<li>The page remains a single content object, which is simpler for the end user (opposed to multiple content objects, in the next scenario).</li>
<li>There&#8217;s now enough structure to get at the individual records if you need to.</li>
</ul>

<p></li>
<li>Disadvantages</p>

<ul>
<li>With structure comes rigidity.  If the client wants an exception to the format for Partner X, it can become a complicated exception process, or it can be nigh impossible.</li>
<li>Changes to the format now become a developer concern, rather than an editor concern.  If they suddenly decide they want to include a line for &#8220;location,&#8221; they can&#8217;t do that themselves without dual-purposing another field, which kind of defeats the purpose.</li>
<li>To effect this solution, you need to have a CMS that can handle repeating form elements in a content type.  This usually means XML, and an editor that allows repeating XML elements.</li>
<li>While arbitrary ordering of records is simple (most XML editors will let you move child elements around within the parent), sorting based on a property can be problematic.  Support for sorting in XSL is simplistic, and to sort otherwise would require you to parse the XML into some other, sortable data structure, sort it, then publish it from there, or put it <em>back</em> into XML to be transformed.</li>
</ul>

<p></li>
</ul></p>

<p><em>Structured as multiple content objects</em></p>

<ul>
<li>Advantages
<ul>
<li>As before, you can control the formatting at the template level.</li>
<li>You can manage each partner record individually.  For each one, this means you can permission them, version them, subject them to workflow, etc.  You could even give each partner a login and let them manage their own record.</li>
<li>Getting at each of the records individually is as simple as possible.</li>
<li>Most all CMSs can handle this type of structure (as opposed to the need for repeating elements in the prior scenario).</li>
</ul>

<p></li>
<li>Disadvantages</p>

<ul>
<li>As before, with structure comes rigidity.</li>
<li>Can be more complex for the end user.  They have more than one object floating around.  Some users might find this just as simple, some may find it complicated.</li>
<li>Depending on the CMS, ordering the records on the page can be a problem.  You might want to arbitrarily order these records (rather than sorting on a property), and some CMSs do that better than others.</li>
</ul>

<p></li>
</ul></p>

<p>So, there&#8217;s a run-down of the advantages and the disadvantages of the major approaches.  But which one to choose?  </p>

<p>As you&#8217;d imagine, there&#8217;s no clear-cut answer.  Here are some of the factors to consider:</p>

<ul>
<li>To what extent do you need to sub-divide the content?  In the above example, will you <em>ever</em> need to isolate a single partner?</li>
<li>If your answer to the above is &#8220;no,&#8221; how sure are you of that?  How well does the end-user understand the risk they&#8217;re taking by not making the content sub-dividable?  Will they accept extra expense if it has to be structured later?</li>
<li>How many sub-dividable units are there?  The stakes are much lower with a dozen than with 15,000.  Additionally, as the number of units goes up, so does the administrative overhead of managing them all as a group (finding the one that changed out of a dozen is easier than out of 15,000, no matter how good your diffing tool).</li>
<li>What is the technical sophistication of the end-user?  How well do they understand content management?  Can they grasp the concept of compositing a page out of sub-elements, or are they going to be confused if what&#8217;s in the editor doesn&#8217;t look like what&#8217;s on the page?</li>
<li>How often is the content going to change?  When it does change, how often will it be a single element?  Will changes to single units overlap, so if one is in the middle of a workflow, would it help to be able to send another one through workflow as a separate unit?</li>
<li>How intricate is the formatting?</li>
<li>How do they want to order the individual records?</li>
<li>Is there any processing you need to do on sub-elements of a record?  In the example, the image needs to be resized consistently every time.  In other cases, you may need to do consistent calculations of user-supplied values that are best run through a stable algorithm.</li>
<li>Are permissions different on individual units?  In the example, if partners can manage their own record, then they have to be permissioned separately.</li>
<li><p>How sophisticated is your CMS editing tool?  Can it even do repeating elements at all?  If you choose the second option, and structure within a single content object, how closely can the editing form look like what&#8217;s on the page?  (Put another way, how easily can you &#8220;trick&#8221; the end-user into structuring content by making it look like WYSIWYG?)</p>

<p>(Incidentally, <a href="http://ektron.com/">Ektron</a> does a good job of this.  You can make input forms with repeating elements that come very close what what the end result will be.  Joseph Scott&#8217;s <a href="http://editinplace.org/">Edit in Place</a> would do well here too.)</p></li>
</ul>

<p>In writing this post, I tossed it over the pond to <a href="http://bigmedium.com/">Josh Clark</a> for his input.  In his response, he captured one of the more succinct differences between how we (developers) look at content, and how the end users do.  This too, needs to play a role in your decision (emphasis mine):</p>

<blockquote>
  <p>The big advantage to structuring content, of course, is that it lets you repackage it and present it in different forms and contexts. The downside is that <em>it forces editors to approach their content like machines, thinking in terms of abstract fields that might be mixed and matched down the road</em>. The benefits often outweigh this usability cost if you&#8217;re going to present the content elements in multiple contexts and/or offer various sorting options with a large number of elements. If not, then I typically go with unstructured.</p>
</blockquote>

<p>That&#8217;s brilliant, and it&#8217;s so true.  Understand that <em>structuring content can suck the soul out of the authoring process for a lot of people</em>.  Like Josh said, often the advantages are clear enough to justify some soul-sucking, but always approach this with care.</p>

<p>I remember a client for whom we were building a &#8220;case studies&#8221; section of their Web site.  I kept trying to get them to structure the case studies.  I would say things like:</p>

<blockquote>
  <p>If you kept your case studies in an Excel spreadsheet, and each row was a case study, what would 