<?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>ProWorks Blog &#187; Tutorials and How-to</title>
	<atom:link href="http://www.proworks.com/blog/category/tutorials-and-how-to/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.proworks.com/blog</link>
	<description>learn. rinse. repeat</description>
	<lastBuildDate>Fri, 05 Aug 2011 20:37:43 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Umbraco Tutorial: How to Create a Blog Post with Blog for Umbraco</title>
		<link>http://www.proworks.com/blog/2011/03/17/umbraco-tutorial-how-to-create-a-blog-post-with-blog-for-umbraco/</link>
		<comments>http://www.proworks.com/blog/2011/03/17/umbraco-tutorial-how-to-create-a-blog-post-with-blog-for-umbraco/#comments</comments>
		<pubDate>Thu, 17 Mar 2011 21:12:55 +0000</pubDate>
		<dc:creator>Alan</dc:creator>
				<category><![CDATA[For Content Editors]]></category>
		<category><![CDATA[Tutorials and How-to]]></category>
		<category><![CDATA[Umbraco Tips, Advice and How-Tos]]></category>
		<category><![CDATA[umbraco]]></category>

		<guid isPermaLink="false">http://www.proworks.com/blog/?p=1180</guid>
		<description><![CDATA[
Want to know how to create a blog post in Umbraco? Just follow these steps:
1. Go to the &#8220;Content&#8221; section of Umbraco, find &#8220;Blog&#8221; under &#8220;Home&#8221;

2. Right click &#8220;Blog&#8221; and choose &#8220;Create&#8221;

3. Enter the title of your post and click &#8220;Create&#8221;



3a. The post will be automatically placed into the correct date folder in the content [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.proworks.com/blog/wp-content/uploads/2011/03/PWBlogIcon_Editor.png"><img class="aligncenter size-full wp-image-1205" title="PWBlogIcon_Editor" src="http://www.proworks.com/blog/wp-content/uploads/2011/03/PWBlogIcon_Editor.png" alt="For Content Editors" width="175" height="129" /></a></p>
<p>Want to know how to create a blog post in Umbraco? Just follow these steps:</p>
<p><strong>1. Go to the &#8220;Content&#8221; section of Umbraco, find &#8220;Blog&#8221; under &#8220;Home&#8221;</strong></p>
<p><a href="http://www.proworks.com/blog/wp-content/uploads/2011/03/blog1.jpg"><img class="alignnone size-full wp-image-1210" title="blog1" src="http://www.proworks.com/blog/wp-content/uploads/2011/03/blog1.jpg" alt="" width="329" height="209" /></a></p>
<p><strong>2. Right click &#8220;Blog&#8221; and choose &#8220;Create&#8221;</strong></p>
<p><a href="http://www.proworks.com/blog/wp-content/uploads/2011/03/blog2.jpg"><img class="alignnone size-full wp-image-1211" title="blog2" src="http://www.proworks.com/blog/wp-content/uploads/2011/03/blog2.jpg" alt="" width="329" height="219" /></a></p>
<p><strong>3. Enter the title of your post and click &#8220;Create&#8221;</strong></p>
<p><strong><a href="http://www.proworks.com/blog/wp-content/uploads/2011/03/blog3.jpg"><img class="alignnone size-full wp-image-1212" title="blog3" src="http://www.proworks.com/blog/wp-content/uploads/2011/03/blog3.jpg" alt="" width="345" height="245" /></a></strong></p>
<p><strong><br />
</strong></p>
<p><strong>3a. The post will be automatically placed into the correct date folder in the content tree<br />
</strong></p>
<p><strong><a href="http://www.proworks.com/blog/wp-content/uploads/2011/03/blog4.jpg"><img class="alignnone size-full wp-image-1213" title="blog4" src="http://www.proworks.com/blog/wp-content/uploads/2011/03/blog4.jpg" alt="" width="329" height="229" /></a></strong></p>
<p><strong><br />
</strong></p>
<p><strong>4. Enter the content of your blog post</strong></p>
<p><strong><a href="http://www.proworks.com/blog/wp-content/uploads/2011/03/blog5.jpg"><img class="alignnone size-full wp-image-1214" title="blog5" src="http://www.proworks.com/blog/wp-content/uploads/2011/03/blog5.jpg" alt="" width="423" height="165" /></a></strong></p>
<p><strong><br />
</strong></p>
<p><strong>5. Enter tags for your post</strong></p>
<p><strong><a href="http://www.proworks.com/blog/wp-content/uploads/2011/03/blog6.jpg"><img class="alignnone size-full wp-image-1215" title="blog6" src="http://www.proworks.com/blog/wp-content/uploads/2011/03/blog6.jpg" alt="" width="613" height="125" /></a></strong></p>
<p><strong><br />
</strong></p>
<p><strong>6. When you&#8217;re done, click &#8220;Save and Publish&#8221; to get your post on your website</strong></p>
<p><strong><a href="http://www.proworks.com/blog/wp-content/uploads/2011/03/blog7.jpg"><img class="alignnone size-full wp-image-1216" title="blog7" src="http://www.proworks.com/blog/wp-content/uploads/2011/03/blog7.jpg" alt="" width="243" height="141" /></a></strong></p>
<p>And that&#8217;s it! Happy blogging! If you have any questions feel free to ask.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.proworks.com/blog/2011/03/17/umbraco-tutorial-how-to-create-a-blog-post-with-blog-for-umbraco/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Notes and Experiences Upgrading Umbraco 4.0.x to 4.6.1 and 4.7.0</title>
		<link>http://www.proworks.com/blog/2011/03/03/my-notes-and-experiences-upgrading-umbraco-4-0-x-to-4-6-1/</link>
		<comments>http://www.proworks.com/blog/2011/03/03/my-notes-and-experiences-upgrading-umbraco-4-0-x-to-4-6-1/#comments</comments>
		<pubDate>Thu, 03 Mar 2011 23:20:11 +0000</pubDate>
		<dc:creator>Jason</dc:creator>
				<category><![CDATA[For Developers]]></category>
		<category><![CDATA[Tutorials and How-to]]></category>
		<category><![CDATA[Umbraco Tips, Advice and How-Tos]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[umbraco]]></category>
		<category><![CDATA[upgrade]]></category>

		<guid isPermaLink="false">http://www.proworks.com/blog/?p=1174</guid>
		<description><![CDATA[
This is a series of notes and what I could cobble together from various Umbraco upgrade articles and sources.  I also found a few issues that weren&#8217;t documented by anyone that gave me some grief.  I&#8217;ll likely add any 4.7 specific items as well when I get a chance to test this process with that [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.proworks.com/blog/wp-content/uploads/2011/03/PWBlogIcon_Developer.png"><img class="aligncenter size-full wp-image-1207" title="PWBlogIcon_Developer" src="http://www.proworks.com/blog/wp-content/uploads/2011/03/PWBlogIcon_Developer.png" alt="Umbraco Developer Tutorial" width="175" height="129" /></a></p>
<p>This is a series of notes and what I could cobble together from various Umbraco upgrade articles and sources.  I also found a few issues that weren&#8217;t documented by anyone that gave me some grief.  I&#8217;ll likely add any 4.7 specific items as well when I get a chance to test this process with that version.</p>
<p>I&#8217;ve found that you may want to upgrade from 4.0.x to 4.5.2 then to 4.7 because the upgrade install script didn&#8217;t seem to run in the 4.6.1 upgrade I performed.  Basically, the database wasn&#8217;t updated properly when I went straight to 4.6.1.</p>
<h2>My Notes:</h2>
<p>From <a href="http://our.umbraco.org/wiki/install-and-setup/upgrading-an-umbraco-installation">http://our.umbraco.org/wiki/install-and-setup/upgrading-an-umbraco-installation</a></p>
<ul type="circle">
<li>Backup DB and Files of existing site</li>
<li>Create new web site and db for &#8220;upgrade&#8221; site</li>
<li>Manually merge web.config for new 4.0 changes to upgrade site (use <a href="http://www.scootersoftware.com/" target="_blank">Beyond Compare</a>)</li>
<li>Manually merge /config files
<ul>
<li>Remove /bin from xlstExtensions.config</li>
<li>Remove /bin/ from restExtensions.config</li>
</ul>
</li>
<li><span style="text-decoration: line-through;">Copy</span> Merge these from the <a href="http://umbraco.codeplex.com/releases/view/59025" target="_blank">4.6.1 base install on codeplex</a> or <a href="http://umbraco.codeplex.com/releases/view/62573" target="_blank">4.7 base code</a> to the new site
<ul type="disc">
<li>I have found it better to copy using beyond compare so my packages don&#8217;t disappear and any UI.xml or locale changes don&#8217;t get lost.  But if you prefer, copy away!</li>
<li>/app_data</li>
<li>/app_browsers</li>
<li>/app_code</li>
<li>/bin</li>
<li>/data</li>
<li>/install</li>
<li>/umbraco</li>
<li>/umbraco_client</li>
<li>default.aspx</li>
</ul>
</li>
</ul>
<ul type="circle">
<li>Republish the content
<ul type="disc">
<li>From the Content section/folder in       Umbraco</li>
<li>Or: <a href="http://our.umbraco.org/wiki/reference/api-cheatsheet/publishing-and-republishing">http://our.umbraco.org/wiki/reference/api-cheatsheet/publishing-and-republishing</a></li>
</ul>
</li>
</ul>
<p>Other upgrade notes:</p>
<ul type="circle">
<li>Verify your      /umbraco/config/create/UI.xml still has your custom items in it.  It may have been over-written by the      copy above.</li>
</ul>
<p><a href="http://our.umbraco.org/wiki/about/roadmap/umbraco-45/upgrading-to-umbraco-45">http://our.umbraco.org/wiki/about/roadmap/umbraco-45/upgrading-to-umbraco-45</a></p>
<ul type="circle">
<li>Delete App_global.asax.dll</li>
<li>Verify &#8220;UseLegacyXmlSchema&#8221;      element in umbracoSettings.config is set properly (false if no XSLT      conversion has been done)</li>
<li>Go to http://www.yourupgradesite.com/install/
<ul>
<li>Go through the upgrade install script</li>
</ul>
</li>
</ul>
<p><a href="http://www.littlewebempire.com/blog/2010/10/29/update-umbraco-from-4021-to-452">http://www.littlewebempire.com/blog/2010/10/29/update-umbraco-from-4021-to-452</a></p>
<ul type="disc">
<li>You may need to add the Media      Recycle bin to the UmbracoAppTree and UmbracoNode tables in the DB</li>
</ul>
<ul type="disc">
<li>Verify the      \App_Data\TEMP\ClientDependency folder has stuff in it.  Delete anything in the folder and reload      the website</li>
</ul>
<p>Package Upgrades / Changes</p>
<ul type="disc">
<li>Copy old /data/packages/      folder contents to /App_Data/Packages/</li>
</ul>
<p>Then you need to test that your packages work and are compatible with this latest version.  Here is a place to start: <a href="http://our.umbraco.org/wiki/reference/packaging/umbraco-45-compatibility/umbraco-45-package-testing">http://our.umbraco.org/wiki/reference/packaging/umbraco-45-compatibility/umbraco-45-package-testing</a></p>
<p>Articles that may be helpful for package issue:</p>
<ul>
<li><a href="http://www.proworks.com/blog/2011/03/29/fix-yet-another-media-picker-4-for-upgrade-from-umbraco-4-0-x-to-4-5-2/" target="_blank">Fix ‘Yet Another Media Picker 4′ For Upgrade From Umbraco 4.0.x to 4.5.2</a></li>
</ul>
<h2>Umbraco 4.7 Additions:</h2>
<ul>
<li>There are quite a few dlls to remove to keep your XSLT working.  This forum article was VERY helpful in identifying the specific URLs to remove: <a href="http://our.umbraco.org/forum/getting-started/installing-umbraco/17890-XSLT-macros-not-getting-rendered-after-upgrading-to-47-RC?p=0" target="_blank">XSLT macros not getting rendered after upgrading to 4.7 RC</a>
<ul>
<li>Remove:
<ul>
<li>Iron*.dll (all dlls in your /bin directory starting with &#8220;Iron&#8221;, like IronPython.dll and IronRuby.dll)</li>
<li>Microsoft.Scripting*.dll</li>
<li>Microsoft.Dynamic.dll</li>
<li>umbraco.macroEngines.legacy.dll</li>
<li>RazorEngine.Core.dll</li>
<li>RazorEngine.Templates.dll</li>
<li>VistaDB*.dll</li>
<li>I&#8217;ll add more if they are mentioned&#8230;</li>
<li>From comments:</li>
<li>umbraco.standardFormhandlers.dll</li>
</ul>
</li>
</ul>
</li>
</ul>
<p>That&#8217;s it so far.  Please feel free to add anything you needed to do.  I&#8217;ll edit as I find further issues.</p>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 1248px; width: 1px; height: 1px; overflow: hidden;">
<h1 class="entry-title">Fix ‘Yet Another Media Picker 4′ For Upgrade From Umbraco 4.0.x to 4.5.2</h1>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.proworks.com/blog/2011/03/03/my-notes-and-experiences-upgrading-umbraco-4-0-x-to-4-6-1/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>13 Blog Post Ideas and Other Tips for Business Blogs</title>
		<link>http://www.proworks.com/blog/2011/03/02/13-blog-post-ideas-and-other-tips-for-business-blogs/</link>
		<comments>http://www.proworks.com/blog/2011/03/02/13-blog-post-ideas-and-other-tips-for-business-blogs/#comments</comments>
		<pubDate>Wed, 02 Mar 2011 16:16:17 +0000</pubDate>
		<dc:creator>Loyan</dc:creator>
				<category><![CDATA[Social Media Tips, Advice and How-Tos]]></category>
		<category><![CDATA[Social Media and Web Marketing]]></category>
		<category><![CDATA[Tutorials and How-to]]></category>
		<category><![CDATA[blog]]></category>
		<category><![CDATA[blogging]]></category>

		<guid isPermaLink="false">http://www.proworks.com/blog/?p=1167</guid>
		<description><![CDATA[What’s the Objective?

Earn TRUST &#8211; how important are relationships to your business?
Merit CREDIBILITY &#8211; how do you prove expertise?
Demonstrate you CARE &#8211; do you care enough to share?
Invite FEEDBACK &#8211; are phone &#38; email enough for your customers?
Grow your online PRESENCE &#8211; how do your customers find you online?
Make someone say “WOW” – is it valuable [...]]]></description>
			<content:encoded><![CDATA[<h3><a href="http://www.proworks.com/blog/wp-content/uploads/2011/03/got-blog.jpg"><img class="alignright size-full wp-image-1171" style="margin-left: 10px;" title="got-blog" src="http://www.proworks.com/blog/wp-content/uploads/2011/03/got-blog.jpg" alt="" width="200" height="200" /></a>What’s the Objective?</h3>
<ol>
<li>Earn <strong>TRUST</strong> &#8211; how important are relationships to your business?</li>
<li>Merit <strong>CREDIBILITY</strong> &#8211; how do you prove expertise?</li>
<li>Demonstrate you <strong>CARE</strong> &#8211; do you care enough to share?</li>
<li>Invite <strong>FEEDBACK</strong> &#8211; are phone &amp; email enough for your customers?</li>
<li>Grow your online <strong>PRESENCE</strong> &#8211; how do your customers find you online?</li>
<li>Make someone say <strong>“WOW”</strong> – is it valuable to be remarkable?</li>
<li>Support your <strong>COMMUNITY</strong> – we all want a business fan club right?</li>
</ol>
<h3>Sources for Blog Post Topics</h3>
<div id="_mcePaste">
<ol>
<li>Industry news &amp; events</li>
<li>Questions to customer service &amp; front desk</li>
<li>Personal experiences and conversations</li>
<li>Posts on other blogs, Twitter &amp; Facebook</li>
<li>Ask your customers &amp; readers</li>
<li>Stuff from customers (letters, photos, video, cupcakes…)</li>
<li>Popular culture</li>
<li>Empty spaces and knowledge voids online</li>
</ol>
</div>
<h3>13 Blog Post Topic Ideas for Your Business</h3>
<ol>
<li>Explain how a recent news event will affect your industry.</li>
<li>List essential resources related to your industry and summarize why.</li>
<li>List and debunk the most common myths in your industry.</li>
<li>Promptly deliver a report from an industry related event.</li>
<li>Compare something complex or misunderstood to something simple or commonly understood.</li>
<li>Deliver timely advice or news relevant to an upcoming holiday or event.</li>
<li>Share a list of changes you are considering for your business.</li>
<li>Make a list of valuable products or services that are complimentary to your business/industry.</li>
<li>Share a list of your favorite replies on Blog, Twitter and/or Facebook.</li>
<li>Share a list of your favorite photos or videos related to your business/industry.</li>
<li>Answer a list of the most commonly asked questions you receive.</li>
<li>Create simple step-by-step directions how to do something.</li>
<li>Invite someone interesting to write a post.</li>
</ol>
<h3>A Few Good Examples</h3>
<ul>
<li>Drawing from a personal experience: <a href="http://eroidays.com/2010/01/21/the-why/" target="_blank">The Why</a> by eROI</li>
<li>Challenge an industry myth: <a href="http://fastwonderblog.com/2010/01/10/privacy-illusion/" target="_blank">Online Privacy is an Illusion</a> by Fast Wonder Blog</li>
<li>Report on (or from) an industry event: <a href="http://flurrycreations.com/theblog/2010/01/11/ces-2010-surprised-in-vegas/" target="_blank">CES 2010: Surprised in Vegas</a> by Johnflurry Blog</li>
<li>Step-by-step and how-to: <a href="http://vector.tutsplus.com/tutorials/designing/design-a-print-ready-beer-label-in-adobe-illustrator/">Design a Print Ready Label in Adobe Illustrator</a> at Tuts Plus</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.proworks.com/blog/2011/03/02/13-blog-post-ideas-and-other-tips-for-business-blogs/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Creating Your Own Custom YouTube Player</title>
		<link>http://www.proworks.com/blog/2011/02/25/creating-your-own-custom-youtube-player/</link>
		<comments>http://www.proworks.com/blog/2011/02/25/creating-your-own-custom-youtube-player/#comments</comments>
		<pubDate>Fri, 25 Feb 2011 17:10:47 +0000</pubDate>
		<dc:creator>Loyan</dc:creator>
				<category><![CDATA[Cool Tools]]></category>
		<category><![CDATA[Social Media Tips, Advice and How-Tos]]></category>
		<category><![CDATA[Social Media and Web Marketing]]></category>
		<category><![CDATA[Tutorials and How-to]]></category>
		<category><![CDATA[YouTube]]></category>

		<guid isPermaLink="false">http://www.proworks.com/blog/?p=1158</guid>
		<description><![CDATA[The Custom Player allows you to create a customized player that you can add to your website or blog. YouTube provides a nice easy to use one-page wizard to show one of your playlists, favorites, or your own videos.
Here is an example of a custom player that is set to play a specific playlist. As [...]]]></description>
			<content:encoded><![CDATA[<p>The Custom Player allows you to create a customized player that you can add to your website or blog. YouTube provides a nice easy to use one-page wizard to show one of your playlists, favorites, or your own videos.</p>
<p>Here is an example of a custom player that is set to play a specific playlist. As videos are added to this playlist they will automically be added to this custom player. Cool, huh?</p>
<p><object width="500" height="320"><param name="movie" value="http://www.youtube.com/cp/vjVQa1PpcFMR3KS7cSU6X1dac7JeqFCjbrz3JBx3jdY="></param><embed src="http://www.youtube.com/cp/vjVQa1PpcFMR3KS7cSU6X1dac7JeqFCjbrz3JBx3jdY=" type="application/x-shockwave-flash" width="500" height="320"></embed></object><br />
<a href="http://www.youtube.com/custom_player">Make Your Own YouTube Custom Player at http://www.youtube.com/custom_player</a></p>
<p>Tip: Login to your YouTube account and create a playlist. You can add videos, your and others, to your playlist. Custom players can be set to display from a set playlist. The nice thing is that as you add new videos to your playlist, the plugin will be automatically updated no matter where its published at. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.proworks.com/blog/2011/02/25/creating-your-own-custom-youtube-player/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>New Facebook Fan Page Feature: How To Post As Both Your Page and Yourself</title>
		<link>http://www.proworks.com/blog/2011/02/11/new-facebook-fan-page-feature-how-to-post-as-both-your-page-and-yourself/</link>
		<comments>http://www.proworks.com/blog/2011/02/11/new-facebook-fan-page-feature-how-to-post-as-both-your-page-and-yourself/#comments</comments>
		<pubDate>Fri, 11 Feb 2011 21:33:25 +0000</pubDate>
		<dc:creator>Jason</dc:creator>
				<category><![CDATA[Social Media Tips, Advice and How-Tos]]></category>
		<category><![CDATA[Tutorials and How-to]]></category>
		<category><![CDATA[education]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[fan page]]></category>
		<category><![CDATA[social media]]></category>

		<guid isPermaLink="false">http://www.proworks.com/blog/?p=1135</guid>
		<description><![CDATA[With the release of the new Facebook Fan Page look and feel one key new feature was added:
You can now decide whether you want to post on your Facebook Fan Page as yourself (your personal profile).
The old fan page forced you to post as your fan page persona if you were an admin of a [...]]]></description>
			<content:encoded><![CDATA[<p>With the release of the <a href="http://www.facebook.com/notes/facebook-pages/an-upgrade-for-pages/10150090729064822" target="_blank">new Facebook Fan Page</a> look and feel one key new feature was added:</p>
<p>You can now decide whether you want to post on your Facebook Fan Page as yourself (your personal profile).</p>
<p>The old fan page forced you to post as your fan page persona if you were an admin of a fan page.  However, with this change you can switch between posting as yourself and posting as your fan page.</p>
<p>How to set it up:</p>
<h3>1. Edit Your Page</h3>
<p><a href="http://www.proworks.com/blog/wp-content/uploads/2011/02/FBNewFanPage_PostAsYourself1.png"><img class="alignnone size-full wp-image-1136" style="border: 1px solid black; margin: 5px;" title="Facebook New Fan Page Post As Yourself - Edit Page" src="http://www.proworks.com/blog/wp-content/uploads/2011/02/FBNewFanPage_PostAsYourself1.png" alt="Facebook New Fan Page Post As Yourself - Edit Page" width="437" height="137" /></a></p>
<h3>2. Select the &#8220;Your Settings&#8221; menu item on the left menu and un-check the &#8220;Posting Preferences&#8221; checkbox.</h3>
<p><a href="http://www.proworks.com/blog/wp-content/uploads/2011/02/FBNewFanPage_PostAsYourself2.png"><img class="alignnone size-full wp-image-1137" style="border: 1px solid black; margin: 5px;" title="Facebook New Fan Page Post As Yourself - Your Settings" src="http://www.proworks.com/blog/wp-content/uploads/2011/02/FBNewFanPage_PostAsYourself2.png" alt="Facebook New Fan Page Post As Yourself - Your Settings" width="602" height="151" /></a></p>
<p>That&#8217;s it.  Now you will post as your personal profile on your fan page!</p>
<p>If you want to post as your fan page in the future, then simply use the new &#8220;Use Facebook as Fan Page&#8221; feature to toggle between your fan page and your personal profile.</p>
<h3>3. When logged in as yourself, click the &#8220;Use Facebook as&#8230;&#8221; link on the right side:</h3>
<p><a href="http://www.proworks.com/blog/wp-content/uploads/2011/02/FBNewFanPage_PostAsYourself3.png"><img class="alignnone size-full wp-image-1138" style="border: 1px solid black; margin: 5px;" title="FBNewFanPage_PostAsYourself3" src="http://www.proworks.com/blog/wp-content/uploads/2011/02/FBNewFanPage_PostAsYourself3.png" alt="" width="450" height="285" /></a></p>
<p>Now you will be able to comment, like, and post under the &#8220;Fan Page&#8221; profile.  If you go to your home page (news feed) you will see information for pages that your page likes as well as fans instead of your personal feed. Pretty cool.</p>
<h3>4. You can switch back easily by simply clicking the same link (it will list your name):</h3>
<p><a href="http://www.proworks.com/blog/wp-content/uploads/2011/02/FBNewFanPage_PostAsYourself4.png"><img class="alignnone size-full wp-image-1139" style="border: 1px solid black; margin: 5px;" title="FBNewFanPage_PostAsYourself4" src="http://www.proworks.com/blog/wp-content/uploads/2011/02/FBNewFanPage_PostAsYourself4.png" alt="" width="340" height="210" /></a></p>
<p>Enjoy the new power and flexibility!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.proworks.com/blog/2011/02/11/new-facebook-fan-page-feature-how-to-post-as-both-your-page-and-yourself/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Adventures in Twilio and C#</title>
		<link>http://www.proworks.com/blog/2010/11/22/adventures-in-twilio-and-c/</link>
		<comments>http://www.proworks.com/blog/2010/11/22/adventures-in-twilio-and-c/#comments</comments>
		<pubDate>Mon, 22 Nov 2010 22:44:17 +0000</pubDate>
		<dc:creator>Rob</dc:creator>
				<category><![CDATA[Cool Tools]]></category>
		<category><![CDATA[Social Media Tips, Advice and How-Tos]]></category>
		<category><![CDATA[Tutorials and How-to]]></category>
		<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://www.proworks.com/blog/?p=1094</guid>
		<description><![CDATA[Try out our ProWorks Twilio demo now:  http://twiliodemo.proworks.com]]></description>
			<content:encoded><![CDATA[<p>One of the more interesting companies and services on our <a href="http://www.proworks.com" target="_blank">ProWorks </a>radar these days is <a title="Twilio" href="http://www.twilio.com" target="_blank">Twilio</a>, a company that provides a simple but powerful <a href="http://en.wikipedia.org/wiki/Representational_State_Transfer" target="_blank">REST API</a> which allows developers to easily integrate telephone calls with custom business logic into their web applications.  You could almost call it &#8220;Coolio&#8221; because it is pretty cool!</p>
<p>Try out our ProWorks Twilio demo now:  <a href="http://twiliodemo.proworks.com" target="_blank">http://twiliodemo.proworks.com</a></p>
<p>The basic idea of Twilio is that voice narration and business logic can be controlled by the developer the same way they might code any application and there are a number of ways the text can either be read back by the talking Twilio text to speech voices or via playback of your own pre-recorded audio.</p>
<p>Where things get even more interesting is the ability to gather user input  (e.g., &#8220;Press 1 for option A,&#8221; etc.) and how those inputs can trigger different branches of code logic, which is of course application specific and usually determined by the client&#8217;s needs and or their processes.  This and other great features are supported via TwilML (Twilio Markup Lanaguage) which is pure XML that expresses a variety of &#8220;verbs&#8221; or actions that can be carried out by the Twilio service.</p>
<p>For example, let&#8217;s say I wanted to make sure that I&#8217;ve got a warm body on the other line &#8211; maybe my app needs to post a wake-up call or a reminder to someone.   Here&#8217;s how that might be expressed in TwilML:</p>
<p><code><strong><em>&lt;Response&gt;</em></strong></code></p>
<p><code><strong><em>&lt;Say voice="woman"&gt;Hi there.  Just checking to see if you are awake.&lt;/Say&gt;</em></strong></code></p>
<p><code></p>
<div id="_mcePaste"><strong><em>&lt;Gather finishOnKey="any digit"&gt;</em></strong></div>
<div id="_mcePaste"><strong><em>&lt;Say voice="woman"&gt;Please press any number key to let me know you are awake!&lt;/Say&gt;</em></strong></div>
<div id="_mcePaste"><strong><em>&lt;/Gather&gt;</em></strong></div>
<div id="_mcePaste"><strong><em>&lt;Say voice="woman"&gt;Mmmm.... is seems you are still asleep or non-responsive.&lt;/Say&gt;</em></strong></div>
<div><strong><em>&lt;Say voice="woman"&gt;Wake up   Wake up   Wake up&lt;/Say&gt;</em></strong></div>
<div><strong><em>&lt;Gather finishOnKey="any digit"&gt;</em></strong></div>
<div id="_mcePaste"><strong><em>&lt;Say voice="woman"&gt;Last chance.  Please press any number key to let me know you are awake!&lt;/Say&gt;</em></strong></div>
<div id="_mcePaste"><strong><em>&lt;/Gather&gt;</em></strong></div>
<div><strong><em>&lt;/Response&gt;</em></strong></div>
<p></code></p>
<div>Obviously this is just a simple example of <strong>TwilML</strong> in action, but the practical and creative possibilities with this type of expressive scripting of voice interaction and logic are quite vast &#8211; and fun!</div>
<div></div>
<div>I initially tested out the Twilio services using PHP even though I&#8217;m mainly a C# developer.  Still, it was actually quite easy in PHP since Twilio provides a large number of examples in PHP.  Strangely, it actually took me a longer to get a working example in C# humming, but that too ended up being fairly straight forward once I got beyond a couple gotchas.</div>
<div></div>
<div>I&#8217;ll walk you through some of the high-level steps you&#8217;ll need to take to get going writing your first Twilio app in C# using our demo as the example.</div>
<div></div>
<div>First things first:</div>
<div>
<ol>
<li>Create yourself a <a href="http://www.twilio.com">Twilio account</a>.  It&#8217;s free and easy.</li>
<li>Download the <a href="http://www.twilio.com/docs/libraries/" target="_blank">Twilio helper API of your choice</a>.</li>
<li>Browse through their <a href="http://www.twilio.com/docs/quickstart/" target="_blank">samples and docs</a> &#8211; there&#8217;s a lot there to get you going quickly.</li>
</ol>
</div>
<p>For this ProWorks/Twilio demo, I wrote a simple web app that utilized the Twilio REST API &#8211; Twilio provides a single TwilioRest.cs file for this on their site.  To enable reuse in different projects, I ended up wrapping it into a single .NET assembly but you can obviously just include the TwilioRest.cs file in your own project if that works for you.</p>
<p>I created a simple landing page in ASP.NET that looks like this:</p>
<p><img class="size-full wp-image-1097 alignleft" title="Twilio ProWorks Demo - Landing Page" src="http://www.proworks.com/blog/wp-content/uploads/2010/11/TwilioProWorksDemoGUI.png" alt="" width="474" height="358" /></p>
<p>You can access our demo from this URL: <a href="http://twiliodemo.proworks.com" target="_blank">http://twiliodemo.proworks.com</a></p>
<p>When the user clicks the &#8220;Call My Phone Now&#8221; link, our demo page will validate that you&#8217;ve entered the expected info, etc.</p>
<p>Now lets look at a bit of code &#8211; you&#8217;ll want to put your Twilio account ID and authorization ticket in a safe place &#8211; the Web.config is perfect for this.</p>
<p><strong><em>string twilioAcountSID = ConfigurationManager.AppSettings["twilioAcountSID"];</em></strong></p>
<p><strong><em>string twilioAuthToken = ConfigurationManager.AppSettings["twilioAuthToken"];</em></strong></p>
<p><strong><em>string twilioCallerID = ConfigurationManager.AppSettings["twilioCallerID"];</em></strong></p>
<p><strong><em>string twilioAPIVersion = ConfigurationManager.AppSettings["twilioAPIVersion"];</em></strong></p>
<p><strong><em>string demo1Url = ConfigurationManager.AppSettings["demo1Url"];</em></strong></p>
<p>Once we have our application specific configuration values, including the url that the Twilio service will redirect to, we can instantiate the Twilio helper API.  Again, I&#8217;ve wrapped it in our own assembly:</p>
<p><strong><em>PWTwilioWrapper.Account account = new PWTwilioWrapper.Account(twilioAcountSID, twilioAuthToken);</em></strong></p>
<p>I made a slight modification to their helper class (TwilioRest.cs) to utilize a Dictionary rather than the typical Hashtable &#8211; this was my own preference:</p>
<p><strong><em>Dictionary&lt;string, string&gt; h = new Dictionary&lt;string, string&gt;();</em></strong></p>
<p>And one of the &#8220;gotchas&#8221; was that since we&#8217;re allowing users to enter free form text is that they can enter any stream of characters.  So to be safe, the text is run through a custom &#8220;safe&#8221; filter that weeds out potentially harmful characters.  This might not be necessary for a demo, but it&#8217;s often the case when we work with client input:</p>
<p><strong><em>string safeMessage = PWTwilioHelper.SafeTwilioMessageText(this.ctrlMessage.Text);</em></strong></p>
<p>Next, we need to gather the input values that will be passed to and injected into our TwilML page.  Note that Twilio seemed a bit fussy about encoding and white space, so the user entered text is  Url encoded &#8211; yet another one of the &#8220;gotchas&#8221; that I had to work through when putting this demo together:</p>
<p><strong><em>string urlargs = string.Format(&#8220;?_message={0}&amp;_voice={1}&amp;_music={2}&#8221;, HttpUtility.UrlEncode(safeMessage), this.ctrlVoicePreference.SelectedValue == &#8220;man&#8221; ? &#8220;man&#8221; : &#8220;woman&#8221;, this.ctrlPlayMusic.Checked ? &#8220;1&#8243; : &#8220;0&#8243;);</em></strong></p>
<p><strong><em>h.Add(&#8220;Url&#8221;, demo1Url + urlargs);</em></strong></p>
<p><strong><em>h.Add(&#8220;From&#8221;, twilioCallerID);</em></strong></p>
<p><strong><em>h.Add(&#8220;To&#8221;, this.ctrlPhoneNumber.Text);</em></strong></p>
<p>With the Url, From, and To values packed up for Twilio, we can now invoke their service.  Here&#8217;s the next line:</p>
<p><strong><em>string resultXML = account.request(String.Format(&#8220;/{0}/Accounts/{1}/Calls&#8221;, twilioAPIVersion, twilioAcountSID), &#8220;POST&#8221;, h);</em></strong></p>
<p>Note that you might want to put the above in its own try/catch block.  If there&#8217;s an error invoking the Twilio API, chances are good that you&#8217;ll get the ASP.NET yellow screen of death.  Oh, well.  This is only a demo &#8211; next section:</p>
<p>Twilio will return XML back as the result.  Parsing it is optional of course, but we want to see what Twilio returns back to us so here&#8217;s one way to do this:</p>
<p><strong><em>try</em></strong></p>
<p><strong><em>{</em></strong></p>
<p><strong><em>XDocument xDoc = XDocument.Parse(resultXML, LoadOptions.PreserveWhitespace);</em></strong></p>
<p><strong><em>string status = &#8220;Unknown&#8221;;</em></strong></p>
<p><strong><em>string message = &#8220;None&#8221;;</em></strong></p>
<p><strong><em>string code = &#8220;None&#8221;;</em></strong></p>
<p><strong><em>string moreInfo = &#8220;None&#8221;;</em></strong></p>
<p><strong><em>foreach (XElement element in xDoc.Descendants(&#8220;Status&#8221;))</em></strong></p>
<p><strong><em>{</em></strong></p>
<p><strong><em>status = element.Value;</em></strong></p>
<p><strong><em>}</em></strong></p>
<p><strong><em>foreach (XElement element in xDoc.Descendants(&#8220;Message&#8221;))</em></strong></p>
<p><strong><em>{</em></strong></p>
<p><strong><em>message = element.Value;</em></strong></p>
<p><strong><em>}</em></strong></p>
<p><strong><em>foreach (XElement element in xDoc.Descendants(&#8220;Code&#8221;))</em></strong></p>
<p><strong><em>{</em></strong></p>
<p><strong><em>code = element.Value;</em></strong></p>
<p><strong><em>}</em></strong></p>
<p><strong><em>foreach (XElement element in xDoc.Descendants(&#8220;MoreInfo&#8221;))</em></strong></p>
<p><strong><em>{</em></strong></p>
<p><strong><em>moreInfo = element.Value;</em></strong></p>
<p><strong><em>}</em></strong></p>
<p><strong><em>string msgDetails = string.Format(&#8220;&lt;br /&gt;STATUS: {0}&lt;br /&gt;MESSAGE: {1}&lt;br /&gt;CODE: {2}&lt;br /&gt;MORE INFO: {3}&#8221;, status, message, code, moreInfo);</em></strong></p>
<p><strong><em>this.ctrlFeedbackLabel.Text = string.Format(&#8220;&lt;h4&gt;Results of the attempt to call {0}:&lt;/h4&gt;&lt;p&gt;&lt;i&gt;Twilio response: {1}&lt;/i&gt;&lt;/p&gt;&#8221;, this.ctrlPhoneNumber.Text, msgDetails);</em></strong></p>
<p><strong><em>}</em></strong></p>
<p><strong><em>catch ( Exception x )</em></strong></p>
<p><strong><em>{</em></strong></p>
<p><strong><em>this.ctrlFeedbackLabel.Text = string.Format(&#8220;&lt;h4&gt;Results of the attempt to call {0}:&lt;/h4&gt;&lt;p&gt;&lt;i&gt;Sorry, there was an exception parsing the Twilio response.  Details: {1}&lt;/i&gt;&lt;/p&gt;&#8221;, this.ctrlPhoneNumber.Text, x.Message);</em></strong></p>
<p><strong><em>}</em></strong></p>
<p>So that&#8217;s what I would call the &#8220;invocation&#8221; page &#8211; it bootstraps things up so that the Twilio service can redirect to the target Twilio XML (or TwilML) page.  But we&#8217;re writing a C# web app and we need to inject our custom logic into the XML, right?  We need the ASP.NET page to act like an XML stream.   So the approach we take is to simply create an ASPX page (demo1Script01.aspx) with no code behind and add in the appropriate &#8220;ContentType&#8221; value, which is &#8220;text/xml&#8221; .  Keep in mind that this is the page that the Twilio service will be calling to invoke the script to make the phone call and &#8220;speak&#8221; the text that was passed to the caller and potentially capture any of their input to (optionally) re-direct to other pages and scripts, etc., etc.  For this demo, we&#8217;re keeping it somewhat simple (just a single TwilML script page), but still want to explore and illustrate some possible techniques for dealing with this handy text to speech technology.</p>
<p>The first line of our target ASP.NET page (sans any code-behind) that will get called by Twilio looks like this:</p>
<p><strong><em>&lt;%@ Page Language=&#8221;C#&#8221; ContentType=&#8221;text/xml&#8221; Title=&#8221;Demo1&#8243; %&gt;&lt;?xml version=&#8221;1.0&#8243; encoding=&#8221;utf-8&#8243; ?&gt;&lt;%</em></strong></p>
<p>Here&#8217;s where we can write any C# we want.  For this demo the first thing I wanted to tackle was how to &#8220;speak&#8221; a date and time.  It&#8217;s simple enough in C# to get the current date and time, but we have to do just a bit  more work to make that date and time &#8220;speak&#8221; nicely (in English or any other language) &#8211; so here&#8217;s a hunk of code that might make a nice helper function:</p>
<p><strong><em>DateTime dt = DateTime.Now;</em></strong></p>
<p><strong><em>string dayOfWeek = String.Format(&#8220;{0:dddd}&#8221;, dt);</em></strong></p>
<p><strong><em>string month = String.Format(&#8220;{0:MMMMM}&#8221;, dt);</em></strong></p>
<p><strong><em>string day = String.Format(&#8220;{0}&#8221;, dt.Day);</em></strong></p>
<p><strong><em>string hour = String.Format(&#8220;{0}&#8221;, dt.Hour &lt;= 12 ? dt.Hour : dt.Hour-12);</em></strong></p>
<p><strong><em>string minute = String.Format(&#8220;{0:00}&#8221;, dt.Minute);</em></strong></p>
<p><strong><em>string amPM = String.Format(&#8220;{0}&#8221;, dt.Hour &gt;= 12 ? &#8220;p m&#8221; : &#8220;a m&#8221;); </em></strong></p>
<p><strong><em><br />
</em></strong></p>
<p><strong><em>string[] args =</em></strong></p>
<p><strong><em> {</em></strong></p>
<p><strong><em> dayOfWeek,</em></strong></p>
<p><strong><em> month,</em></strong></p>
<p><strong><em> day,</em></strong></p>
<p><strong><em> hour,</em></strong></p>
<p><strong><em> minute,</em></strong></p>
<p><strong><em> amPM</em></strong></p>
<p><strong><em> };</em></strong></p>
<p><strong><em><br />
</em></strong></p>
<p><strong><em>// spaces represent pauses, e.g., &#8220;Thursday November 18 at 3 19 P M &#8221;  (note no year)</em></strong></p>
<p><strong><em>string spokenDate = string.Format(&#8220;{0}  {1}  {2}   at {3}  {4}  {5}&#8221;, args); </em></strong></p>
<p>And note that I&#8217;m not dealing with the year portion of the date/time to voice &#8211; doing so would muddy up the waters for the listener &#8211; besides this is intended to be a real-time message and hopefully they know what year it is!</p>
<p>Next, we&#8217;ll gather up the custom parameters that were passed to this URL and parse them to ensure we&#8217;ve got the correct values or at least some proper defaults:</p>
<p><strong><em>string voicePref = Request["_voice"];</em></strong></p>
<p><strong><em> if (string.IsNullOrEmpty(voicePref))</em></strong></p>
<p><strong><em> {</em></strong></p>
<p><strong><em> voicePref = &#8220;woman&#8221;;</em></strong></p>
<p><strong><em> }</em></strong></p>
<p><strong><em><br />
</em></strong></p>
<p><strong><em> string message = Request["_message"];</em></strong></p>
<p><strong><em> bool hasMessage = true;</em></strong></p>
<p><strong><em> if (string.IsNullOrEmpty(message))</em></strong></p>
<p><strong><em> {</em></strong></p>
<p><strong><em> hasMessage = false;</em></strong></p>
<p><strong><em> }</em></strong></p>
<p><strong><em><br />
</em></strong></p>
<p><strong><em> string rawUrl = Request.RawUrl; </em></strong></p>
<p><strong><em> string sMusicValue = Request["_music"];</em></strong></p>
<p><strong><em> bool playMusic = string.IsNullOrEmpty(sMusicValue) == false &amp;&amp; (sMusicValue.Trim() == &#8220;1&#8243; || sMusicValue.ToLower().Trim() == &#8220;true&#8221; || sMusicValue.ToLower().Trim() == &#8220;yes&#8221;); </em></strong></p>
<p><em><strong>%&gt;</strong></em></p>
<p>And this marks the end of the param gathering portion of the page.  The params we&#8217;ve gathered can now be used, in part, to generate the TwilML the way we want it to play back over the phone to the person being called (and in the case of this demo, that&#8217;s you!).  So now we start the output of the TwilML, which is nothing more than pure XML with the appropriate TwilML tags.  As you can see, we&#8217;re injecting in the parameters in the appropriate places in the markup.  I realize that this looks a lot like classic ASP and I confess I&#8217;m not satisfied with this.  There are probably better approaches for sure (like having a TwilML C# library helper!) but I was neither able to fully test any that are out there nor write my own.</p>
<p>But what should be clear is that it&#8217;s fairly easy to block out the TwilML and then find the appropriate ASP.NET injection points and/or logic flow areas (if/else) blocks.  Here&#8217;s the TwilML with the ASP.NET params and logic included:</p>
<p><strong><em>&lt;Response&gt; </em></strong></p>
<p><span style="white-space: pre;"><strong><em> </em></strong></span><strong><em>&lt;Say voice=&#8221;&lt;%=voicePref %&gt;&#8221;&gt;Thank you for trying out the Pro  Works  Twilio demo.  The current date and time, Pacific Standard, is &lt;%=spokenDate %&gt;&lt;/Say&gt; </em></strong></p>
<p><strong><em> &lt;% if (hasMessage)</em></strong></p>
<p><strong><em> { %&gt;</em></strong></p>
<p><strong><em> &lt;Say voice=&#8221;&lt;%=voicePref %&gt;&#8221;&gt;Here is the message text you wanted us to convey: &lt;/Say&gt; </em></strong></p>
<p><strong><em> &lt;Say voice=&#8221;&lt;%=voicePref %&gt;&#8221;&gt;&lt;%=message%&gt;&lt;/Say&gt; </em></strong></p>
<p><strong><em> &lt;% } %&gt;</em></strong></p>
<p><strong><em> &lt;% else {%&gt;</em></strong></p>
<p><strong><em> &lt;Say voice=&#8221;&lt;%=voicePref %&gt;&#8221;&gt;You did not have any special message to convey. Hey, whatever!&lt;/Say&gt; </em></strong></p>
<p><strong><em> &lt;% } %&gt;</em></strong></p>
<p><strong><em><br />
</em></strong></p>
<p><strong><em> &lt;% if ( playMusic ) { %&gt;</em></strong></p>
<p><strong><em> <span style="white-space: pre;"> </span>&lt;Say voice=&#8221;&lt;%=voicePref %&gt;&#8221;&gt;You are clearly a person of style and taste,  so to conclude the demo, we invite you to sit back and enjoy the soothing tones of this jazzy music, written and performed by Rob Birdwell, a senior developer with Pro Works! Enjoy!&lt;/Say&gt; </em></strong></p>
<p><strong><em> &lt;Play&gt;http://birdwellmusic.com/Data/Audio/Troubadour.mp3&lt;/Play&gt;</em></strong></p>
<p><strong><em> &lt;% } %&gt;</em></strong></p>
<p><strong><em> &lt;% else {%&gt;</em></strong></p>
<p><strong><em> <span style="white-space: pre;"> </span>&lt;Say voice=&#8221;&lt;%=voicePref %&gt;&#8221;&gt;Ah-HA    you do not seem to be a fan of music &#8211; or maybe you were just uncertain.  That&#8217;s okay.  We will now assume that you have changed your mind and do want music; so sit back and enjoy the soothing tones of this jazzy music, written and performed by Rob Birdwell, a senior developer with Pro Works! Enjoy!&lt;/Say&gt; </em></strong></p>
<p><strong><em> &lt;Play&gt;http://birdwellmusic.com/Data/Audio/Troubadour.mp3&lt;/Play&gt;</em></strong></p>
<p><strong><em> &lt;% } %&gt;</em></strong></p>
<p><strong><em>&lt;/Response&gt; </em></strong></p>
<p>As you can see, we&#8217;ve incorporated some simple but non-trivial business logic into our little demo:  the preference for voice type (man or woman); the ability to read aloud a custom message; and of course the ability to listen to some music (written by me, Rob Birdwell) &#8211; which, as you discover, is no option at all!</p>
<p>In summary, the Twilio service is powerful and definitely something ProWorks will be looking to integrate into our existing and new clients as they express their need for such capabilities.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.proworks.com/blog/2010/11/22/adventures-in-twilio-and-c/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Umbraco 4.5.2 Custom Create Control Fix in Custom Admin Trees</title>
		<link>http://www.proworks.com/blog/2010/10/26/umbraco-4-5-custom-create-control-fix-in-custom-admin-trees/</link>
		<comments>http://www.proworks.com/blog/2010/10/26/umbraco-4-5-custom-create-control-fix-in-custom-admin-trees/#comments</comments>
		<pubDate>Tue, 26 Oct 2010 16:32:06 +0000</pubDate>
		<dc:creator>Jason</dc:creator>
				<category><![CDATA[For Developers]]></category>
		<category><![CDATA[Tutorials and How-to]]></category>
		<category><![CDATA[Umbraco Tips, Advice and How-Tos]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[asp.net]]></category>
		<category><![CDATA[cms]]></category>
		<category><![CDATA[commerce4umbraco]]></category>
		<category><![CDATA[ecommerce]]></category>
		<category><![CDATA[umbraco]]></category>
		<category><![CDATA[websites]]></category>

		<guid isPermaLink="false">http://www.proworks.com/blog/?p=1088</guid>
		<description><![CDATA[While working towards getting the Commerce for Umbraco project working in Umbraco 4.5.2 I encountered an issue that didn&#8217;t appear to have an obvious fix.  Luckily, a dive into the Umbraco source code provided an answer.
Commerce for Umbraco (C4U) has two custom creation dialogs for the Coupons and the Products.  In Umbraco 4.0.x [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.proworks.com/blog/wp-content/uploads/2010/10/dc4umb.png"><img class="size-full wp-image-1089 alignleft" style="margin-left: 0px; margin-right: 15px;" title="dc4umb" src="http://www.proworks.com/blog/wp-content/uploads/2010/10/dc4umb.png" alt="" width="84" height="100" /></a><a href="http://www.proworks.com/blog/wp-content/uploads/2011/03/PWBlogIcon_Developer.png"><img class="size-full wp-image-1207 alignright" title="PWBlogIcon_Developer" src="http://www.proworks.com/blog/wp-content/uploads/2011/03/PWBlogIcon_Developer.png" alt="Umbraco Developer Tutorial" width="175" height="129" /></a>While working towards getting the <a href="http://commerce4umbraco.codeplex.com/">Commerce for Umbraco</a> project working in <a href="http://umbraco.org/">Umbraco 4.5.2</a> I encountered an issue that didn&#8217;t appear to have an obvious fix.  Luckily, a dive into the Umbraco source code provided an answer.</p>
<p>Commerce for Umbraco (C4U) has two custom creation dialogs for the Coupons and the Products.  In Umbraco 4.0.x the dialog was closed after creation of the coupon/product and the tree refreshed by injecting the following javascript:</p>
<p><code>if (returnUrl == "") {<br />
Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "refresh", "&lt;script&gt;\ntop.reloadCurrentNode();\ntop.closeModal();&lt;/script&gt;");<br />
}<br />
else {<br />
Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "refresh", "&lt;script type=\"text/javascript\"&gt;\ntop.reloadCurrentNode();\ntop.right.location.href = '" + returnUrl + "';\ntop.closeModal();&lt;/script&gt;");<br />
}</code></p>
<p>However, this didn&#8217;t work in 4.5.2.  I always thought this was a bit hacky, and although the code is probably actually doing the same thing the new way looks cleaner:</p>
<p><code> BasePage.Current.ClientTools<br />
.ChangeContentFrameUrl(returnUrl)<br />
.ChildNodeCreated()<br />
.CloseModalWindow();</code></p>
<p>You will need to use the following namespaces as well:</p>
<p><code>using umbraco.cms.helpers;<br />
using umbraco.BasePages;</code></p>
<p>So that is how you close and refresh a custom create dialog in your custom admin tree in Umbraco 4.5.2.</p>
<p>Feel free to ask questions in the comments.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.proworks.com/blog/2010/10/26/umbraco-4-5-custom-create-control-fix-in-custom-admin-trees/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>How to Moderate All Comments in Blog 4 Umbraco</title>
		<link>http://www.proworks.com/blog/2010/06/17/how-to-moderate-all-comments-in-blog-4-umbraco/</link>
		<comments>http://www.proworks.com/blog/2010/06/17/how-to-moderate-all-comments-in-blog-4-umbraco/#comments</comments>
		<pubDate>Thu, 17 Jun 2010 23:34:56 +0000</pubDate>
		<dc:creator>Jason</dc:creator>
				<category><![CDATA[For Developers]]></category>
		<category><![CDATA[Tutorials and How-to]]></category>
		<category><![CDATA[Umbraco Tips, Advice and How-Tos]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[blog]]></category>
		<category><![CDATA[blog4umbraco]]></category>
		<category><![CDATA[comments]]></category>
		<category><![CDATA[moderation]]></category>
		<category><![CDATA[umbraco]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[websites]]></category>

		<guid isPermaLink="false">http://www.proworks.com/blog/?p=1014</guid>
		<description><![CDATA[The cool Blog 4 Umbraco package built by the Umbraco Team is a great package with a few features missing out of the box.  The fact that it is Open Source really rocks because it means we can fill in the gaps.  At ProWorks we have been slowly building on Blog 4 Umbraco and now [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.proworks.com/blog/wp-content/uploads/2011/03/PWBlogIcon_Developer.png"><img class="alignright size-full wp-image-1207" title="PWBlogIcon_Developer" src="http://www.proworks.com/blog/wp-content/uploads/2011/03/PWBlogIcon_Developer.png" alt="Umbraco Developer Tutorial" width="175" height="129" /></a>The cool <a href="http://our.umbraco.org/projects/blog-4-umbraco">Blog 4 Umbraco package</a> built by the <a href="http://umbraco.org/">Umbraco Team</a> is a great package with a few features missing out of the box.  The fact that it is Open Source really rocks because it means we can fill in the gaps.  At ProWorks we have been <a href="http://www.proworks.com/blog/tag/umbraco/">slowly building on Blog 4 Umbraco</a> and now have a pretty solid plug-in.  It may be time to try to get our changes back into the main branch <img src='http://www.proworks.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
<p>Recently, we had a request to have comments be moderated.  That means any comment posted would be initially marked as spam and wouldn&#8217;t post live to the site.  The blog owner then has to go into the comments area and manually approve each comment.  I&#8217;m not big on this, but for some people its important.</p>
<p>Unfortunately, this doesn&#8217;t come out of the box in Blog 4 Umbraco.  Luckily, its easy to do.</p>
<p>To add this functionality all you have to do is add a new class that derives from the SpamChecker class.</p>
<p>I created a new class called &#8220;AlwaysMarkSpamChecker.cs&#8221; under the &#8220;Spam&#8221; folder.</p>
<p><a href="http://www.proworks.com/blog/wp-content/uploads/2010/06/BlogCommentModeration_1.png"><img class="alignnone size-full wp-image-1016" title="BlogCommentModeration_1" src="http://www.proworks.com/blog/wp-content/uploads/2010/06/BlogCommentModeration_1.png" alt="" width="239" height="73" /></a></p>
<p>The class contained the following code:</p>
<pre>using System;
using System.Collections.Generic;
using System.Web;
using Umlaut.Umb.Blog.Interfaces;
using Joel.Net;

namespace Umlaut.Umb.Blog.Spam
{
    public class AlwaysMarkSpamChecker : SpamChecker
    {

        public AlwaysMarkSpamChecker()
        {
            this.ProviderName = "AlwaysSpam";
        }

        public override Boolean Check(int nodeid,
            string UserAgent, string UserIp, string Author,
            string AuthorEmail, string AuthorUrl, string Content)
        {
            return true;
        }

        public override void MarkAsHam(int nodeid, string Author, string AuthorEmail, string AuthorUrl, string Content)
        {

        }

        public override void MarkAsSpam(int nodeid, string Author, string AuthorEmail, string AuthorUrl, string Content)
        {

        }

    }
}</pre>
<p>Then I edited the /umbraco/plugins/blog4umbraco/SpamChecker.config file in my Umbraco installation  to look like this:</p>
<pre>&lt;?xml version="1.0"?&gt;
&lt;SpamChecker assembly="/bin/Umlaut.Umb.Blog" type="Umlaut.Umb.Blog.Spam.AlwaysMarkSpamChecker"&gt;
&lt;/SpamChecker&gt;</pre>
<p>Now when I add a new blog comment it will always be marked as Spam in the Comments tab.</p>
<p><a href="http://www.proworks.com/blog/wp-content/uploads/2010/06/BlogCommentModeration_2.png"><img class="alignnone size-full wp-image-1017" title="BlogCommentModeration_2" src="http://www.proworks.com/blog/wp-content/uploads/2010/06/BlogCommentModeration_2.png" alt="" width="629" height="246" /></a></p>
<p>If you have any questions or any problems, let me know!</p>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 249px; width: 1px; height: 1px; overflow: hidden;">
<pre>using System;
using System.Collections.Generic;
using System.Web;
using Umlaut.Umb.Blog.Interfaces;
using Joel.Net;

namespace Umlaut.Umb.Blog.Spam
{
    public class AlwaysMarkSpamChecker : SpamChecker
    {

        public AlwaysMarkSpamChecker()
        {
            this.ProviderName = "AlwaysSpam";
        }

        public override Boolean Check(int nodeid,
            string UserAgent, string UserIp, string Author,
            string AuthorEmail, string AuthorUrl, string Content)
        {
            return true;
        }

        public override void MarkAsHam(int nodeid, string Author, string AuthorEmail, string AuthorUrl, string Content)
        {

        }

        public override void MarkAsSpam(int nodeid, string Author, string AuthorEmail, string AuthorUrl, string Content)
        {

        }

    }
}</pre>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.proworks.com/blog/2010/06/17/how-to-moderate-all-comments-in-blog-4-umbraco/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>How to Generate an RSS Feed from Facebook</title>
		<link>http://www.proworks.com/blog/2010/05/06/how-to-generate-an-rss-feed-from-facebook/</link>
		<comments>http://www.proworks.com/blog/2010/05/06/how-to-generate-an-rss-feed-from-facebook/#comments</comments>
		<pubDate>Fri, 07 May 2010 05:49:17 +0000</pubDate>
		<dc:creator>Loyan</dc:creator>
				<category><![CDATA[Cool Tools]]></category>
		<category><![CDATA[Social Media and Web Marketing]]></category>
		<category><![CDATA[Tutorials and How-to]]></category>
		<category><![CDATA[dapper]]></category>
		<category><![CDATA[education]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[fan page]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[lead generation]]></category>
		<category><![CDATA[monitoring]]></category>
		<category><![CDATA[open dapper]]></category>
		<category><![CDATA[prospecting]]></category>
		<category><![CDATA[rss]]></category>
		<category><![CDATA[search]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://www.proworks.com/blog/?p=980</guid>
		<description><![CDATA[Facebook unlike Twitter and blogs do not publish an RSS feed for us. In addition it&#8217;s content is behind a login. This makes Facebook very challenging to monitor. This is a method for generating an RSS feed of content from Facebook utilizing Google search, Open Dapper and topping it off with an RSS reader. Note
The idea [...]]]></description>
			<content:encoded><![CDATA[<p>Facebook unlike Twitter and blogs do not publish an RSS feed for us. In addition it&#8217;s content is behind a login. This makes Facebook very challenging to monitor. This is a method for generating an RSS feed of content from Facebook utilizing Google search, Open Dapper and topping it off with an RSS reader. Note</p>
<p>The idea is this. If someone was to ask a question or mention something relevant to your brand, market, product or service on Facebook would you like to know about it? Hint: So you can do something about it.</p>
<p>Note that at this time content on personal profiles is private and protected from even Google. Content from Facebook Pages and groups are accessible to Google search.</p>
<p><strong>Step 1. Customize Your Google Search</strong></p>
<p>Take advantage of Google to customize a search matching your business. Use the Advanced Search (link is right next to the Search button) and/or the Google search operators to refine your search. Here is a <a href="http://www.google.com/help/cheatsheet.html" target="_blank">Google Cheat Sheet</a> with a list of operators.</p>
<p>To get results only from Facebook include &#8220;site:www.facebook.com&#8221; to your search.</p>
<p>In the example below we are asking Google to return all results that include the term financial or its synonyms AND Corvallis, limited to results from Facebook. Also note we have selected the Latest results option on the left of the Google search page.</p>
<p><a href="http://www.proworks.com/blog/wp-content/uploads/2010/05/google-search-2.png"><img class="aligncenter size-full wp-image-983" title="google-search-2" src="http://www.proworks.com/blog/wp-content/uploads/2010/05/google-search-2.png" alt="google-search-2" width="530" height="405" /></a></p>
<p>In the example below we asking for results including the term Umbraco on Facebook sorted by date.</p>
<p><a href="http://www.proworks.com/blog/wp-content/uploads/2010/05/google-search-4.png"><img class="aligncenter size-full wp-image-985" title="google-search-4" src="http://www.proworks.com/blog/wp-content/uploads/2010/05/google-search-4.png" alt="google-search-4" width="530" height="395" /></a></p>
<p>Yet another option is to get results based on geography. In this case we are requesting results from Corvallis, Oregon (see the option in the left most column below).</p>
<p><a href="http://www.proworks.com/blog/wp-content/uploads/2010/05/google-search-6.png"><img class="aligncenter size-full wp-image-986" title="google-search-6" src="http://www.proworks.com/blog/wp-content/uploads/2010/05/google-search-6.png" alt="google-search-6" width="530" height="384" /></a></p>
<p>Once you have a search you like save the URL address or just keep the browser open in the results page. We&#8217;ll need the URL in Step 2.</p>
<p><em>Tips and Advice:</em></p>
<ul>
<li><em>Don&#8217;t discount of your search doesn&#8217;t yield many or even any results (right now).</em></li>
<li><em>More searches with fewer focused results is better than fewer searches with many results. In this way you will have more fine control over your searches.</em></li>
<li><em>Consider filtering your results by multiple cities rather than a larger region.</em></li>
<li><em>You can exclude results from your own Facebook page by adding &#8220;-site:www.facebook.com/YourPageNameHere&#8221; to the search.</em></li>
</ul>
<p><strong>Step 2. Use Open Dapper to Create a New &#8220;Dapp&#8221;</strong></p>
<p>Go to <a href="http://www.dapper.net/open/">http://www.dapper.net/open/</a>. I like to use a second browser tab here. I recommend you create an account to use for this so you can save your &#8220;Dapp&#8221; and adjust it later. Select &#8220;create a new Dapp&#8221;. You can choose a format at this stage but its not needed.</p>
<p><a href="http://www.proworks.com/blog/wp-content/uploads/2010/05/dapper-1.png"><img class="aligncenter size-full wp-image-987" title="dapper-1" src="http://www.proworks.com/blog/wp-content/uploads/2010/05/dapper-1.png" alt="dapper-1" width="530" height="317" /></a></p>
<p>Dapper will ask you a URL. Copy and paste the URL from your Google search here. You can also select the RSS feed option at this stage. Click the Next Step button to continue.</p>
<p><a href="http://www.proworks.com/blog/wp-content/uploads/2010/05/dapper-2.png"><img class="aligncenter size-full wp-image-988" title="dapper-2" src="http://www.proworks.com/blog/wp-content/uploads/2010/05/dapper-2.png" alt="dapper-2" width="530" height="371" /></a></p>
<p>Dapper will process the URL and you will see the Google results page inside of Dapper. Find the Add to Basket button to add this page to your Dapp. Click Next Step to continue. Dapper will ask you if you want to use just one page here. The answer is yes, you can keep going.</p>
<p><a href="http://www.proworks.com/blog/wp-content/uploads/2010/05/dapper-3.png"><img class="aligncenter size-full wp-image-990" title="dapper-3" src="http://www.proworks.com/blog/wp-content/uploads/2010/05/dapper-3.png" alt="dapper-3" width="530" height="286" /></a></p>
<p>Using your mouse select the content for your RSS feed, the 1)title 2)summary and 3)date if its available from the Google search results page inside of Dapper.</p>
<p><a href="http://www.proworks.com/blog/wp-content/uploads/2010/05/dapper-4.png"><img class="aligncenter size-full wp-image-991" title="dapper-4" src="http://www.proworks.com/blog/wp-content/uploads/2010/05/dapper-4.png" alt="dapper-4" width="530" height="355" /></a></p>
<p>You will select these three items separately, save them using the Save Field button and name them appropriately. Once you have selected your content click Next Step to continue.</p>
<p><a href="http://www.proworks.com/blog/wp-content/uploads/2010/05/dapper-5.png"><img class="aligncenter size-full wp-image-992" title="dapper-5" src="http://www.proworks.com/blog/wp-content/uploads/2010/05/dapper-5.png" alt="dapper-5" width="530" height="343" /></a></p>
<p>Preview your feed and make sure everything looks OK. You should see your title, summary and date if it was available. Click Next Step if it looks good. Go Back if you need to reselect your content.</p>
<p><a href="http://www.proworks.com/blog/wp-content/uploads/2010/05/dapper-6.png"><img class="aligncenter size-full wp-image-993" title="dapper-6" src="http://www.proworks.com/blog/wp-content/uploads/2010/05/dapper-6.png" alt="dapper-6" width="530" height="290" /></a></p>
<p>Save your Dapp. Give it a good name. Describe what you are searching for and from where so you can easily identify it later. A description and tags aren&#8217;t needed. Click Next Step to continue.</p>
<p><a href="http://www.proworks.com/blog/wp-content/uploads/2010/05/dapper-7.png"><img class="aligncenter size-full wp-image-994" title="dapper-7" src="http://www.proworks.com/blog/wp-content/uploads/2010/05/dapper-7.png" alt="dapper-7" width="530" height="379" /></a></p>
<p>Under Create RSS Feed make sure your Item Title, Item Text and Date Published are assigned to the appropriate content you selected earlier. The URL next to the RSS button is your new customized RSS feed.</p>
<p><a href="http://www.proworks.com/blog/wp-content/uploads/2010/05/dapper-8.png"><img class="aligncenter size-full wp-image-995" title="dapper-8" src="http://www.proworks.com/blog/wp-content/uploads/2010/05/dapper-8.png" alt="dapper-8" width="530" height="385" /></a></p>
<p>Save the RSS Feed URL. We&#8217;ll use it in the next step.</p>
<p><strong>Step 3. Use an RSS Reader to View Your RSS Feed(s) </strong></p>
<p><a href="http://www.google.com/reader" target="_blank">Google Reader</a> is just one of many free RSS readers available to you. <a href="http://www.google.com/ig" target="_blank">iGoogle</a> is also free. Its really a matter of preference.</p>
<p>In Google Reader below you can subscribe to your RSS feed by clicking the Add a subscription button. Below is what it looks like after the RSS has been subscribed to. You can see the Google search results inside Google Reader. The title is a link to the original source. Clicking it will take you there.</p>
<p><a href="http://www.proworks.com/blog/wp-content/uploads/2010/05/rss-reader-2.png"><img class="aligncenter size-full wp-image-997" title="rss-reader-2" src="http://www.proworks.com/blog/wp-content/uploads/2010/05/rss-reader-2.png" alt="rss-reader-2" width="952" height="413" /></a></p>
<p>And there you have it. With many RSS feeds automatically updating your RSS reader you will be able to monitor Facebook and just about any other web page that is publicly accessible. Even if it doesn&#8217;t publish an RSS feed. Yes, there are some very cool business applications here.</p>
<p>Do you have any question about this? Suggestions? Please share them here with us as a comment.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.proworks.com/blog/2010/05/06/how-to-generate-an-rss-feed-from-facebook/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Add A Custom Tab to Your Facebook Fan Page &#8211; Starter Template Included</title>
		<link>http://www.proworks.com/blog/2010/04/30/add-a-custom-tab-to-your-facebook-fan-page-starter-template-included/</link>
		<comments>http://www.proworks.com/blog/2010/04/30/add-a-custom-tab-to-your-facebook-fan-page-starter-template-included/#comments</comments>
		<pubDate>Fri, 30 Apr 2010 15:38:26 +0000</pubDate>
		<dc:creator>Jason</dc:creator>
				<category><![CDATA[Social Media and Web Marketing]]></category>
		<category><![CDATA[Tutorials and How-to]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[fan page]]></category>
		<category><![CDATA[fbml]]></category>
		<category><![CDATA[tab]]></category>

		<guid isPermaLink="false">http://www.proworks.com/blog/?p=956</guid>
		<description><![CDATA[Adding a custom tab to your Facebook Fan page really isn&#8217;t that hard if you know a little HTML. But if you are daunted by CSS and layout, then today is your luck day.  I&#8217;m going to give you a starter template to get going with and you can use that to get something [...]]]></description>
			<content:encoded><![CDATA[<p>Adding a custom tab to your Facebook Fan page really isn&#8217;t that hard if you know a little HTML. But if you are daunted by CSS and layout, then today is your luck day.  I&#8217;m going to give you a starter template to get going with and you can use that to get something up.</p>
<p><strong>The Goal:</strong></p>
<ul>
<li>Build some HTML/CSS that works within the new 520px width requirements set by Facebook</li>
<li>Add a YouTube video</li>
<li>Not use iFrames</li>
</ul>
<p><strong>The Process:</strong></p>
<p><strong>1. Get to the admin section of your Facebook Fan Page. </strong></p>
<p>Simply click the &#8220;Edit Page&#8221; link below your Fan Page photo on the Wall tab:</p>
<p><img class="alignnone size-full wp-image-957" title="fb_tab_1" src="http://www.proworks.com/blog/wp-content/uploads/2010/04/fb_tab_1.png" alt="fb_tab_1" width="220" height="113" /></p>
<p><strong>2. Install the Static FBML Application.</strong></p>
<p>At the bottom of the admin area, there is a &#8220;More Applications&#8221; section.</p>
<p><img class="alignnone size-full wp-image-958" title="fb_tab_2" src="http://www.proworks.com/blog/wp-content/uploads/2010/04/fb_tab_2.png" alt="fb_tab_2" width="390" height="125" /></p>
<p>If you&#8217;re lucky the Static FBML app will be listed like above in the apps you might find useful.  If that is the case, click the &#8220;Static FBML&#8221; link.</p>
<p>If it isn&#8217;t, then click &#8220;Browse More&#8221; and search for &#8220;Static FBML&#8221; or &#8220;FBML&#8221;.</p>
<p><img class="alignnone size-full wp-image-959" title="fb_pages_3" src="http://www.proworks.com/blog/wp-content/uploads/2010/04/fb_pages_3.png" alt="fb_pages_3" width="788" height="248" /></p>
<p>Again, click &#8220;Static FBML&#8221;.</p>
<p>When you&#8217;re on the Static FBML app page, simply click the &#8220;Add to my Page&#8221; link below the icon in the top left.</p>
<p><img class="alignnone size-full wp-image-960" title="fb_pages_4" src="http://www.proworks.com/blog/wp-content/uploads/2010/04/fb_pages_4.png" alt="fb_pages_4" width="276" height="155" /></p>
<p>There will be a popup to select the Page you want to add it to.  Find the correct page and click  the &#8220;Add to Page&#8221; button next to it.</p>
<p><img class="alignnone size-full wp-image-961" title="fb_pages_5" src="http://www.proworks.com/blog/wp-content/uploads/2010/04/fb_pages_5.png" alt="fb_pages_5" width="466" height="142" /></p>
<p>Now go back to the admin area of your Fan Page and lets add the template.</p>
<p><strong>3. Add content to your tab.</strong></p>
<p>Click the Edit link on your new FBML application:</p>
<p><img class="alignnone size-full wp-image-962" title="fb_tab_3" src="http://www.proworks.com/blog/wp-content/uploads/2010/04/fb_tab_3.png" alt="fb_tab_3" width="568" height="131" /></p>
<p>You now should see the edit screen.  Edit your box title text which will be the new tab title so keep it short.</p>
<p><img class="alignnone size-full wp-image-963" title="fb_tab_4" src="http://www.proworks.com/blog/wp-content/uploads/2010/04/fb_tab_4.png" alt="fb_tab_4" width="589" height="602" /></p>
<p>Now comes the tricky part.  Getting HTML and styling into your new tab FBML content area.</p>
<p>Luckily, I have a starter template to get you going <img src='http://www.proworks.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Download the html code here: <a href="http://www.proworks.com/facebook/proworksStarterKit.zip">http://www.proworks.com/facebook/proworksStarterKit.zip</a> and copy/paste the code into the FBML textbox.  You can also get it from here: <a href="http://pastie.org/940569">http://pastie.org/940569</a></p>
<p>I&#8217;ll explain this code below.  For now, just paste it in and click the &#8220;Save Changes&#8221; button.</p>
<p>Lets go back to the admin area of your fan page and get this tab live.  The easiest way is to click the &#8220;edit&#8221; link at the top of the FBML edit page.  Now click the &#8220;Application Settings&#8221; link in the FBML box under Applications.  Then click the &#8220;remove&#8221; link next to &#8220;Box:&#8221; and the &#8220;add&#8221; link next to &#8220;Tab:&#8221; in the resulting popup.  It should look something like this when you&#8217;re done:</p>
<p><img class="alignnone size-full wp-image-964" title="fb_tab_5" src="http://www.proworks.com/blog/wp-content/uploads/2010/04/fb_tab_5.png" alt="fb_tab_5" width="710" height="247" /></p>
<p>Now you should see your new tab on your Facebook Fan Page!  If you have a lot of tabs you may need to click the &gt;&gt; arrows on the right side of the tabs.  You can drag tabs around to reorder them.  It should look something like this:</p>
<p><img class="alignnone size-full wp-image-965" style="border: 1px solid #eeeeee; margin: 5px;" title="fb_tab_6" src="http://www.proworks.com/blog/wp-content/uploads/2010/04/fb_tab_6.png" alt="fb_tab_6" width="554" height="379" /></p>
<p><strong>4. Customize with your own stuff</strong></p>
<p>OK, so now you have a new tab.  First thing to note is that this will not accept all HTML and styling.  However, you can add new photos, links, text, or even flash fairly easily.</p>
<p>First thing you&#8217;ll want to to is add your own image/text to the box on the right.  The image needs to be hosted on your server somewhere. <script src="http://pastie.org/940583.js"></script> Simply edit the &lt;a href=&#8221;http://www.proworks.com&#8221;&gt; to your site URL and change the &lt;img alt=&#8221;" /&gt; src to an image location of your choice.  The ideal image width for the right side boxes in this layout is 168 pixels.</p>
<h3>YouTube Video</h3>
<p>Changing the YouTube video to your video is actually very easy as well.  Simply find the video you want to show and copy the weird text after the &#8220;v=&#8221; in the URL.</p>
<p><img class="alignnone size-full wp-image-966" title="fb_tab_7" src="http://www.proworks.com/blog/wp-content/uploads/2010/04/fb_tab_7.png" alt="fb_tab_7" width="398" height="37" /></p>
<p>In this case its the &#8220;sIFYPQjYhv8&#8243; part.  Then replace all occurrences of &#8220;sIFYPQjYhv8&#8243; in the code below (in your tab FBML content).  <script src="http://pastie.org/940595.js"></script></p>
<p>Save the changes and your have your content in the starter template and you&#8217;re on your way!</p>
<p>If you want to get adventurous and get other crazy things like Flickr slideshows or Vimeo videos or other cool things, check out the <a href="http://www.hyperarts.com/blog/category/facebook-static-fbml/">list of blogs by HyperArts on FBML and Static FBML</a>.  Its a really good resource.</p>
<p>Thanks and let me know if you have questions or comments below!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.proworks.com/blog/2010/04/30/add-a-custom-tab-to-your-facebook-fan-page-starter-template-included/feed/</wfw:commentRss>
		<slash:comments>42</slash:comments>
		</item>
	</channel>
</rss>

