<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Cagintranet Web Design</title>
	
	<link>http://www.cagintranet.com</link>
	<description>Pittsburgh Web Design » Cagintranet Web Design - Web Designer, Developer, Graphic Artist and Web 2.0 Guru</description>
	<lastBuildDate>Tue, 20 Oct 2009 11:27:44 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.5</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/cagintranet" type="application/rss+xml" /><feedburner:emailServiceId>cagintranet</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
		<title>Download: FamFamFam Silk Companion II Icon Pack</title>
		<link>http://feedproxy.google.com/~r/cagintranet/~3/lIr7VxzHWpg/</link>
		<comments>http://www.cagintranet.com/archive/download-famfamfam-silk-companion-2-icon-pack/#comments</comments>
		<pubDate>Tue, 20 Oct 2009 02:35:38 +0000</pubDate>
		<dc:creator>Chris Cagle</dc:creator>
				<category><![CDATA[Projects]]></category>

		<guid isPermaLink="false">http://www.cagintranet.com/?p=582</guid>
		<description><![CDATA[<a href=http://www.cagintranet.com/archive/download-famfamfam-silk-companion-2-icon-pack/><img src=http://www.cagintranet.com/design/wp-content/uploads/2009/10/silk-companion-II.png class=imgtfe hspace=5 align=left width=200  border=0></a>
Introducing the Silk Companion II Icon Pack. While developing a new CKEditor skin for GetSimple, I had a need for some extra Silk icons developed by Mark James at FamFamFam. Out came 64 new silk-inspired icons. These icons are released under the same Creative Commons Attribution 3.0 License as the originals. 
Damien Guard created the [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.cagintranet.com/design/wp-content/uploads/2009/10/silk-companion-II.png" alt="silk-companion-II" title="silk-companion-II" width="500" height="175" class="alignnone size-full wp-image-583" /></p>
<p>Introducing the <strong>Silk Companion II Icon Pack</strong>. While developing a new <a href="http://ckeditor.com">CKEditor</a> skin for <a href="http://get-simple.info/">GetSimple</a>, I had a need for some extra <a href="http://www.famfamfam.com/lab/icons/silk/">Silk icons</a> developed by Mark James at FamFamFam. Out came 64 new silk-inspired icons. These icons are released under the same <a href="http://creativecommons.org/licenses/by/3.0/">Creative Commons Attribution 3.0 License</a> as the originals. </p>
<p>Damien Guard created the first set of the <a href="http://damieng.com/creative/icons/silk-companion-1-icons">Silk Companion</a> icons, so thanks to him for setting me on the track to get these completed. </p>
<p><strong>Download the <a href="http://www.cagintranet.com/design/wp-content/uploads/2009/10/Silk-Companion-II-Icons.zip">Silk Companion II Icon Pack</a></strong></p>
<img src="http://feeds.feedburner.com/~r/cagintranet/~4/lIr7VxzHWpg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.cagintranet.com/archive/download-famfamfam-silk-companion-2-icon-pack/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://www.cagintranet.com/archive/download-famfamfam-silk-companion-2-icon-pack/</feedburner:origLink></item>
		<item>
		<title>Tutorial: How to Implement Uploadify into an Application</title>
		<link>http://feedproxy.google.com/~r/cagintranet/~3/JhgLg5CV31E/</link>
		<comments>http://www.cagintranet.com/archive/how-to-implement-uploadify-into-an-application/#comments</comments>
		<pubDate>Thu, 15 Oct 2009 10:00:32 +0000</pubDate>
		<dc:creator>Chris Cagle</dc:creator>
				<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[jQuery]]></category>

		<guid isPermaLink="false">http://www.cagintranet.com/?p=522</guid>
		<description><![CDATA[<a href=http://www.cagintranet.com/archive/how-to-implement-uploadify-into-an-application/><img src=http://www.cagintranet.com/design/wp-content/uploads/2009/10/screenshot1.jpg class=imgtfe hspace=5 align=left width=200  border=0></a>
Last week I showed how to implement Jcrop into an application. In this tutorial &#8211; which also pulls from my experiences developing GetSimple &#8211; I implement the jQuery plugin Uploadify.
In this tutorial, we create a simple file upload script that also displays an unordered list of the files in the upload directory. The list of [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.cagintranet.com/design/wp-content/uploads/2009/10/screenshot1.jpg" alt="How to Implement Uploadify into an Application" /></p>
<p>Last week I showed <a href="http://www.cagintranet.com/archive/how-to-use-jcrop-from-within-an-application/">how to implement Jcrop into an application</a>. In this tutorial &#8211; which also pulls from my experiences developing <a href="http://get-simple.info/">GetSimple</a> &#8211; I implement the jQuery plugin <a href="http://www.uploadify.com/">Uploadify</a>.</p>
<p>In this tutorial, we create a simple file upload script that also displays an unordered list of the files in the upload directory. The list of files refreshes via an ajax call every time Uploadify processes a queue.</p>
<h3>Demo</h3>
<p><a href="/code/uploadify-app/upload.php">View the demo</a> or <a href="/code/uploadify-app/uploadify-demo.zip">download the files</a></p>
<h3>The Basic HTML</h3>
<pre><code class="html">&lt;h2>Uploadify Application Demo &lt;span id="loader">&lt;img src="img/loading.gif" alt="Loading..." />&lt;/span>&lt;/h2>
&lt;div id="sidebar">
	&lt;!-- form to be replaced by uploadify -->
	&lt;form id="mainftp" action="upload.php" method="post" enctype="multipart/form-data">
		&lt;p>&lt;input type="file" name="file" id="file" />&lt;/p>
		&lt;p>&lt;input type="submit" name="submit" value="Upload" />&lt;/p>
	&lt;/form>
&lt;/div>

&lt;!-- whole div to be refreshed once uploadify is finished -->
&lt;div id="allfiles" >
	&lt;?php
		//list all files via function file included up top
		$handle = @opendir($src_folder) or die("Unable to open $src_folder");
		ListDir($handle,$src_folder);
	?>
&lt;/div></code></pre>
<h3>The PHP</h3>
<pre><code class="php">//folder where the files are stored at
//you may need to chmod this folder to 775 or 777 for it to work
$src_folder = 'files/';

//file that includes the function to list all files in ul
include("inc/file_list.php");

//if javascript is disabled, the ftp will still work
if (isset($_FILES["file"])) {
	if ($_FILES["file"]["error"] > 0) {
	  $error = 'Error Uploading!';
	} else {
    $count = '1';
    $file_loc = $path . $_FILES["file"]["name"];
    $base = $_FILES["file"]["name"];
    while ( file_exists($file_loc) ) {
		$file_loc = $path . $count.'-'. $_FILES["file"]["name"];
		$base = $count.'-'. $_FILES["file"]["name"];
		$count++;
	}
    move_uploaded_file($_FILES["file"]["tmp_name"], $file_loc);
	}
}</code></pre>
<h3>The jQuery</h3>
<pre><code class="javascript">$('#mainftp').uploadify({
	'uploader' : 'js/uploadify/uploadify.swf',
	'script' : 'js/uploadify/uploadify.php',
	'multi' : true,
	'auto' : true,
	'height' : '32',
	'width' : '250',
	'buttonImg' : 'img/browse.png',
	'cancelImg' : 'img/cancel.png',
	'folder' : 'files/',
	onProgress: function() {
		$('#loader').show();
	},
	onAllComplete: function() {
		$('#loader').hide();
		$('#allfiles').load(location.href+" #allfiles>*","");
	}
});</code></pre>
<p>Notes about this javascript:</p>
<ul>
<li>Uploadify was unzipped directly from the <a href="http://www.uploadify.com/download/">download on their site</a>. To upgrade, simply replace the <em>js/uploadify/</em> folder with the newer version.</li>
<li><b>height</b> and <b>width</b> are for the respective dimentions of your custom button image &#8211; the demo&#8217;s being in <em>img/browse.png</em></li>
<li><b>folder</b> is the location where the files will be uploaded to. This is also the folder that should be listed on line #3 of the PHP code above in the <em>$src_folder</em> variable.</li>
<li><b>$(&#8217;#loader&#8217;).show();</b> and <b>$(&#8217;#loader&#8217;).hide();</b> start and stop the loading gif that many applications use now to show that something is being uploaded/processed.</li>
<li><b>$(&#8217;#allfiles&#8217;).load(location.href+&#8221; #allfiles>*&#8221;,&#8221;");</b> &#8211; replaces the whole div with the id of <em>allfiles</em> with and updated listing with the newly uploaded files in it</li>
</ul>
<img src="http://feeds.feedburner.com/~r/cagintranet/~4/JhgLg5CV31E" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.cagintranet.com/archive/how-to-implement-uploadify-into-an-application/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://www.cagintranet.com/archive/how-to-implement-uploadify-into-an-application/</feedburner:origLink></item>
		<item>
		<title>Tutorial: How to Implement Jcrop into an Application</title>
		<link>http://feedproxy.google.com/~r/cagintranet/~3/15iC4PWSfNw/</link>
		<comments>http://www.cagintranet.com/archive/how-to-use-jcrop-from-within-an-application/#comments</comments>
		<pubDate>Sat, 10 Oct 2009 20:17:19 +0000</pubDate>
		<dc:creator>Chris Cagle</dc:creator>
				<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[jQuery]]></category>

		<guid isPermaLink="false">http://www.cagintranet.com/?p=507</guid>
		<description><![CDATA[<a href=http://www.cagintranet.com/archive/how-to-use-jcrop-from-within-an-application/><img src=http://www.cagintranet.com/design/wp-content/uploads/2009/10/screenshot.jpg  class=imgtfe hspace=5 align=left width=200  border=0></a>
When creating the &#8216;image control panel&#8217; for the latest version of GetSimple, I decided to integrate the wonderful Jcrop jQuery plugin into it. Amazingly, there are very few tutorials online that show the full extent of how to use Jcrop in real world situations. The only one I found that was of use was TalkInCode&#8217;s [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.cagintranet.com/design/wp-content/uploads/2009/10/screenshot.jpg " alt="How to use Jcrop from within an Application - Tutorial" /></p>
<p>When creating the &#8216;image control panel&#8217; for the latest version of <a href="http://get-simple.info/">GetSimple</a>, I decided to integrate the wonderful <a href="http://deepliquid.com/content/Jcrop.html">Jcrop jQuery plugin</a> into it. Amazingly, there are very few tutorials online that show the full extent of how to use Jcrop in real world situations. The only one I found that was of use was <a href="http://www.talkincode.com/jcrop-extension-implementation-in-php-932.html">TalkInCode&#8217;s tutorial</a>. I did start out using that example&#8217;s ImageManipulation class, but changed it slightly so that after submission, you are brought back to the original page instead of being shown the thumbnail.</p>
<h3>Demo &amp; Features</h3>
<p><a href="http://www.cagintranet.com/code/jcrop-app/image.php?i=pittsburgh.jpg">View the Demo</a> or <a href="http://www.cagintranet.com/code/jcrop-app/jcrop-demo.zip">download the files</a>.</p>
<p>Some of the more unique features of this demo are:</p>
<ul>
<li>The aspectRatio changes to 1:1 when ctrl-Q or command-Q is pressed</li>
<li>The dimensions of the selected area are shown in an interesting way</li>
<li>Stats on the thumbnail and the current image are displayed</li>
</ul>
<h3>The Basic HTML</h3>
<p><em>The demo/download has some extra code for displaying the image stats &amp; linking of the css, js and class files.</em></p>
<pre><code class="html">&lt;!-- image for Jcrop -->
&lt;img src="&lt;?php echo $src_folder . $src; ?>" id="cropbox" />

&lt;!-- selection dimentions -->
&lt;div id="handw" class="toggle" >Selection Dimentions&lt;br />&lt;span id="picw">&lt;/span> x &lt;span id="pich">&lt;/span>&lt;/div>

&lt;!-- form that Jcrop fills in -->
&lt;form id="jcropform" action="image.php?i=&lt;?php echo $src; ?>" method="post" onsubmit="return checkCoords();">
  &lt;input type="hidden" id="x" name="x" />
  &lt;input type="hidden" id="y" name="y" />
  &lt;input type="hidden" id="w" name="w" />
  &lt;input type="hidden" id="h" name="h" />
  &lt;input type="submit" class="submit" value="Create Thumbnail" />
  &nbsp; &lt;span class="small" >&lt;em>ctrl-Q&lt;/em> or &lt;em>command-Q&lt;/em> for square&lt;/span>
&lt;/form></code></pre>
<h3>The PHP</h3>
<pre><code class="php">//the name of the passed image
//example would be:   http://myapplication.com/image.php?i=photo.jpg
$src = $_GET['i'];

//folder where the images are
$src_folder = 'images/';

//folder where the thumbnails will be saved to
//you may need to chmod 775 or 777 this folder
$thumb_folder = 'images/thumbnails/'; 

if ($_SERVER['REQUEST_METHOD'] == 'POST'){

	require('inc/imagemanipulation.php');

	$objImage = new ImageManipulation($src_folder . $src);
	if ( $objImage->imageok ) {
		$objImage->setCrop($_POST['x'], $_POST['y'], $_POST['w'], $_POST['h']);
		$objImage->save($thumb_folder . 'thumbnail.' .$src);
	} else {
		echo 'Error!';
	}
}</code></pre>
<h3>The jQuery</h3>
<pre><code class="javascript">function updateCoords(c) {
	$('#handw').show();
  $('#x').val(c.x);
  $('#y').val(c.y);
  $('#w').val(c.w);
  $('#h').val(c.h);
  $('#pich').html(c.h);
  $('#picw').html(c.w);
};

function checkCoords()
{
  if (parseInt($('#x').val())) return true;
  alert('Please select a crop region then press submit.');
  return false;
};

jQuery(document).ready(function() { 

	$(window).load(function(){
	var api = $.Jcrop('#cropbox',{
    onChange: updateCoords,
    onSelect: updateCoords,
    boxWidth: 500,
    boxHeight: 500
  });
  var isCtrl = false;
	$(document).keyup(function (e) {
		api.setOptions({ aspectRatio: 0 });
		api.focus();
		if(e.which == 17) isCtrl=false;
	}).keydown(function (e) {
		if(e.which == 17) isCtrl=true;
		if(e.which == 81 &#038;&#038; isCtrl == true) {
			api.setOptions({ aspectRatio: 1 });
			api.focus();
		}
	});
});

});
</code></pre>
<img src="http://feeds.feedburner.com/~r/cagintranet/~4/15iC4PWSfNw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.cagintranet.com/archive/how-to-use-jcrop-from-within-an-application/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://www.cagintranet.com/archive/how-to-use-jcrop-from-within-an-application/</feedburner:origLink></item>
		<item>
		<title>GetSimple CMS Launched!</title>
		<link>http://feedproxy.google.com/~r/cagintranet/~3/lT1jKRC-aBc/</link>
		<comments>http://www.cagintranet.com/archive/getsimple-cms-launched/#comments</comments>
		<pubDate>Sat, 01 Aug 2009 00:51:17 +0000</pubDate>
		<dc:creator>Chris Cagle</dc:creator>
				<category><![CDATA[Projects]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://www.cagintranet.com/?p=501</guid>
		<description><![CDATA[<a href=http://www.cagintranet.com/archive/getsimple-cms-launched/><img src=http://www.cagintranet.com/design/wp-content/uploads/2009/07/screenshot-getsimple.png class=imgtfe hspace=5 align=left width=200  border=0></a>
I haven&#8217;t posted here for a while because I&#8217;ve been working on a project called GetSimple. GetSimple is an XML based lite Content Management System. To go along with it&#8217;s best-in-class user interface, we have loaded it with features that every website needs, but with nothing it doesn&#8217;t. GetSimple is truly the simplest way to [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://get-simple.info/"><img src="http://www.cagintranet.com/design/wp-content/uploads/2009/07/screenshot-getsimple.png" /></a></p>
<p>I haven&#8217;t posted here for a while because I&#8217;ve been working on a project called GetSimple. GetSimple is an XML based lite Content Management System. To go along with it&#8217;s best-in-class user interface, we have loaded it with features that every website needs, but with nothing it doesn&#8217;t. GetSimple is truly the simplest way to manage a small-business website.</p>
<p><a href="http://get-simple.info/">Check out the site</a>, download it and check it out! It&#8217;s taken 7 months of work to get to this point, and I&#8217;m extremely proud of it. </p>
<h3>Main Features</h3>
<ol>
<li>
<p><strong>Fast as XML</strong><br />We don&#8217;t use mySQL to store our information, but instead depend on the speed and accuracy of XML. By utilizing XML, we are able stay away from introducing an extra layer of slowness and complexity associated with connecting to a mySQL database. Because GetSimple was built specifically for the small-site market, we feel this is the absolutely best option for data storage.</p>
</li>
<li>
<p><strong>You can &#8220;Undo&#8221; Almost Everything</strong><br />This feature was based off an eye-opening <a href="http://www.alistapart.com/articles/neveruseawarning">AListApart article</a> explaining how warning messages never work as planned. Because of this, we&#8217;ve included &#8220;undo&#8221; into almost  every action you can take on the site, giving you peace-of-mind for when you make those inevitable stupid mistakes.</p>
</li>
<li>
<p><strong>Easy to Learn UI</strong><br />The top priority when designing our user-interface was to make it the best in it&#8217;s class. We had the luxury of trying and testing all the competing management systems before designing ours, so we took the best out of each one &#8211; then refined it.</p>
</li>
<li>
<p><strong>Simple Installation</strong><br />The total time in setting up a website took a total of 5 minutes, from starting the FTP to finishing the setup procedure.</p>
</li>
<li>
<p><strong>Simple Theme Customization</strong><br  />We have a codex that shows which functions are available for theme customization. Our goal was not to bloat our software with hundreds of little-used theme functions, but to offer more than enough to allow for a fully customized theme.</p>
</li>
<li>
<p><strong>Designed For the Small-Site Market</strong><br /> This is one of the reasons GetSimple uses XML rather than a robust database such as mySQL. For most small businesses, their only real need is to be able to easily update their site without the need of a ton of extraneous rarely used features. GetSimple&#8217;s goal is to manage small websites efficiently and effectively.</p>
</li>
</ol>
<img src="http://feeds.feedburner.com/~r/cagintranet/~4/lT1jKRC-aBc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.cagintranet.com/archive/getsimple-cms-launched/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://www.cagintranet.com/archive/getsimple-cms-launched/</feedburner:origLink></item>
		<item>
		<title>The New &amp; Improved Way to Turn Wordpress 2.7 into a Membership Community</title>
		<link>http://feedproxy.google.com/~r/cagintranet/~3/sKX9T6Wi6E8/</link>
		<comments>http://www.cagintranet.com/archive/the-new-improved-way-to-turn-wordpress-27-into-a-membership-communit/#comments</comments>
		<pubDate>Thu, 05 Feb 2009 17:35:18 +0000</pubDate>
		<dc:creator>Chris Cagle</dc:creator>
				<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://www.cagintranet.com/?p=449</guid>
		<description><![CDATA[<a href=http://www.cagintranet.com/archive/the-new-improved-way-to-turn-wordpress-27-into-a-membership-communit/><img src=http://www.cagintranet.com/design/wp-content/uploads/2009/02/pghdesigners.jpg class=imgtfe hspace=5 align=left width=200  border=0></a>
Last March I wrote an article for WPDesigner (then subsequently republished it here) detailing the ways you could use a base install of Wordpress (then on version 2.3) into a membership directory with the help of just a few plugins. This worked, and still works beautifully for me over at my Pittsburgh Designers community site. [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.cagintranet.com/design/wp-content/uploads/2009/02/pghdesigners.jpg" alt="Pittsburgh Designers" title="Pittsburgh Designers" width="500" height="250" class="alignnone size-full wp-image-466" /></p>
<p>Last March I wrote an article for <a href="http://www.wpdesigner.com/2008/03/01/how-to-use-wordpress-as-a-membership-directory/">WPDesigner</a> (then subsequently <a href="http://www.cagintranet.com/archive/wp-membership-directory/">republished it here</a>) detailing the ways you could use a base install of Wordpress (then on version 2.3) into a membership directory with the help of just a few plugins. This worked, and still works beautifully for me over at my <a href="http://pghdesigners.com">Pittsburgh Designers community site</a>. But since writing this article new plugins have become available with the unveiling of the completely revised WP core update 2.7.</p>
<h3>Replacing the Old Plugins</h3>
<p><img src="http://www.cagintranet.com/design/wp-content/uploads/2009/02/buyapghhome.jpg" alt="Buy a Pittsburgh Home" title="Buy a Pittsburgh Home" width="500" height="250" class="alignnone size-full wp-image-463" /></p>
<p>In my previous installations I used only three plugins: <a href="http://www.dealsway.net/plugins/wp-user-manager">Dealsway&#8217;s User Manager</a> and <a href="http://www.im-web-gefunden.de/wordpress-plugins/role-manager/">IWG&#8217;s Role Manager</a>. This time around I wanted more customization and more control over what was being shown to the users. I ended up trying every plugin I could find that might have a remote chance in helping me accomplish my end objective. The following is my final list of plugins and customization tricks that I used in creating my latest membership project: <a href="http://buyapittsburghhome.com">BUYAPITTSBURGHHOME.com</a>.</p>
<div style="display:none;" class="alert">
<p><b>Notice:</b> <a href="http://buyapittsburghhome.com">Buy A Pittsburgh Home</a> is still in beta and not open to the public yet, but if you want, please feel free to register and poke around to see how things are setup. All I ask is that if anyone happens to find any problems or bugs, to please let me know. Thanks!</p>
</div>
<h3>Profile Setup &#038; Customization</h3>
<p><img src="http://www.cagintranet.com/design/wp-content/uploads/2009/02/registerplus.jpg" alt="Register Plus" title="Register Plus" width="500" height="175" class="alignnone size-full wp-image-468" /></p>
<p>While this is arguably the most important part of the membership site, I really wasn&#8217;t looking for a replacement to the User Manager plguin I was currently using. I had no problem with it, and it was a fairly easy to use plugin. On my membership tutorial, someone suggested looking at the <a href="http://skullbit.com/wordpress-plugin/register-plus/">Register Plus</a> plugin. I decided to give it a shot, and I am glad I did. While I still needed to hack the <em><strong>/wp-admin/users-edit.php</strong></em> file to get my profile fields in the order I wanted them, I was happy with the noticeable improvements this plugin had over User Manager. </p>
<p>There are many things that Register Plus does well, but I chose it for the fact that I may need some of it&#8217;s features down the road, not particularly right now. I did like the fact that it gave you the ability to replace some of the outgoing WP themed emails surrounding the registration events, but after some testing I decided that it wasn&#8217;t the best plugin to handle this. <a href="http://www.epicalex.com/new-user-email-set-up/">New User Email Setup</a> did the trick, and made the outgoing emails completely customizable.</p>
<p>I also added the old and reliable <a href="http://wordpress.org/extend/plugins/user-photo/">User Photo</a> plugin. I had installed this on many client WP directory sites, but this is the first time I used it myself. There are a ton of options, but once you find the right combination &#8211; it&#8217;s a set it and forget it type of plugin.</p>
<p><b>Plugins I Use</b></p>
<ul>
<li><a href="http://skullbit.com/wordpress-plugin/register-plus/">Register Plus</a></li>
<li><a href="http://www.epicalex.com/new-user-email-set-up/">New User Email Setup</a></li>
<li><a href="http://wordpress.org/extend/plugins/user-photo/">User Photo</a></li>
</ul>
<p><b>Plugins I Tested (but came up short)</b></p>
<ul>
<li><a href="http://www.dealsway.net/plugins/wp-user-manager">WP User Manager</a></li>
</ul>
<h3>Admin Interface &#038; Branding</h3>
<p><img src="http://www.cagintranet.com/design/wp-content/uploads/2009/02/cyc.jpg" alt="Customize Your Community" title="Customize Your Community" width="500" height="175" class="alignnone size-full wp-image-464" /></p>
<p>One of the most important things I wanted more control over this time was to have a more customizable admin section where the members enter their profile data. There are a slew of plugins that add various levels of branding the admin dashboard, but only one went to the extent I needed.</p>
<p><a href="http://www.sugarrae.com/wordpress/cyc/">Customize your Community</a> (or CYC) was created by one of the true Wordpress gurus, <a href="http://yoast.com/sugarrae-cyc/">Joost De Valk</a>. It is extremely easy to use, and works like a charm when paired with the <a href="http://www.kpdesign.net/wp-plugins/wp-hide-dashboard/">WP Hide Dashboard</a> plugin (without it, members can type in <em><b>/wp-admin/index.php</b></em> and get to your dashboard).</p>
<p>I ended up hacking the CYC plugin so I could order my custom profile fields the way I wanted them displayed, but this was just my preference, and not required at all for it to work perfectly.</p>
<p><b>Plugin I Use</b></p>
<ul>
<li><a href="http://www.sugarrae.com/wordpress/cyc/">Customize Your Community</a></li>
</ul>
<p><b>Plugins I Tested (but came up short)</b></p>
<ul>
<li><a href="http://pressingpixels.com/wordpress-custom-admin-branding">Custom Admin Branding</a></li>
<li><a href="http://bavotasan.com/tidbits/add-your-logo-to-the-wordpress-admin-and-login-page/">Add Logo to Admin</a></li>
<li><a href="http://www.jamesdimick.com/creations/easy-admin-color-schemes/">Easy Admin Color Schemes</a></li>
</ul>
<h3>Displaying Authors</h3>
<p><img src="http://www.cagintranet.com/design/wp-content/uploads/2009/02/authorpermalink.jpg" alt="Author Permalink" title="Author Permalink" width="500" height="175" class="alignnone size-full wp-image-462" /></p>
<p>As soon as I found <a href="http://dardna.com/custom-author-permalink">Custom Author Permalink</a>, I knew it was a godsend. Anyone wanting to get rid of the awful <em><strong>/author/</strong></em> permalink structure needs this plugin. The great thing about it is that you can activate the plugin just to set the permalink, then deactivate immediately afterward &#8211; it doesn&#8217;t have to always be &#8216;on&#8217; to work.</p>
<p>In my old setup, I needed to &#8216;approve&#8217; a member by creating a new post on their behalf in order for their profile page to become visible. Now, the plugin <a href="http://wordpress.org/extend/plugins/show-authors-without-posts/">Show authors without posts</a> takes care of this for me. One problem is that now that every profile is visible, I had to reverse engineer a little PHP code to check to see if certain profile fields met certain criteria, otherwise I would just do a redirect back to the site&#8217;s homepage.</p>
<p><b>Plugins I Use</b></p>
<ul>
<li><a href="http://dardna.com/custom-author-permalink">Custom Author Permalink</a></li>
<li><a href="http://wordpress.org/extend/plugins/show-authors-without-posts/">Show authors without posts</a></li>
</ul>
<p><b>Plugins I Tested (but came up short)</b></p>
<ul>
<li><a href="http://techbasedmarketing.com/plugins/">List Authors Plus</a></li>
</ul>
<h3>Wordpress Security</h3>
<p><img src="http://www.cagintranet.com/design/wp-content/uploads/2009/02/recaptcha.jpg" alt="reCAPTCHA" title="reCAPTCHA" width="500" height="175" class="alignnone size-full wp-image-467" /></p>
<p>To be honest, I didn&#8217;t have much in the way of security back when I created my original membership directory. Now, since there are a slew of great security related plugins available, I definitely made this a high priority. </p>
<p>My biggest problem was that I had a ton of spam registrations &#8211; a problem that seems to plague many Wordpress site administrators. While you can never stop a registration strictly because someone wants to look around, I found that <a href="http://www.blaenkdenum.com/wp-recaptcha/">WP-reCAPTCHA</a> took care of all the spam registrations once and for all. Although the Register Plus plugin gave me the ability to implement CAPTCHA, this plugin gave me more customizable options.</p>
<p>Another problem of mine was that although I relied on <a href="http://www.im-web-gefunden.de/wordpress-plugins/role-manager/">Role Manager</a> (and I still do) to restrict a member&#8217;s movement within the admin panel, I realized that there could be plenty going on in the background that I had no clue about. In came <a href="http://urbangiraffe.com/plugins/audit-trail/">Audit Trail</a> &#8211; a plugin that tracks every movement and attempt of a logged in user. The only thing I would change is for it to do is to track what was changed when a member updated his or her profile. Audit Trail already tries to capture this, but when you start adding custom profile fields it loses its functionality.</p>
<p>As I mentioned above, I still use IWG&#8217;s Role Manager plugin to restrict which actions can be done by logged in members. I teamed this with the already mentioned WP Hide Dashboard plugin, and my users can now only see what I want them to see.</p>
<p>I also installed <a href="http://semperfiwebdesign.com/plugins/wp-security-scan/">WP Security Scan</a> just to see what I could find &#8211; which at the time was nothing, but I figure this will end up finding its way onto my regular checklist.</p>
<p><b>Plugins I Use</b></p>
<ul>
<li><a href="http://www.blaenkdenum.com/wp-recaptcha/">WP-reCAPTCHA</a></li>
<li><a href="http://urbangiraffe.com/plugins/audit-trail/">Audit Trail</a></li>
<li><a href="http://www.im-web-gefunden.de/wordpress-plugins/role-manager/">Role Manager</a></li>
<li><a href="http://www.kpdesign.net/wp-plugins/wp-hide-dashboard/">WP Hide Dashboard</a></li>
<li><a href="http://semperfiwebdesign.com/plugins/wp-security-scan/">WP Security Scan</a></li>
</ul>
<p><b>Plugins I Tested (but came up short)</b></p>
<ul>
<li><a href="http://skullbit.com/wordpress-plugin/register-plus/">Register Plus</a></li>
</ul>
<h3>Miscellaneous &#038; Vital Plugins</h3>
<p><img src="http://www.cagintranet.com/design/wp-content/uploads/2009/02/misc-reglevel.jpg" alt="RegLevel" title="RegLevel" width="500" height="175" class="alignnone size-full wp-image-465" /></p>
<p><b>Statistics:</b> For this project, I wanted to see how far I could integrate a statistics package into the Wordpress backend. I tried out <a href="http://blog.matrixagents.org/wp-plugins/">StatPress Reloaded</a> and <a href="http://tantannoodles.com/toolkit/wordpress-reports/">Wordpress Reports</a>, but in the end kept with my reliable stalwarts Statcounter and Google Analytics. I think the next plugin I want to test is for <a href="http://skullbit.com/wordpress-plugin/minty-fresh/">Mint</a>.</p>
<p><b>Database Backups:</b> Backups are essential to preserving an online community in case of a disaster and should be scheduled to run on at least a weekly basis. For me, I originally started using <a href="http://lesterchan.net/portfolio/programming/php/">WP-DBManager</a>, but after finding that it never really took a complete backup (presumably because of my horrible host) I switched to <a href="http://www.ilfilosofo.com/blog/wp-db-backup">WordPress Database Backup</A> and never looked back.</p>
<p><b>SEO:</b> I am not sure how useful sitemaps are to the search engines, but I figured creating one wouldn&#8217;t hurt. I only tried <a href="http://www.arnebrachhold.de/redir/sitemap-home/">Google XML Sitemaps</a>, and stuck with it because looked to be the best right from the start. I also chose to install <a href="http://techblissonline.com/platinum-seo-pack/">Platinum SEO Pack</a> for the flexibility it gave when creating the page titles.</p>
<p><b>Development:</b> <a href="http://wordpress.designpraxis.at/plugins/wp-phpmyadmin/">WP-phpMyAdmin</a> and <a href="http://gaarai.com/wp-easy-uploader/">WP Easy Uploader</a> were essential for me when I was doing development work on the site. With these two, my time in development was greatly reduced. </p>
<p><b>Other Usefuls:</b> Here is the rest of the list I used when creating my community: <a href="http://ocaoimh.ie/wp-super-cache/">WP Super Cache</a>, <a href="http://www.thedailyblitz.org/weasels-html-bios">Weasel&#8217;s HTML Bios</a>, <a href="http://www.bin-co.com/tools/wordpress/plugins/article_templates/">Article Templates</a>, <a href="http://www.webmaster-source.com/wp125-ad-plugin-wordpress/">WP125</a>, <a href="http://www.cagintranet.com/archive/wp-components-plugin/">WP-Components</a></p>
<p><b>Very Promising:</b> These are quality plugins that I just don&#8217;t have a use for yet. They are ones I want to keep in my back pocket just incase I ever have a need for them: <a href="http://simplepie.org/wiki/plugins/wordpress/simplepie_plugin_for_wordpress">SimplePie Plugin for WordPress</a>, <a href="http://jumping-duck.com/wordpress/reglevel/">RegLevel</a>, <a href="http://smallwebsitehost.com/wordpress-newsletter-plugin/wordpress">Wordpress Newsletter</a>, <a href="http://www.chrisabernethy.com/wordpress-plugins/member-access/">Member Access</a></p>
<img src="http://feeds.feedburner.com/~r/cagintranet/~4/sKX9T6Wi6E8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.cagintranet.com/archive/the-new-improved-way-to-turn-wordpress-27-into-a-membership-communit/feed/</wfw:commentRss>
		<slash:comments>53</slash:comments>
		<feedburner:origLink>http://www.cagintranet.com/archive/the-new-improved-way-to-turn-wordpress-27-into-a-membership-communit/</feedburner:origLink></item>
		<item>
		<title>Wordpress Plugin: WP-Components</title>
		<link>http://feedproxy.google.com/~r/cagintranet/~3/928ReGiMlto/</link>
		<comments>http://www.cagintranet.com/archive/wp-components-plugin/#comments</comments>
		<pubDate>Sun, 07 Dec 2008 15:57:48 +0000</pubDate>
		<dc:creator>Chris Cagle</dc:creator>
				<category><![CDATA[Projects]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://www.cagintranet.com/?p=427</guid>
		<description><![CDATA[<a href=http://www.cagintranet.com/archive/wp-components-plugin/><img src=http://www.cagintranet.com/design/wp-content/uploads/2008/12/components-image.jpg class=imgtfe hspace=5 align=left width=200  border=0></a>
WP-Components is a new Wordpress plugin that allows theme developers to embed a short template tag instead of short bits of text and code that the website owner might want to change later on.
Before creating this plugin, if I had semi-static text within a theme I was developing (such as a short &#8220;About Me&#8221; blurb) [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.cagintranet.com/design/wp-content/uploads/2008/12/components-image.jpg" alt="" title="components-image" width="500" height="100" class="alignnone size-full wp-image-433" /></p>
<p><strong>WP-Components</strong> is a new Wordpress plugin that allows theme developers to embed a short template tag instead of short bits of text and code that the website owner might want to change later on.</p>
<p>Before creating this plugin, if I had semi-static text within a theme I was developing (such as a short &#8220;About Me&#8221; blurb) I would either embed the text directly into the template page (sidebar.php) or I would create a &#8220;Page&#8221; within Wordpress and use the <a href="http://www.vtardia.com/improved-include-page/">iinclude plugin</a> to &#8220;include&#8221; that page. That way, if the site owner ever wanted to change that text, he or she would just have to edit that particular page.</p>
<p>That worked OK, but there were a few quirks to it. First, the pages would show up in search results. I could get around it by installing a second plugin called <a href="http://wordpress.org/extend/plugins/search-everything/">Search Everything</a> &#8211; that would allow you to exclude certain pages from the search results. But needing to use both these plugins wasn&#8217;t ideal for such a simple problem. That&#8217;s why I developed <strong>WP-Components</strong></p>
<h3>Download</h3>
<p><a href="http://wordpress.org/extend/plugins/wp-components/">Download latest stable version from Wordpress Extend</a></p>
<h3>Installation</h3>
<ol>
<li>Upload wp-coponents.php to your wp-content/plugins/ folder.</li>
<li>Go to Settings->WP-Components to set new components.</li>
<li>Add the template tag shown below into your theme&#8217;s template files.</li>
</ol>
<h3>Usage</h3>
<p>Template tag syntax:</p>
<pre><code class="php">&lt;?php get_component('component_slug'); ?&gt;</code></pre>
<p>Template tag &#8220;safe&#8221; syntax:</p>
<pre><code class="php">&lt;?php if (function_exists('get_component')) { get_component('component_slug'); } ?&gt;</code></pre>
<ul>
<li><strong>component_slug:</strong> <em>[required]</em> The slug given within this plugin&#8217;s settings page.</li>
</ul>
<h3>Requirements</h3>
<ul>
<li>Only tested on <a href="http://wordpress.org/download">Wordpress 2.5</a>+, but there is no reason it should not work on any older versions.</li>
</ul>
<h3>FAQ</h3>
<ul>
<li>
<p><strong>Where can this template tag go within my theme?</strong><br />
Anywhere. Literally&#8230;</p>
</li>
<li>
<p><strong>How can I ensure this plugin doesnt break my theme?</strong><br />
The best way would be to use the safe template tag that first checks to see if the function exists before it calls it. See &#8220;Usage&#8221; above for details.</p>
</li>
</ul>
<h3>Version Changelog</h3>
<ul>
<li><strong>Ver 0.7</strong> &#8211; 2/23/2009 &#8211; Fixed javascript issues with the WP image uploader and other plugins.</li>
<li><strong>Ver 0.5</strong> &#8211; 12/11/2008 &#8211; Added Expand/Collapse features for each component, and a few minor style fixes for both the 2.7 and the 2.5.X versions of Wordpress.</li>
<li><strong>Ver 0.2</strong> &#8211; 12/7/2008 &#8211; Added deletion confirmation, components are sorted properly, and an &#8216;undo&#8217; function in case of an oops.</li>
<li><strong>Ver 0.1</strong> &#8211; 12/5/2008 &#8211; Plugin developed</li>
</ul>
<h3>ToDo List</h3>
<ul>
<li><strong>TinyMCE</strong> &#8211; Add TinyMCE support for those that have enabled it within their profiles.</li>
<li><strong>Nonce</strong> &#8211; Add <a href="http://codex.wordpress.org/Wordpress_Nonce_Implementation">nonce</a> protection to all procedures.</li>
<li><strong>i18n Support</strong> &#8211; Add internationalization support for the plugin.</li>
</ul>
<img src="http://feeds.feedburner.com/~r/cagintranet/~4/928ReGiMlto" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.cagintranet.com/archive/wp-components-plugin/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		<feedburner:origLink>http://www.cagintranet.com/archive/wp-components-plugin/</feedburner:origLink></item>
		<item>
		<title>How to: Sync Emails between your Blackberry and Outlook</title>
		<link>http://feedproxy.google.com/~r/cagintranet/~3/1Qm8IyMpYyQ/</link>
		<comments>http://www.cagintranet.com/archive/how-to-sync-emails-between-your-blackberry-and-outlook/#comments</comments>
		<pubDate>Wed, 22 Oct 2008 01:31:15 +0000</pubDate>
		<dc:creator>Chris Cagle</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[Tutorials]]></category>

		<guid isPermaLink="false">http://www.cagintranet.com/?p=385</guid>
		<description><![CDATA[<a href=http://www.cagintranet.com/archive/how-to-sync-emails-between-your-blackberry-and-outlook/><img src=http://www.cagintranet.com/design/wp-content/uploads/2008/10/bbcurve.jpg class=imgtfe hspace=5 align=left width=200  border=0></a>
When I started my home business, I had no way of checking my email unless I was physically at home. This worked for about a year, but after not responding to some important emails in a timely fashion, I knew I had to change something.
In came my first Blackberry Curve. 
I loved it, and it [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.cagintranet.com/design/wp-content/uploads/2008/10/bbcurve.jpg" alt="" title="Blackberry Curve" class="alignnone size-full wp-image-393" /></p>
<p>When I started my home business, I had no way of checking my email unless I was physically at home. This worked for about a year, but after not responding to some important emails in a timely fashion, I knew I had to change something.</p>
<p>In came my first <a href="http://na.blackberry.com/eng/devices/device-detail.jsp?navId=H0,C221,P483">Blackberry Curve</a>. </p>
<p>I loved it, and it was a breeze to setup using the setup wizard that came on the device. The only problem, I noticed, was that there was no easy way to sync emails between my Outlook 2003 (insert your desktop client here) and my Blackberry. Actually I read on many forums that it was virtually impossible without a <a href="http://en.wikipedia.org/wiki/BlackBerry_Enterprise_Server">BES server</a>.</p>
<p>Blackberry apparently only allows you to sync your tasks, calendar and contacts though the Desktop Manager &#8211; nothing else. The important thing to me were to have the emails synced, but forum after forum, I found people telling me it couldn&#8217;t be done.</p>
<h3>Moving to Gmail</h3>
<p><img src="http://www.cagintranet.com/design/wp-content/uploads/2008/10/gmailsetup.gif" alt="" title="Gmail" class="alignnone size-full wp-image-393" /></p>
<p>I lived with the fact that my Blackberry had no idea what my Outlook was doing and vice versa for almost 5 months until I was forced to move my whole email setup from <a href="http://www.godaddy.com/">GoDaddy&#8217;s</a> servers into <a href="http://www.google.com/a/cpanel/domain/new">Google Apps</a> because of GoDaddy&#8217;s horrible email limitations.</p>
<p>Moving my <em>admin @ cagintranet.com</em> email address was pretty simple using Google Apps for Business. It is a free service, and all it took was setting up a couple new CNAME entries within GoDaddy&#8217;s domain control panel (which Google had tutorials walking me through the whole process). </p>
<h3>Outlook Setup</h3>
<p><img src="http://www.cagintranet.com/design/wp-content/uploads/2008/10/outlook.jpg" alt="" title="Outlook" class="alignnone size-full wp-image-393" /></p>
<p>Setting up Outlook was pretty easy too, and I originally settled on connecting to my new Gmail account via regular old POP3 access, but later switched it to <a href="http://en.wikipedia.org/wiki/Internet_Message_Access_Protocol">IMAP</a>. I did this because by using IMAP, I was able to keep what I did in Outlook synced with what Gmail saw. If I moved an email into a folder within Outlook, it was moved into a corresponding &#8220;label&#8221; within Gmail. When I sent an email, it was placed in my Outlook&#8217;s Sent Itmes folder as well as the Sent Items in Gmail. Anyway, you get the hint, so after taking the next hour or so moving all my old emails from Outlook into my new Gmail account, I was ready to reset up my Blackberry to connect to Google&#8217;s servers.</p>
<p><strong>Disclaimer:</strong> You can use any desktop client (Mail, Thunderbird, etc.) to interface between Gmail and your computer &#8211; I have Outlook, which is why I used it in this example. </p>
<h3>Blackberry Setup</h3>
<p>Because I switched email servers, I had to go into the &#8220;Personal Email Set Up&#8221; icon on my Blackberry and delete the <em>admin @ cagintranet</em> account that was already there.</p>
<p>Using the default setup wizard when adding a new account to the Blackberry, uses the <a href="http://en.wikipedia.org/wiki/Pop3">POP3 connection protocol</a>. POP3 is fine, but it is what was stopping me from having any sort of two-way email sync with Outlook. I decided to poke around the internet for an alternative, and lo and behold, I found a Google article <a href="http://mail.google.com/support/bin/answer.py?hl=en&#038;answer=78882">detailing the steps needed to setup a Blackberry via IMAP</a>.</p>
<p><img src="http://www.cagintranet.com/design/wp-content/uploads/2008/10/gmail.gif" alt="" title="Gmail" class="alignnone size-full wp-image-393" /></p>
<p>The steps in that article are a little long (22 in all), but they were easy to follow and the outcome was perfect. I now have my Outlook desktop client syncing with my Gmail account which also syncs with my Blackberry &#8211; all in harmonium. I realize that this only helps a select few of you out there, but I thought it could be helpful enough that I wanted to post it here.</p>
<img src="http://feeds.feedburner.com/~r/cagintranet/~4/1Qm8IyMpYyQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.cagintranet.com/archive/how-to-sync-emails-between-your-blackberry-and-outlook/feed/</wfw:commentRss>
		<slash:comments>24</slash:comments>
		<feedburner:origLink>http://www.cagintranet.com/archive/how-to-sync-emails-between-your-blackberry-and-outlook/</feedburner:origLink></item>
		<item>
		<title>10 Little Known Wordpress Theme Tricks</title>
		<link>http://feedproxy.google.com/~r/cagintranet/~3/o2ZqMW4ut3Y/</link>
		<comments>http://www.cagintranet.com/archive/10-little-known-wordpress-theme-tricks/#comments</comments>
		<pubDate>Tue, 16 Sep 2008 12:13:37 +0000</pubDate>
		<dc:creator>Chris Cagle</dc:creator>
				<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://www.cagintranet.com/?p=95</guid>
		<description><![CDATA[Wordpress will never cease to amaze me. I have been working with Wordpress for years now, designing and programming projects like Pittsburgh Designers, adClustr and this site &#8212; and I am always learning new ways to improve the Wordpress experience. This is my list of the hidden theme tricks I&#8217;ve amassed over the years. 
1. [...]]]></description>
			<content:encoded><![CDATA[<p>Wordpress will never cease to amaze me. I have been working with Wordpress for years now, designing and programming projects like <a href="http://pghdesigners.com/">Pittsburgh Designers</a>, <a href="http://adclustr.com/">adClustr</a> and this site &#8212; and I am always learning new ways to improve the Wordpress experience. This is my list of the hidden theme tricks I&#8217;ve amassed over the years. </p>
<h3><strong>1. </strong>Multiple &amp; Dynamic Sidebar Templates</h3>
<p>Does trying to remember the TEMPLATEPATH syntax get to you sometimes? Do you think this is way too complicated?</p>
<pre><code class="php">&lt;?php include (TEMPLATEPATH . &#39;/sidebar-sample.php&#39;); ?&gt;</code></pre>
<p>Ok, maybe not, but now starting in Wordpress 2.5, we can use this code to include the same exact template file (<strong><em>sidebar-sample.php</em></strong>):</p>
<pre><code class="php">&lt;?php get_sidebar(&#39;sample&#39;); ?&gt;</code></pre>
<p>Now that we know this, it is easy to create a much more streamlined sidebar based on categories&#8230;</p>
<pre><code class="php">&lt;?php
    //to be able to use this outside the_Loop
    if ( have_posts() ) { the_post(); rewind_posts(); } 

    if ( in_category(&#39;1&#39;) ) {
        get_sidebar(&#39;cat1&#39;);
        //gets sidebar-cat1.php
    } elseif ( in_category(&#39;2&#39;) ) {
        get_sidebar(&#39;cat2&#39;);
        //gets sidebar-cat2.php
    } elseif ( in_category(&#39;3&#39;) ) {
        get_sidebar(&#39;cat3&#39;);
        //gets sidebar-cat3.php
    } elseif ( in_category(&#39;4&#39;) || in_category(&#39;5&#39;) || in_category(&#39;6&#39;) ) {
        get_sidebar(&#39;catRest&#39;);
        //gets sidebar-catRest.php
    } else {
        get_sidebar()
        //gets sidebar.php
    }
?&gt;</code></pre>
<p>or by page type&#8230;</p>
<pre><code class="php">&lt;?php
	//to be able to use this outside the_Loop
	if ( have_posts() ) { the_post(); rewind_posts(); }

	if ( is_home() || is_front_page() ) {
		get_sidebar(&#39;home&#39;);
		//gets sidebar-home.php
	} elseif ( is_archive() ) {
		get_sidebar(&#39;archive&#39;);
		//gets sidebar-archive.php
	} elseif ( is_page() ) {
		get_sidebar(&#39;page&#39;);
		//gets sidebar-page.php
	} elseif ( is_single() ) {
		get_sidebar(&#39;single&#39;);
		//gets sidebar-single.php
	} else {
		get_sidebar()
		//gets sidebar.php
	}
?&gt;</code></pre>
<h3><strong>2. </strong>If Comments are Allowed&#8230;</h3>
<p>On a recent project, I had to find a way to display comments if they were enabled for the specific post, but otherwise display no evidence that comments ever existed on the page. I ended up wrapping the <strong><em>comments.php</em></strong> template call like this and it worked perfectly.</p>
<pre><code class="php">&lt;!-- Added to show no evidence of comments when
the status has been changed to allow no comments --&gt;
&lt;?php if (&#39;open&#39; == $post-&gt;comment_status) : ?&gt;
	&lt;div class=&quot;commentsblock&quot;&gt;
		&lt;?php comments_template(); ?&gt;
	&lt;/div&gt;
&lt;?php endif; // If Comments are Open Wrapper ?&gt;</code></pre>
<h3><strong>3. </strong>Category Slogans</h3>
<p>Some blogs not only show what category a post belongs to, but also offer up a witty slogan to go along with it. You could always just name your category &#8220;The Amazing Open Source PHP Language &#8221; instead of simply &#8220;PHP&#8221;, but how extensible is that?</p>
<p> What you can do however which is just as easy is to add the slogan as the description of the category. Then you can replace your get_categories() function call with</p>
<pre><code class="php">&lt;a href=&quot;&lt;?php echo get_category_link($cat);?&gt;&quot; title=&quot;View all &lt;?php single_cat_title(&#39;prefix&#39;, &#39;display&#39;); ?&gt; Posts&quot; &gt;&lt;?php echo category_description($cat); ?&gt;&lt;/a&gt;</code></pre>
<h3><strong>4. </strong>Styling the Current Category</h3>
<p>Markup and styling of category lists is easy now that Wordpress automatically inserts a <strong><em>class=&#8221;current&#8221;</em></strong> on the category used in your post in your archives list  when using the template tag <strong><em>wp_list_categories()</em></strong>. It doesn&#8217;t get any easier than that &#8211; all we need to do is add some CSS to your stylesheet, and this is working.</p>
<pre><code class="css">.current {
color:#cc0000;
font-weight:bold;
}</code></pre>
<h3><strong>5. </strong>Return the Numbers of Comments, don&#8217;t Echo</h3>
<p>I hate when functions assume that you want the data returned to you in the form of an echo. The template tag <strong>&lt;?php comments_number(&#39;0&#39;,&#39;1 &#39;,&#39;%&#39;) ?&gt;</strong> automatically echos it&#8217;s data which means you can&#8217;t use it in any math computations or other functions as a variable. This is where we can use this undocumented function:</p>
<pre><code class="php">&lt;?php get_comments_number(); ?&gt;</code></pre>
<p>Now you can do something slightly different with your comments count like use it to <a href="http://www.cagintranet.com/archive/generating-an-automatic-popular-post-list-via-delicious-or-digg-in-wordpress">generate each post&#8217;s popularity score</a>.</p>
<h3><strong>6. </strong>The Title without any Markup</h3>
<p>This happened to me once. I was redesigning a site that used markup within the blog post&#8217;s title;  &#8220;<em>Little Known &lt;strong&gt;Wordpress&lt;/strong&gt; Theme Tricks</em>&#8220;. Knowing this template tag, my life would have been made much easier. </p>
<p>Instead of this:</p>
<pre><code class="html">&lt;h3&gt;&lt;a href=&quot;&lt;?php the_permalink(); ?&gt;&quot; title=&quot;Permalink to &lt;?php the_title(); ?&gt;&quot;&gt;&lt;?php the_title(); ?&gt;&lt;/a&gt;&lt;/h3&gt;</code></pre>
<p>&#8230;use this:</p>
<pre><code class="html">&lt;h3&gt;&lt;a href=&quot;&lt;?php the_permalink(); ?&gt;&quot; title=&quot;Permalink to &lt;?php the_title_attribute(); ?&gt;&quot;&gt;&lt;?php the_title_attribute(); ?&gt;&lt;/a&gt;&lt;/h3&gt;</code></pre>
<p>This template tag provides a &#8216;clean&#8217; version of the title by stripping HTML tags and converting certain characters (including quotes) to their character entity equivalent.</p>
<h3><strong>7. </strong>Different Layout for Page 2+</h3>
<p>Here we can have a different template for any page that is not &#8220;page 1.&#8221; Place this code anywhere within the Loop. (Replace the comments with the code you want displayed on either page 1 or beyond)</p>
<pre><code class="php">&lt;?php if ( !$paged &lt; 2 ) {
  //display code for only page 2 or higher
} else {
  //display page 1 code
} ?&gt;</code></pre>
<h3><strong>8. </strong>Replace <em>the_excerpt</em> without a Plugin</h3>
<p>Instead of using the <a href="http://codex.wordpress.org/Template_Tags/the_excerpt">the_excerpt</a> template tag, <a href="http://codex.wordpress.org/Template_Tags/the_content_rss">the_content_rss</a>. It allows for a little more flexibility, without the need of a plugin (no matter how great it is). This won&#8217;t do everything that <a href="http://guff.szub.net/2005/02/26/the_excerpt-reloaded/">gszub&#8217;s excerpt reloaded plugin</a> does, but it will for someone that just wants a longer or shorter default excerpt.</p>
<pre><code class="php">&lt;?php the_content_rss(&#39;&#39;, TRUE, &#39;&#39;, 55); ?&gt;</code></pre>
<h3><strong>9. </strong>Built in Email Obfuscator</h3>
<p>Hate when spam bots get a hold of your email? Use this template tag to help obfuscate it.</p>
<pre><code class="php">&lt;?php echo antispambot(get_the_author_email()); ?&gt;</code></pre>
<h3><strong>10. </strong>Dedicated Options Page within the Dashboard</h3>
<p>This is not a theme trick, but I found it very interesting none-the-less. This is a hidden admin page that displays the whole wp_options database table. Go to your dashboard and change the URL to match this:</p>
<p><strong>../wp-admin/options.php</strong></p>
<img src="http://feeds.feedburner.com/~r/cagintranet/~4/o2ZqMW4ut3Y" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.cagintranet.com/archive/10-little-known-wordpress-theme-tricks/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		<feedburner:origLink>http://www.cagintranet.com/archive/10-little-known-wordpress-theme-tricks/</feedburner:origLink></item>
		<item>
		<title>How to Create your own BlogCatalog Widget via their API</title>
		<link>http://feedproxy.google.com/~r/cagintranet/~3/WJXJ9fXXWZQ/</link>
		<comments>http://www.cagintranet.com/archive/how-to-create-your-own-blogcatalog-widget-via-their-api/#comments</comments>
		<pubDate>Thu, 21 Aug 2008 04:00:25 +0000</pubDate>
		<dc:creator>Chris Cagle</dc:creator>
				<category><![CDATA[API]]></category>
		<category><![CDATA[Tutorials]]></category>

		<guid isPermaLink="false">http://www.cagintranet.com/?p=248</guid>
		<description><![CDATA[<a href=http://www.cagintranet.com/archive/how-to-create-your-own-blogcatalog-widget-via-their-api/><img src=http://www.cagintranet.com/design/wp-content/uploads/2008/07/bc-main.jpg class=imgtfe hspace=5 align=left width=200  border=0></a>
When releasing the first version of my WP-SocialCount Wordpress plugin a while back, an interested visitor asked if I would be so kind as to include a way to reshape the BlogCatalog widget with the next release of the plugin. I had every intention of doing that until I saw just how much would have [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.cagintranet.com/design/wp-content/uploads/2008/07/bc-main.jpg" alt="" title="Blog Catalog" width="500" height="171" class="alignnone size-full wp-image-254" /></p>
<p>When releasing the first version of my <a href="http://www.cagintranet.com/archive/wp-socialcount-plugin/">WP-SocialCount Wordpress plugin</a> a while back, <a href="http://45caliberweb.com/">an interested visitor</a> asked if I would be so kind as to include a way to reshape the <a href="http://www.blogcatalog.com/">BlogCatalog</a> widget with the next release of the plugin. I had every intention of doing that until I saw just how much would have to be changed in my plugin to accommodate this &#8211; so I decided to write this instead.</p>
<h3>Current BlogCatalog Widgets</h3>
<p>Currently, the list of <a href="http://www.blogcatalog.com/buttons.php">widgets that BlogCatalog provides</a> it&#8217;s users is pretty meager. Hopefully this tutorial will allow it&#8217;s members to promote themselves a little easier (and in better style!) than before.</p>
<p><img src="http://www.cagintranet.com/design/wp-content/uploads/2008/07/bc-exitingwidgetsgif.gif" alt="" title="BC\&#039;s Exiting Widgets" width="500" height="348" class="alignnone size-full wp-image-253" /></p>
<h3>Step 1: Get your API Key</h3>
<p>To get your API key, all you need to do is <a href="http://www.blogcatalog.com/">sign in</a>, and go to it&#8217;s <a href="http://www.blogcatalog.com/api/">developers page</a>. A couple sections down, you will see something like the image below. Write down your key and save it for later.</p>
<p><img src="http://www.cagintranet.com/design/wp-content/uploads/2008/07/bcapi-key.gif" alt="" title="Get the API Key" width="500" height="100" class="alignnone size-full wp-image-252" /></p>
<h3>Step 2: Construct the API Calls</h3>
<p>In order to make the API call, we need to know the structure that BlogCatalog requires the calls to be in. Looking at their <a href="http://www.blogcatalog.com/api/">developers page</a>, we see that they only have two types of calls. One is for gathering <strong>User</strong> data and the other is for getting <strong>Blog</strong> data.</p>
<p>We are going to start off using the User data api call because this should give us quite a bit of the information we need right off the bat.</p>
<p>The structure as outlined by their documentation is: <strong>http://api.blogcatalog.com/getinfo?bcwsid=[apikey]&#038;username=[username]</strong></p>
<p>Looking over this call I see that the only thing we don&#8217;t currently have is the <strong>[username]</strong>. Remember, we got the <strong>[apikey]</strong> back in Step 1.</p>
<h3>Step 3: Set Initial Variables</h3>
<p>To make our coding as easy as possible, lets set some variables right off the bat so that we can reference them anytime we need their data later on.</p>
<p><em><strong>FYI:</strong> I will be adding each new step on top of each previous step so that you can see how we build the application&#8230;</em></p>
<pre><code class="php">//Setting variables
$api = &quot;xxxxxxxxxx&quot;;		//Your API key
$username = &quot;ccagle8&quot;; 	//Your username</code></pre>
<p>FYI: I X&#8217;d out my api key, but you can easily insert your own key in here&#8230;</p>
<h3>Step 4: Use PHP to Capture Your Data</h3>
<p>Since BlogCatalog returns all their data in the form of XML (their documentation didn&#8217;t state this, but it&#8217;s the format their examples are in, so let&#8217;s run with that) we will use the <a href="http://www.php.net/simplexml_load_file">simplexml_load_file</a> php function to load the file into the variable <strong>$userfeeddata</strong>.</p>
<pre><code class="php">//Setting variables
$api = &quot;xxxxxxxxxx&quot;;		//Your API key
$username = &quot;ccagle8&quot;; 	//Your username

//Pulling API user feed data
$userfeeddata = simplexml_load_file (&quot;http://api.blogcatalog.com/getinfo?bcwsid=$api&amp;username=$username&quot;);</code></pre>
<h3>Step 5: Pull That Data Into Variables</h3>
<p>After loading that file of data into our <strong>$userfeeddata</strong> variable, we can start pulling the information we need out. You can see below that I am pulling the <em>avatar</em> and <em>url</em> from this data. How I realize the hierarchy of the data is done by doing a <a href="http://www.php.net/print_r">print_r</a> command on the <strong>$userfeeddata</strong> variable. </p>
<pre><code class="php">print_r ($userfeeddata);</code></pre>
<p>I usually add this line of code in right after we load the data, and then comment it out once I have everything that I need. After analyzing the print_r output, this is what I came up with:</p>
<pre><code class="php">//Setting variables
$api = &quot;xxxxxxxxxx&quot;;		//Your API key
$username = &quot;ccagle8&quot;; 	//Your username

//Pulling API user feed data
$userfeeddata = simplexml_load_file (&quot;http://api.blogcatalog.com/getinfo?bcwsid=$api&amp;username=$username&quot;);
//print_r ($userfeeddata);

//Loading that data into variables for later
$avatar = $userfeeddata-&gt;result-&gt;avatar;
$url = $userfeeddata-&gt;result-&gt;weblogs-&gt;weblog-&gt;url;</code></pre>
<h3>Step 6: Use this Data for the Second of our API Calls</h3>
<p>back in Step 2 we found that BC gives us two types of API calls. We already used the User data feed, but now we will make use of the Blog data feed: <strong>http://api.blogcatalog.com/bloginfo?bcwsid=[apikey]&#038;url=[blog url]</strong> </p>
<p>Just as before, we already have the <strong>[apikey]</strong> value, but we don&#8217;t yet have the <strong>[blog url]</strong>. Actually we do, and it is in the form of <strong>$url</strong>, which we got in Step 5. So, lets make another call to the API, only this time using the one to get Blog information: </p>
<pre><code class="php">//Setting variables
$api = &quot;xxxxxxxxxx&quot;;		//Your API key
$username = &quot;ccagle8&quot;; 	//Your username

//Pulling API user feed data
$userfeeddata = simplexml_load_file (&quot;http://api.blogcatalog.com/getinfo?bcwsid=$api&amp;username=$username&quot;);

//Loading that data into variables for later
$avatar = $userfeeddata-&gt;result-&gt;avatar;
$url = $userfeeddata-&gt;result-&gt;weblogs-&gt;weblog-&gt;url;

//Pulling API blog feed data
$blogfeeddata = simplexml_load_file (&quot;http://api.blogcatalog.com/bloginfo?bcwsid=$api&amp;url=$url&quot;);</code></pre>
<p>Using the print_r command again, I find a some more data that I want to pull out to include in our new widget.</p>
<pre><code class="php">//Setting variables
$api = &quot;xxxxxxxxxx&quot;;		//Your API key
$username = &quot;ccagle8&quot;; 	//Your username

//Pulling API user feed data
$userfeeddata = simplexml_load_file (&quot;http://api.blogcatalog.com/getinfo?bcwsid=$api&amp;username=$username&quot;);

//Loading that data into variables for later
$avatar = $userfeeddata-&gt;result-&gt;avatar;
$url = $userfeeddata-&gt;result-&gt;weblogs-&gt;weblog-&gt;url;

//Pulling API blog feed data
$blogfeeddata = simplexml_load_file (&quot;http://api.blogcatalog.com/bloginfo?bcwsid=$api&amp;url=$url&quot;);

//Loading that data into variables for later
$tags = $blogfeeddata-&gt;result-&gt;weblog-&gt;tags-&gt;tag;
$categories = $blogfeeddata-&gt;result-&gt;weblog-&gt;categories-&gt;category;
$bcurl = $blogfeeddata-&gt;result-&gt;weblog-&gt;bcurl;
$views = $blogfeeddata-&gt;result-&gt;weblog-&gt;views;
$rank = $blogfeeddata-&gt;result-&gt;weblog-&gt;rank;
$friends = $blogfeeddata-&gt;result-&gt;weblog-&gt;neighborhood-&gt;user;
$viewers = $blogfeeddata-&gt;result-&gt;weblog-&gt;recent_viewers-&gt;user;</code></pre>
<h3>Step 7. Echoing the Data back to the Page</h3>
<p>We have all our data mining complete, so now we can focus on sending this it out to our web page.</p>
<p>Here we are echoing out some of the user information that we received during the two API calls we did. You can see that we are showing your Avatar, which is linked to your BlogCatalog page, and your site&#8217;s number of views and rank. </p>
<pre><code class="php">//Echos out User Information
echo &quot;&lt;a href=\&quot;&quot;. $bcurl .&quot;\&quot;&gt;&lt;img src=\&quot;&quot;. $avatar .&quot;\&quot; alt=\&quot;View &quot;. $username .&quot;&#39;s BlogCatalog Profile\&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&quot;;
echo &quot;Views: &quot;. $views .&quot;&lt;br /&gt;&quot;;
echo &quot;Rank: &quot;. $rank .&quot;&lt;br /&gt;&quot;;</code></pre>
<p>The next data we want to show are the tags and categories of the blog in question. To do this, we can use a <a href="http://www.php.net/foreach">foreach</a> loop that will cycle through each tag and category and create a link back to the BlogCatalog page for each one. </p>
<p><strong>Hint:</strong> You can see that I had to sanitize the variables by converting all letters to lowercase and replace spaces with underscores in order for them to work correctly in the URL.</p>
<pre><code class="php">//Cycle through and display tags
	echo &quot;Tags:&quot;;
	$set = 0;
	foreach ($tags as $i =&gt; $tag) {
		if($set &lt; $limit){
			echo &quot;&lt;a href=\&quot;http://www.blogcatalog.com/tag/&quot;. strtolower($tag) . &quot;\&quot;&gt;&quot;. $tag .&quot;&lt;/a&gt; &quot;;
		}
		$set  ;
	}

	echo &quot;&lt;br /&gt;&quot;;

	//Cycle through and display categories
	echo &quot;Categories: &quot;;
	$set = 0;
	foreach ($categories as $i =&gt; $cat) {
		if($set &lt; $limit){
			echo &quot;&lt;a href=\&quot;http://www.blogcatalog.com/directory/&quot;. urlencode(strtolower(str_replace(&quot; &quot;, &quot;_&quot;, &quot;$cat&quot;))) . &quot;\&quot;&gt;&quot;. $cat .&quot;&lt;/a&gt; &quot;;
		}
		$set  ;
	}
</code></pre>
<p><strong>DEMO: </strong><a href="http://www.cagintranet.com/code/blog-catalog">View the final outcome of this tutorial</a> (with a little bit of CSS and HTML markup added, which you can see in the header section of the page when you do a &#8220;view source&#8221;).</p>
<p><strong>SOURCE CODE:</strong> Download the <a href='http://www.cagintranet.com/design/wp-content/uploads/2008/07/blogcatalog.phps'>full PHP source code</a>.</p>
<img src="http://feeds.feedburner.com/~r/cagintranet/~4/WJXJ9fXXWZQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.cagintranet.com/archive/how-to-create-your-own-blogcatalog-widget-via-their-api/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.cagintranet.com/archive/how-to-create-your-own-blogcatalog-widget-via-their-api/</feedburner:origLink></item>
		<item>
		<title>Using the Wordpress Link Manager to Display Your Portfolio</title>
		<link>http://feedproxy.google.com/~r/cagintranet/~3/AwxqEQvEwjk/</link>
		<comments>http://www.cagintranet.com/archive/using-the-wordpress-link-manager-to-display-your-portfolio/#comments</comments>
		<pubDate>Mon, 11 Aug 2008 04:09:21 +0000</pubDate>
		<dc:creator>Chris Cagle</dc:creator>
				<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://www.cagintranet.com/?p=224</guid>
		<description><![CDATA[<a href=http://www.cagintranet.com/archive/using-the-wordpress-link-manager-to-display-your-portfolio/><img src=http://www.cagintranet.com/design/wp-content/uploads/2008/08/steveleggat.jpg class=imgtfe hspace=5 align=left width=200  border=0></a>
For web designers or other businesses alike, setting up a quality portfolio is essential. This tutorial will show you how you can use Wordpress&#8217;s Link Manager to create and display your portfolio. This will allow you to use Wordpress to it&#8217;s fullest extent, without the need of extra plugins or any hacked code.
Step 1. Supplying [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.cagintranet.com/design/wp-content/uploads/2008/08/steveleggat.jpg" alt="" title="Portfolio at SteveLeggat.com" width="500" height="200" class="alignnone size-full wp-image-295" /></p>
<p>For web designers or other businesses alike, setting up <a href="http://www.digital-web.com/articles/the_perfect_portfolio/">a quality portfolio is essential</a>. This tutorial will show you how you can use <a href="http://codex.wordpress.org/Links_Manager">Wordpress&#8217;s Link Manager</a> to create and display your portfolio. This will allow you to use Wordpress to it&#8217;s fullest extent, <strong>without</strong> the need of extra plugins or any hacked code.</p>
<h3>Step 1. Supplying the Data</h3>
<p>Lets start off by populating our Links manager with some data. In the screenshot below you can see the fields that I am using:</p>
<ul>
<li><strong>Name</strong> &#8211; Client Name</li>
<li><strong>Web Address</strong> &#8211; To link back to. This can either be an internal posting explaining the project in detail or the actual client website (which is what I use).</li>
<li><strong>Description</strong> &#8211; For <em>title</em> and <em>alt</em> attributes.</li>
<li><strong>Categories</strong> &#8211; Skills that were used in creating the project. </li>
<li><strong>Advanced: Image Address</strong> &#8211; Link to the screenshot of your project</li>
<li><strong>Advanced: Notes</strong> &#8211; Description of the project</li>
</ul>
<p><img src="http://www.cagintranet.com/design/wp-content/uploads/2008/07/categoryport-full.gif" alt="" title="Create Link" width="500" height="1009" class="alignnone size-full wp-image-231" /></p>
<p>Optional fields include &#8220;<strong>Target</strong>&#8221; where you can force your links to open into a new browser window and &#8220;<strong>Keep this link private</strong>.&#8221; This is how you can set up a portfolio entry but not have it shown in the display on the site. This could be helpful for when you have a project finished, but you can&#8217;t show it until it&#8217;s live.</p>
<p>When you are finished adding all your portfolio entries, you can go to <em>Your WP Dashboard > Manage > Links</em> to see the full list. </p>
<p><img src="http://www.cagintranet.com/design/wp-content/uploads/2008/07/categoryport-2.gif" alt="" title="Manage Links" width="500" height="254" class="alignnone size-full wp-image-230" /></p>
<h3>Step 2. Display Your Portfolio</h3>
<p>Wordpress has two different ways to display it&#8217;s &#8220;bookmarks&#8221; which we are now using as portfolio entries. They are <a href="http://codex.wordpress.org/Template_Tags/wp_list_bookmarks">wp_list_bookmarks</a> and <a href="http://codex.wordpress.org/Template_Tags/get_bookmarks">get_bookmarks</a></p>
<p>We will use the <em>get_bookmarks</em> template tag because it allows us to manipulate how our &#8220;bookmarks&#8221; look. The only caveat is that this template tag returns an array &#8211; which we will need to use some PHP code to parse though it. To see the data that <em>get_bookmarks</em> outputs, I quickly added this little snippet to my code:</p>
<pre><code class="php">&lt;?php
$arr_portfolio = get_bookmarks();
print_r ($arr_portfolio);
?&gt;</code></pre>
<p>The <a href='http://www.cagintranet.com/design/wp-content/uploads/2008/07/getbookmarksoutput.html'>output from the print_r on get_bookmarks</a> shows how the array is structured. </p>
<p>From that file, we can decipher enough to get the rest of the data echo&#8217;d out into an unordered list. The only thing that took a little tweaking was the fact that you have to find your own categories by running SQL on the <em>wp_term_relationships</em> and <em>wp_terms</em> tables in order to derive the category names by their id and the link&#8217;s id.</p>
<pre><code class="php">&lt;?php
$arr_portfolio = get_bookmarks();
//print_r ($arr_portfolio);
echo &quot;&lt;ul&gt;&quot;;
foreach ($arr_portfolio as $site) {

   echo &quot;&lt;li&gt;&quot;;
   echo &quot;&lt;h3&gt;&quot;. $site-&gt;link_name .&quot;&lt;/h3&gt;&quot;;
   echo &quot;&lt;a href=\&quot;&quot;. $site-&gt;link_url .&quot;\&quot; title=\&quot;&quot;. $site-&gt;link_description .&quot;\&quot;&gt;&quot;;
   echo &quot;&lt;img src=\&quot;&quot;. $site-&gt;link_image .&quot;\&quot; /&gt;&lt;/a&gt;&quot;;
   echo &quot;&lt;p&gt;&quot;. $site-&gt;link_notes .&quot;&lt;/p&gt;&quot;;

   $cats = $wpdb-&gt;get_results(&quot;SELECT * FROM wp_term_relationships, wp_terms WHERE wp_term_relationships.object_id = $site-&gt;link_id AND wp_terms.term_id = wp_term_relationships.term_taxonomy_id&quot;);
   echo &quot;&lt;p&gt;Skills Used: &quot;;
   foreach ($cats as $cat) {
   	echo $cat-&gt;name .&quot;, &quot;;
   }

   echo &quot;&lt;/p&gt;&lt;/li&gt;&quot;;
}
echo &quot;&lt;/ul&gt;&quot;;
?&gt;	</code></pre>
<p>The great thing is that this code doesn&#8217;t need to be placed within <a href="http://codex.wordpress.org/The_Loop">the_Loop</a>. It will work great within it&#8217;s own template or on the sidebar.</p>
<p>View the <a href="http://www.cagintranet.com/code/demo-portfolio/">demo portfolio</a> using this code.</p>
<img src="http://feeds.feedburner.com/~r/cagintranet/~4/AwxqEQvEwjk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.cagintranet.com/archive/using-the-wordpress-link-manager-to-display-your-portfolio/feed/</wfw:commentRss>
		<slash:comments>27</slash:comments>
		<feedburner:origLink>http://www.cagintranet.com/archive/using-the-wordpress-link-manager-to-display-your-portfolio/</feedburner:origLink></item>
	</channel>
</rss><!-- Dynamic page generated in 1.031 seconds. --><!-- Cached page generated by WP-Super-Cache on 2009-11-10 04:55:58 -->
