<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Pop Art Blog &#187; wordpress</title>
	<atom:link href="http://blogs.popart.com/tags/wordpress/feed/" rel="self" type="application/rss+xml" />
	<link>http://blogs.popart.com</link>
	<description>Flashes of Pop, Wit and Reason</description>
	<lastBuildDate>Mon, 26 Jul 2010 21:16:43 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>How to Convert from Community Server 2007 to&#160;Wordpress</title>
		<link>http://blogs.popart.com/2009/07/convert-cs2007-to-wordpress/</link>
		<comments>http://blogs.popart.com/2009/07/convert-cs2007-to-wordpress/#comments</comments>
		<pubDate>Mon, 20 Jul 2009 18:30:35 +0000</pubDate>
		<dc:creator>Scott Vandehey</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[blogs]]></category>
		<category><![CDATA[CommunityServer]]></category>
		<category><![CDATA[cs2007]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://blogs.popart.com/?p=555</guid>
		<description><![CDATA[It&#8217;s safe to say that no one at Pop Art was ever really happy with Community Server. We selected it as a platform for a variety of reasons, some of which turned out to be based on faulty assumptions. Once we finally made the decision to switch to Wordpress, the conversion was a huge pain, [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s safe to say that no one at Pop Art was ever really happy with Community Server. We selected it as a platform for a variety of reasons, some of which turned out to be based on faulty assumptions. Once we finally made the decision to switch to Wordpress, the conversion was a huge pain, but ultimately worth the effort.<span id="more-555"></span></p>
<h3>How We Got Into This&nbsp;Mess</h3>
<p>When I was hired at Pop Art in early 2006, there was no official Pop Art blog. The design team had their own site, which was sporadically updated and not branded as a Pop Art site. Several members of the dev team also had work blogs, but again, they were not branded. As somewhat of a blogging zealot, I pushed hard to standardize these onto one site, and in August, I got the go-ahead to set something up.</p>
<p>When I started looking into solutions, I was working with a few assumptions. First, that the existing blogs would stay up, and the central blog would syndicate their posts by pulling in their RSS feeds. Secondly, despite my strong preference for Wordpress, that it was not a viable option for us. That&#8217;s because we&#8217;re a Microsoft shop, so we don&#8217;t have a lot of PHP experience in-house, and we don&#8217;t have any Apache boxes to host the site on. Also, since I was assuming we wanted multiple blogs syndicated at one domain (rather than a single blog with multiple authors), there wasn&#8217;t a good way to do that with Wordpress at the time (Wordpress MU hadn&#8217;t really taken off at the time).</p>
<p>Given those assumptions, we ended up installing Community Server. I felt good about this because it was the product used to host all the blogs at Microsoft, and appeared to be well-supported and active.</p>
<h3>Increasing Difficulties with Community&nbsp;Server</h3>
<p>However, <a href="/2007/10/skinning-community-server-2007/">installation and customization were a nightmare</a>. After a lengthy struggle to get everything set up correctly, it became increasingly clear that some of our assumptions were inaccurate.</p>
<p>Although we started with independent blogs being syndicated, our CEO eventually wrote a company blogging policy disallowing this, so we ended up with a Community Server site that had 20+ single-author blogs being aggregated onto a single homepage to give the appearance of a standard multiple-author blog. We weren&#8217;t taking advantage of anything the multiple-blog scenario was originally set up to do.</p>
<p>Over time, we found out that Community Server was not only difficult to customize, it was also poorly supported. After we purchased and installed CS2007, they released two further versions, and stopped supporting ours. (When we contacted them about purchasing an updated for our license to add more blogs, we were told our version was no longer supported, and they offered to let us upgrade at a discounted price of $900. We didn&#8217;t purchase that upgrade, and three months later, they announced that they were changing their license structure again, and we would now have to pay full price for a brand new license if we wanted to upgrade.) I know that companies make money by releasing new versions, but it seems crazy that less than two years after we bought their product, they wouldn&#8217;t support us at all without a full upgrade.</p>
<p>To cut a long story short, the straw that finally broke the camel&#8217;s back was when we decided to integrate Twitter into our blogs. We were able to add the javascript twitter script to the sidebar to display the Pop Art feed easily, but in order to add individual twitter feeds to the profile page, we were going to need to bring in the .NET programmers, who are always really busy &#8212; and I realized that if we were using Wordpress, I could do everything myself.</p>
<p>There were other factors, including our frustration with the licensing situation, and the fact that we didn&#8217;t need the overly complicated multiple blog situation anymore, but the customization difficulties were the kicker. Once I was able to assure our CEO that switching to Wordpress wouldn&#8217;t lead to a repeat of this situation in a few years, we had the green light to make the switch.</p>
<h3>Exporting Posts from Community&nbsp;Server</h3>
<p>Getting our posts from Community Server to Wordpress was our first hurdle. Out of the box, there&#8217;s no way to make it work, other than having Wordpress scrape the RSS feed &#8212; and that would lose all the comments. Thankfully, other people had already done the legwork for me. Bear with me here.</p>
<p><a href="http://www.aaronlerch.com/blog/2007/08/23/breaking-up-moving-blog-engines/">Aaron Lerch</a> wrote a great post in August 2007 about switching from Blogger to Wordpress using BlogML. I already knew from when we originally set it up that <a href="http://blogs.popart.com/2006/08/community-server-is-grrrreat/">Community Server supports BlogML</a>, and Aaron wrote a module for Wordpress to import from BlogML format.</p>
<p>Then, in October 2007, <a href="http://www.softwarebyrob.com/2007/10/05/a-tale-of-moving-blog-engines-community-server-to-wordpress/">Rob Walling</a> wrote a post about switching from Community Server 2007 to Wordpress. He updated Aaron&#8217;s Wordpress importer because Wordpress 2.3 switched from categories to tags.</p>
<p>Finally, in October 2008, <a href="http://www.kavinda.net/2008/10/23/migrating-from-dasblog-to-wordpress.html">Kavinda Munasinghe</a> wrote a post about switching from DasBlog to Wordpress, and once again, updated Aaron&#8217;s Wordpress importer.</p>
<p>So, I grabbed the <a href="http://nayyeri.net/blog/community-server-2007-blogml-converter/">BlogML Export module for Community Server 2007</a>, and Kavinda&#8217;s updated <a href="http://www.kavinda.net/2008/10/23/migrating-from-dasblog-to-wordpress.html">BlogML Importer for Wordpress</a>, and set about my business.</p>
<h3>Importing Posts to&nbsp;Wordpress</h3>
<p>The first problem I ran into is that I couldn&#8217;t get one big export file of every blog in our Community Server installation, I had to create an export file for each one.</p>
<p>The second problem I ran into is that my exports didn&#8217;t import correctly. Now, I have no idea if the problem was from one of the versions of the importer, or if the exporter wasn&#8217;t working correctly, or even if the latest version of Wordpress just has a slightly different database. What it boiled down to is that I had to manually reformat each of my 32 export files.</p>
<p>The biggest issue was with categories/tags. First of all, all my tags were being imported as categories. I was willing to ignore this, since Wordpress has a &#8220;convert categories to tags&#8221; feature, but it was still annoying. In addition to that, however, all the categories were importing as numbers. Turns out that Wordpress was grabbing the category ID instead of the category name.</p>
<p>I looked at both the importer and the exporter, but I didn&#8217;t have the programming know-how to fix it, so ultimately, I just wrote a simple regular expression to reformat all the categories so that their names were in the ID attribute so they would import correctly.</p>
<p>In addition to that, author names weren&#8217;t importing correctly, draft status posts were being published, and a couple of older blogs where the authors had copy-and-pasted from Word were bringing in a bunch of crazy custom microsoft markup. All in all, I probably spent about 3-4 hours manually cleaning up all my export files. This all sounds like a huge pain (and it was!), but I&#8217;m happy to say that once I was done, everything imported perfectly.</p>
<h3>Redirecting Old&nbsp;Posts</h3>
<p>The final thing I needed to do was set up a 301 redirect for all the old posts. Aaron&#8217;s importer script gives you a file that you can use to build a list of redirects in your .htaccess file, but I was sure there was a better way. After a bit of digging, I found a forum post about <a href="http://www.webmasterworld.com/forum92/6079.htm">using mod_rewrite to change dynamic to static URLs</a> that helped me write the following regular expression to redirect from our old permalinks to our new ones.</p>
<pre><code>RewriteRule
     ^([^/]+)/archive/([^/]+)/([^/]+)/([^/]+)/([^/]+).aspx$
     http://blogs.popart.com/$2/$3/$5 [R=301,L]
</code></pre>
<p>Note that normally, that would all appear on one line. I&#8217;ve broken it up for readability. That looks for urls like <kbd>/scott-vandehey/archive/2006/11/09/post-title.aspx</kbd> and redirects them to <kbd>/2006/11/post-title/</kbd>. With that one rule in our .htaccess file, all our old blogs posts would automatically get a 301 redirect to the new URLs.</p>
<p>Now that we&#8217;ve made the switch, I&#8217;m really happy we spent the time on it. We took the opportunity to redo the design to better match our main site, and the template engine in Wordpress is a real joy to work with &#8212; and well-documented, more importantly! I&#8217;m confident that we&#8217;ll be able to handle the evolving needs of our company in the future, and informally, I can say that everyone seems happier using the new system. The transition was a pain, but the results were worth it.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.popart.com/2009/07/convert-cs2007-to-wordpress/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Six Wordpress Tips from the Pop Art Blog&#160;Redesign</title>
		<link>http://blogs.popart.com/2009/07/six-wordpress-tips/</link>
		<comments>http://blogs.popart.com/2009/07/six-wordpress-tips/#comments</comments>
		<pubDate>Fri, 10 Jul 2009 00:03:54 +0000</pubDate>
		<dc:creator>Scott Vandehey</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[atom]]></category>
		<category><![CDATA[excerpts]]></category>
		<category><![CDATA[feeds]]></category>
		<category><![CDATA[gravatars]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[profiles]]></category>
		<category><![CDATA[rss]]></category>
		<category><![CDATA[tips]]></category>
		<category><![CDATA[twitter]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://blogs.popart.com/?p=527</guid>
		<description><![CDATA[When we converted the Pop Art Blog to use Wordpress, I learned some clever tricks that I would like to share with you. If you like what we&#8217;ve done around here, you might be interested in some of these techniques for your own site.
Use RSS Excerpts to Strip All&#160;HTML

/*
	just like the_excerpt, but really strips all [...]]]></description>
			<content:encoded><![CDATA[<p>When we converted the Pop Art Blog to use Wordpress, I learned some clever tricks that I would like to share with you. If you like what we&#8217;ve done around here, you might be interested in some of these techniques for your own site.<span id="more-527"></span></p>
<h3>Use RSS Excerpts to Strip All&nbsp;HTML</h3>
<pre class="brush: php;">
/*
	just like the_excerpt, but really strips all the HTML, including BR tags
*/
&lt;p&gt;&lt;?php the_excerpt_rss(); ?&gt;&lt;/p&gt;
</pre>
<p>We wanted to display a post excerpt on most pages. Normally, I would just use wordpress&#8217; <code>the_excerpt</code> function. It automatically displays the post excerpt if it exists, and if not, then it grabs the first 50 words of the post, and even strips the HTML! Sounds great, right? Except for one thing &#8212; it doesn&#8217;t strip line breaks, so instead of a page full of single-paragraph excerpts, I had several posts with two small paragraphs displaying. Not a big deal, but it was messing up our design.</p>
<p>After doing a little digging in the <a href="http://codex.wordpress.org/">wordpress documentation</a>, I found that <code>the_excerpt_rss</code> does exactly what I was looking for. It&#8217;s intended to be used in RSS templates, but you can use it in your regular pages and it works just as well. The only hiccup is that you&#8217;ll need to wrap it in a <code>&lt;p&gt;</code> yourself.</p>
<h3>Use the Nickname Field for Job&nbsp;Titles</h3>
<pre class="brush: php;">
&lt;?php the_author_meta('nickname'); ?&gt;
</pre>
<p>Our design shows the job title under everyone&#8217;s name. There&#8217;s no &#8220;job title&#8221; field in the user accounts, but I was able to repurpose the nickname field. To display it in the site, just use the code shown above in your post templates. Remember, the people looking at your site won&#8217;t know that you&#8217;re using the &#8220;wrong&#8221; database field! (You know, unless you tell them, like I&#8217;m doing.)</p>
<h3>Bit.ly Shortener for Twitter&nbsp;Links</h3>
<pre class="brush: php;">
/*
	Bit.ly URL Shortener
	Automatically shorten a URL using the Bit.ly API
	based on code from http://davidwalsh.name/bitly-php
*/
function make_bitly_url($url) {
	$login = 'YOUR BIT.LY LOGIN';
	$appkey = 'YOUR BIT.LY API KEY';
	$format = 'xml';
	$version = '2.0.1';
	$bitly = 'http://api.bit.ly/shorten?version='.$version.'&amp;longUrl='.urlencode($url).'&amp;login='.$login.'&amp;apiKey='.$appkey.'&amp;format='.$format;
	$response = file_get_contents($bitly);
	//parse depending on desired format
	if(strtolower($format) == 'json') {
		$json = @json_decode($response,true);
		return $json['results'][$url]['shortUrl'];
	} else { //xml
		$xml = simplexml_load_string($response);
		return 'http://bit.ly/'.$xml-&gt;results-&gt;nodeKeyVal-&gt;hash;
	}
}
</pre>
<p>Adding a &#8220;retweet this&#8221; link at the bottom of every post is pretty easy. You just link to twitter.com and pass a &#8220;status&#8221; query string in the URL with whatever you want their tweet to include &#8212; namely, the URL to the post they&#8217;re retweeting. But our URLs can get pretty lengthy, since they include the post title. Obviously, with Twitter&#8217;s 140-character limit, every character counts. To get around this, I found some code by <a href="http://davidwalsh.name/bitly-php">David Walsh</a> to make a <a href="http://bit.ly/">bit.ly</a> short URL. It works great, but you&#8217;ll need to register for an API key on their site to use it. This code goes in your <code>functions.php</code> file, and then you can call it from any post loop like this:</p>
<pre class="brush: php;">
&lt;?php echo make_bitly_url(get_permalink()); ?&gt;
</pre>
<h3>Use a Custom Default&nbsp;Gravatar</h3>
<pre class="brush: php;">
/*
	Add new default avatars
	based on code from http://wpengineer.com/add-avatar-to-wordpress-default/
*/
if ( !function_exists('fb_addgravatar') ) {
	function fb_addgravatar( $avatar_defaults ) {
		$stormtrooper = get_bloginfo('template_directory').'/images/avatar.png';
		$avatar_defaults[$stormtrooper] = 'Storm Trooper';
		return $avatar_defaults;
	}
	add_filter( 'avatar_defaults', 'fb_addgravatar' );
}
</pre>
<p>Wordpress&#8217; built-in support for gravatars in comments is fantastic, but if your commenters don&#8217;t have a gravatar account, the default avatar will be displayed. Wordpress lets you choose between a simple gray silhouette or several dynamically generated icons, none of which really fit our design. Luckily, I found this code that lets you add your own default avatar to the list &#8212; in our case, a lovely photo of a storm trooper. This code goes in your <code>functions.php</code> file, and it adds a new option to the default gravatar list in your admin area.</p>
<h3>Use HTML in User&nbsp;Profiles</h3>
<pre class="brush: php;">
/*
	Turn off HTML filter for user profiles
*/
remove_filter('pre_user_description', 'wp_filter_kses');
</pre>
<p>Our <a href="http://blogs.popart.com/author/scottvandehey/">fancy profile pages</a> use the &#8220;Biographical Info&#8221; field in the user profiles. The only problem is that by default, wordpress strips any HTML from it. You can disable that feature by adding this bit of code to your <code>functions.php</code> file.</p>
<h3>Add More RSS&nbsp;Feeds</h3>
<pre class="brush: php;">
&lt;link rel=&quot;alternate&quot; type=&quot;application/atom+xml&quot; title=&quot;&lt;?php bloginfo('name'); ?&gt; Full Posts&quot; href=&quot;&lt;?php bloginfo('atom_url'); ?&gt;&quot; /&gt;
&lt;?php
	// add comments feed on single-post pages
	if (is_single()) {
		while (have_posts()) : the_post();
			if ('open' == $post-&gt;comment_status) : /* If comments are open */
?&gt;
&lt;link rel=&quot;alternate&quot; type=&quot;application/atom+xml&quot; title=&quot;Comments on &lt;?php the_title(); ?&gt;&quot; href=&quot;&lt;?php bloginfo('url'); ?&gt;/index.php?feed=atom&amp;amp;p=&lt;?php the_ID(); ?&gt;&quot; /&gt;
&lt;?php
			endif;
		endwhile;
		rewind_posts();
	// add category feed on category archives
	} else if (is_category()) {
		$category = get_the_category();
?&gt;
&lt;link rel=&quot;alternate&quot; type=&quot;application/atom+xml&quot; title=&quot;Posts in the &lt;?php echo $category[0]-&gt;cat_name; ?&gt; category&quot; href=&quot;&lt;?php echo get_category_feed_link( $category[0]-&gt;cat_ID, 'atom' ); ?&gt;&quot; /&gt;
&lt;?php
	// add tag feed on tag archives
	} else if (is_tag()) {
?&gt;
&lt;link rel=&quot;alternate&quot; type=&quot;application/atom+xml&quot; title=&quot;Posts tagged with &lt;?php single_tag_title(); ?&gt;&quot; href=&quot;&lt;?php echo get_tag_feed_link( get_query_var('tag_id'), 'atom' ); ?&gt;&quot; /&gt;
&lt;?php
	// add author feed on author pages
	} else if (is_author()) {
		if(isset($_GET['author_name'])) :
		$curauth = get_userdatabylogin($author_name);
		else :
		$curauth = get_userdata(intval($author));
		endif;
		$authorfeedlink = get_author_feed_link( $curauth-&gt;ID, 'atom' );
	?&gt;
&lt;link rel=&quot;alternate&quot; type=&quot;application/atom+xml&quot; title=&quot;Posts by &lt;?php echo $curauth-&gt;display_name; ?&gt;&quot; href=&quot;&lt;?php echo $authorfeedlink; ?&gt;&quot; /&gt;
&lt;?php
	}
?&gt;
</pre>
<p>Finally, one of the best (and relatively unknown) features of wordpress is that you can get an RSS feed for just about every page on the site, just by adding <code>/feed/</code> to the end of the URL. I wanted to take advantage of this feature to add <code>link</code> elements for those special feeds on different pages &#8212; for example, a feed for an author&#8217;s posts on their profile page, or for comments on a post on that post&#8217;s page. The above code is a little convoluted, but it includes all the logic to add the following feeds on the appropriate pages:</p>
<ul>
<li>Complete blog feed on every page</li>
<li>Comments feed on individual post pages</li>
<li>Category feeds on category pages</li>
<li>Tag feeds on tag pages</li>
<li>Author feeds on author profile pages</li>
</ul>
<p>Note that I&#8217;ve set this up to provide Atom feeds, but you can change it by replacing every instance of <code>atom</code> with <code>rss2</code>. This code goes in your <code>header.php</code> file, near the rest of your <code>meta</code> and <code>link</code> elements.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.popart.com/2009/07/six-wordpress-tips/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Welcome to the New Pop Art&#160;Blog!</title>
		<link>http://blogs.popart.com/2009/06/welcome-to-the-new-pop-art-blog/</link>
		<comments>http://blogs.popart.com/2009/06/welcome-to-the-new-pop-art-blog/#comments</comments>
		<pubDate>Thu, 18 Jun 2009 01:11:45 +0000</pubDate>
		<dc:creator>Scott Vandehey</dc:creator>
				<category><![CDATA[Creative]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[CommunityServer]]></category>
		<category><![CDATA[cs2007]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[profiles]]></category>
		<category><![CDATA[redesign]]></category>
		<category><![CDATA[standards]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://70.96.242.8/~popartblog/?p=472</guid>
		<description><![CDATA[The new Pop Art blog is live! On the front end, it&#8217;s sporting a brand-new, and oh-so-spiffy, design, and on the back-end it&#8217;s been converted to the titan of the blogging world, Wordpress. Please look around, and enjoy the new scenery.  And make sure you take a peek at the new profile pages by clicking [...]]]></description>
			<content:encoded><![CDATA[<p>The new Pop Art blog is live! On the front end, it&#8217;s sporting a brand-new, and oh-so-spiffy, design, and on the back-end it&#8217;s been converted to the titan of the blogging world, Wordpress. Please look around, and enjoy the new scenery.  And make sure you take a peek at the new profile pages by clicking the photos above. It&#8217;s the only way you&#8217;ll find out who hates Gloria Estefan, and who describes himself as an &#8220;urban nomad.&#8221;</p>
<p>If you&#8217;re reading this in your feed reader, then our RSS feed has automatically redirected, and you shouldn&#8217;t have any problems. But in case you&#8217;re a stickler for official URLs, or you haven&#8217;t subscribed, our new feed can be found at <a href="http://blogs.popart.com/feed/atom/">blogs.popart.com/feed/atom/</a>.</p>
<p>In the next few days, there are some more posts coming, including one from Mark about the new design, one about how we integrated Twitter, one about some nifty Wordpress tricks we learned, and a long one about our experience converting from Community Server 2007 to Wordpress (long story short: it makes scaling Everest look like walking up the stairs).</p>
<p>So please: snoop, dig, stop and smell the roses. And welcome to the redesigned and improved Pop Art Blog, it&#8217;s where the magic happens (or something like that).</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.popart.com/2009/06/welcome-to-the-new-pop-art-blog/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Skinning Community Server&#160;2007</title>
		<link>http://blogs.popart.com/2007/10/skinning-community-server-2007/</link>
		<comments>http://blogs.popart.com/2007/10/skinning-community-server-2007/#comments</comments>
		<pubDate>Mon, 01 Oct 2007 16:03:00 +0000</pubDate>
		<dc:creator>Scott Vandehey</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[blogging]]></category>
		<category><![CDATA[CommunityServer]]></category>
		<category><![CDATA[cs2007]]></category>
		<category><![CDATA[documentation]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">/scott-vandehey/archive/2007/10/01/skinning-community-server-2007.aspx</guid>
		<description><![CDATA[We recently upgraded the Pop Art Blog to Community Server 2007, and I was assigned to upgrade the templates. Dave produced a wonderful comp, and when I read about CS2007’s new Chameleon Theme Engine, I was pretty excited. The actual experience of working with the templates turned into a bit of a nightmare, however.
Before I [...]]]></description>
			<content:encoded><![CDATA[<p class="leadtxt">We recently upgraded the <a href="http://blogs.popart.com/" mce_href="http://blogs.popart.com/">Pop Art Blog</a> to <a href="http://communityserver.org/" mce_href="http://communityserver.org/">Community Server 2007</a>, and I was assigned to upgrade the templates. Dave produced a wonderful comp, and when I read about CS2007’s new <a href="http://docs.communityserver.org/wiki/page.aspx/120/introduction-to-chameleon/" mce_href="http://docs.communityserver.org/wiki/page.aspx/120/introduction-to-chameleon/">Chameleon Theme Engine</a>, I was pretty excited. The actual experience of working with the templates turned into a bit of a nightmare, however.</p>
<p><span id="more-2337"></span>Before I get into how it went wrong, let me point out what went right. First of all, we did eventually succeed in getting nearly everything we wanted done, and I’m incredibly proud of the final results. Secondly, although I experienced many frustrations along the way, the <a href="http://communityserver.org/forums/" mce_href="http://communityserver.org/forums/">official support forum</a> was very helpful, and I always got a response to my questions within 24 hours. If you’re going to try skinning a CS2007 site, I highly recommend getting an account on the forums, and working with a programmer, if you can (more on that later).</p>
<p>Finally, although I did have difficulties, CS2007 is built to support a corporate blogging environment from the ground up. Wordpress and Movable Type are better programs in terms of the overall blogging experience, but their support for multiple-user scenarios are limited at best. Wordpress MU comes close, but I don’t like being removed from the primary development branch. At the end of the day, CS2007 is clearly the best solution for corporate blogging the way we want to do it.</p>
<p>With that out of the way, let’s talk about why skinning it was such a frustrating experience. It all boils down to one simple problem: A complete and total lack of documentation for non-programmers. Allow me to explain.</p>
<p>There are basically three classes of users for a product like CS2007 or Wordpress. You have your basic users who don’t know anything about the code, and only interact with the program through the browser interface. These users have minimal documentation needs. Give them some instructions on how to make a new blog post or add their logo to the default template, and they’re good to go. Both Wordpress and CS2007 have this basic documentation.</p>
<p>Next, you have your programmers. These are power users who are happy to muck around in the source code if they don’t like the way something works. These users have advanced documentation needs, because they need insight into things like the database schema, program controls and common functions. Both Wordpress and CS2007 have this advanced documentation. In fact, Community Server’s comes in an <a href="http://docs.communityserver.org/wiki/page.aspx/252/chameleon-control-documentation/" mce_href="http://docs.communityserver.org/wiki/page.aspx/252/chameleon-control-documentation/">MSDN-style CHM file</a> listing all the controls that are available. My programmer cohorts assure me that this documentation is quite thorough and gave them everything they needed to know.</p>
<p>Lastly, you have your casual developers. These are the guys like me who are very familiar with front-end code like HTML, CSS and javascript, but don’t know any .NET or PHP. These users have moderate documentation needs. They don’t need to understand how the source code works or the structure of the database necessarily. What they need is an easy way to pull out specific bits of information.</p>
<p>To give you a way to compare, let me give you a simple example common to both WordPress and Community Server.</p>
<p>In Wordpress, to display the date a post was made, you use this code: <code>&lt;?php the_date(); ?&gt;</code> I found this out by going to the <a href="http://codex.wordpress.org/" mce_href="http://codex.wordpress.org/">Wordpress documentation</a>, clicking on <a href="http://codex.wordpress.org/Template_Tags" mce_href="http://codex.wordpress.org/Template_Tags">Template Tags</a>, and then clicking on <a href="http://codex.wordpress.org/Template_Tags/the_date" mce_href="http://codex.wordpress.org/Template_Tags/the_date">the_date</a> in the “Date and Time tags” section. I was given a description of the tag, a list of parameters, and some examples of how to use it.</p>
<p>In Community Server, to do the same thing, you use this code: <code>&lt;CSBlog:WeblogPostData runat="server" Property="PostDate" /&gt;</code> I found this out by visiting the <a href="http://docs.communityserver.org/" mce_href="http://docs.communityserver.org/">Community Server documentation</a> section, and searching (in vain) for information on modifying templates. Eventually, I stumbled onto the <a href="http://docs.communityserver.org/wiki/page.aspx/123/single-value-controls/" mce_href="http://docs.communityserver.org/wiki/page.aspx/123/single-value-controls/">Single Value Controls</a> page, which helpfully explains the structure that is used to get a bit of information out of the database. This page does not give a complete list of values, however. To get that, I had to backtrack using the breadcrumb trail at the top of the page to the <a href="http://docs.communityserver.org/wiki/page.aspx/252/chameleon-control-documentation/" mce_href="http://docs.communityserver.org/wiki/page.aspx/252/chameleon-control-documentation/">Chameleon Control Documentation</a> page, which links to the MSDN file I mentioned before, as well as “API Property Documentation”, which includes a link to <a href="http://docs.communityserver.org/wiki/page.aspx/395/blog-control-property-data/" mce_href="http://docs.communityserver.org/wiki/page.aspx/395/blog-control-property-data/">Blog Control Property Data</a>, which lists all the properties for the CSBlog:X control. By combining the structure I found on the Single Value Controls page and the property names I found on the Blog Control Property Data page, I was able to make a control that echoes out the post date.</p>
<p>Now, that’s really not a great example, because I was never trying to look up something as simple as the post date. For something like that, I would look for an example in an existing theme. I’m just using this to illustrate what a pain it is to find any information on the Community Server side if you’re not a programmer. I tried looking in that MSDN document, but it was all greek to me. Even when my programmer cohorts were assisting me and walking me through the document, I didn’t understand what I was looking at.</p>
<p>A more common example of the kind of thing I needed documentation for was how to display a list of weblog posts but limit it by a certain tag. I never did find any documentation explaining how to do something like that. If you need anything like that, your only recourse is the forums. For example, here is a search I did for <a href="http://communityserver.org/search/SearchResults.aspx?q=filter+blog+posts+by+tag+AND+sectionid%3a129&amp;o=Relevance" mce_href="http://communityserver.org/search/SearchResults.aspx?q=filter+blog+posts+by+tag+AND+sectionid%3a129&amp;o=Relevance">filter blog posts by tag</a>. You’ll notice that of the results I got, most of them have nothing to do with my search, except that they are about how to use tags. Of the posts that do seem relevant, you’ll notice that most of them date from 2005 or 2006 &#8211; meaning they refer to the previous version of Community Server, and are no longer relevant.</p>
<p>Everything is like this. Searching for the most simple information becomes an incredibly frustrating ordeal. The only saving grace of the forum is that it is populated by people like <a href="http://communityserver.org/members/btiedt.aspx" mce_href="http://communityserver.org/members/btiedt.aspx">Ben Tiedt</a>, who managed to answer all the questions I posted within 24 hours, and was really helpful.</p>
<p>So, to recap: If you want to find anything out about Community Server, be prepared to spend hours trolling the forums and documentation, sifting through the irrelevant and out-of-date results to possibly find an answer, but more likely, you’ll have to post a question yourself, and wait for a community member to help you out.</p>
<p>I can’t be the only one who thinks that forums should not be the primary method of sharing information. Community Server desperately needs Wordpress-style documentation aimed at casual developers (like myself) who have higher needs than the average end user, but aren’t programmers.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.popart.com/2007/10/skinning-community-server-2007/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
