﻿<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel>
    <title>Professional Edition</title>
    <description>I am a self-proclaimed DotNetNuke Evangelist, but I also use it daily. In the DNN world, I am a programmer, DBA, architect, business analyst, speaker, tutorial writer, administrator, and just overall a DNN junkie... Therefore, you may see a few posts here that are not DNN or .Net related, but for the most part it will be all DNN all day - every day!  Every day is DotNetNuke day!</description>
    <link>http://www.willstrohl.com/Blog/BlogId/3</link>
    <language>en-US</language>
    <managingEditor>wills@strohlsitedesign.com</managingEditor>
    <webMaster>wills@strohlsitedesign.com</webMaster>
    <pubDate>Mon, 22 Mar 2010 03:58:06 GMT</pubDate>
    <lastBuildDate>Mon, 22 Mar 2010 03:58:06 GMT</lastBuildDate>
    <docs>http://backend.userland.com/rss</docs>
    <generator>Blog RSS Generator Version 3.5.1.0</generator>
    <item>
      <title>MSDN Webcast: Simulcast Event: Orlando Code Camp</title>
      <description>&lt;p&gt;&lt;a href="http://orlandocodecamp.com" target="_blank"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="Orlando Code Camp" border="0" alt="Orlando Code Camp" align="left" src="/Portals/1/Blog/Files/5/529/WLW-OrlandoCodeCamp2010CallforSpeakers_E47-OrlandoCodeCamp_trans_358x153_thumb.png" width="358" height="153" /&gt;&lt;/a&gt; I already teased this a bit in my rundown on &lt;a href="http://www.willstrohl.com/Blog/EntryId/561/What-to-Expect-from-Orlando-Code-Camp-2010" target="_blank"&gt;what to expect from this years Orlando Code Camp&lt;/a&gt;.  Now, I am able to tell you specifically which sessions will be broadcast out to the world for your enjoyment.  This is very exciting for us for a couple of reasons.  First, this is a new thing for us to do and it’s a very welcome challenge to overcome for this years code camp.  Second, Microsoft has honored our code camp with being the very first code camp to ever do this.  With numerous code camps happening all over of the world each month, we are very truly honored.  And don’t worry…  We are well aware of the pressure that this brings.  :)&lt;/p&gt;  &lt;p&gt;All day long, the folks at Microsoft are helping us to stream a high-quality video feed of 6 of the sessions at the code camp.  The first session begins at 8:30 AM EST.  If you’re in another time zone, adjust your alarm clocks and partying accordingly.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;img style="border-right-width: 0px; margin: 0px 5px 5px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Will Strohl" border="0" alt="Will Strohl" align="left" src="/Portals/1/Blog/Files/3/562/WLW-MSDNWebcastSimulcastEventOrlandoCodeCamp_11B23-Will-Strohl_3.jpg" width="104" height="104" /&gt; Session 1: Installing and Upgrading DotNetNuke and DNN Modules, Will Strohl&lt;/strong&gt;     &lt;br /&gt;8:30 AM – 9:30 AM EST     &lt;br /&gt;There are quite a few misconceptions out there about the level of difficulty when installing and upgrading &lt;a href="http://www.dotnetnuke.com" target="_blank"&gt;DotNetNuke®&lt;/a&gt;, we'll walk you through the entire installation and upgrade process outlining some of the common problems and solutions.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;img style="border-right-width: 0px; margin: 0px 0px 5px 5px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Esteban Garcia" border="0" alt="Esteban Garcia" align="right" src="/Portals/1/Blog/Files/3/562/WLW-MSDNWebcastSimulcastEventOrlandoCodeCamp_11B23-Esteban-Garcia_3.jpg" width="84" height="84" /&gt; Session 2: Scalable Cloud Applications with Table Storage, Esteban Garcia&lt;/strong&gt;     &lt;br /&gt;9:45 AM – 10:45 AM EST     &lt;br /&gt;Learn how to take advantage of Windows Azure Table storage to manage your data at a fraction of the cost and with great scalability. We'll create a sample application and explore the different features of table storage on your dev machine and in the cloud.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;img style="border-right-width: 0px; margin: 0px 5px 5px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Stan Schultes" border="0" alt="Stan Schultes" align="left" src="/Portals/1/Blog/Files/3/562/WLW-MSDNWebcastSimulcastEventOrlandoCodeCamp_11B23-Stan-Schultes_3.jpg" width="104" height="104" /&gt; Session 3: Getting RAD with Microsoft Visual Studio 2010, Stan Schultes&lt;/strong&gt;     &lt;br /&gt;11:00 AM – 12:00 PM EST     &lt;br /&gt;This demo-intensive session covers the improved support for building distributed business applications in VS2010. We'll focus on some of the improvements and new advanced features.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;img style="border-right-width: 0px; margin: 0px 0px 5px 5px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Kevin Wolf" border="0" alt="Kevin Wolf" align="right" src="/Portals/1/Blog/Files/3/562/WLW-MSDNWebcastSimulcastEventOrlandoCodeCamp_11B23-Kevin-Wolf_3.jpg" width="100" height="100" /&gt; Session 4: Windows Phone 7, Nikita Polyakov (not pictured) and Kevin D. Wolf&lt;/strong&gt;     &lt;br /&gt;1:00 PM – 2:00 PM EST     &lt;br /&gt;There really isn’t anything that they are allowed to say about this session yet, because the content of their topic has been highly confidential until now.  They are talking about some of the things announced about Windows Phone 7 at Mix.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;img style="border-right-width: 0px; margin: 0px 5px 5px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Sayed Hashimi" border="0" alt="Sayed Hashimi" align="left" src="/Portals/1/Blog/Files/3/562/WLW-MSDNWebcastSimulcastEventOrlandoCodeCamp_11B23-Sayed-Hashimi_3.jpg" width="104" height="86" /&gt; Session 5: Microsoft ASP.NET MVC Custom View Helpers, Sayed Hashimi&lt;/strong&gt;     &lt;br /&gt;2:15 PM – 3:15 PM EST     &lt;br /&gt;If you've been using ASP.NET MVC then you've certainly been using some of the built in view helper methods that are available. We'll take an in-depth look at how you can easily and effectively create your own view helpers and discuss how the default view helpers were created and the benefits that they provide.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;img style="border-right-width: 0px; margin: 0px 0px 5px 5px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Diane Leeper" border="0" alt="Diane Leeper" align="right" src="/Portals/1/Blog/Files/3/562/WLW-MSDNWebcastSimulcastEventOrlandoCodeCamp_11B23-Diane-Leeper_3.png" width="104" height="104" /&gt; Session 6: Design for Developers, Diane Leeper&lt;/strong&gt;     &lt;br /&gt;4:00 PM – 5:00 PM EST     &lt;br /&gt;Design is a plan for arranging elements in such a way as best to accomplish a particular purpose. It’s also the secret weapon of your developer toolkit. Learn 5 of the key fundamentals of design and how they can help your applications stand out.&lt;/p&gt;  &lt;p&gt;If you’re physically attending this event, these sessions will not be in the same room as the rest of the sessions that are in the same track.  Due to the technical needs to broadcast these sessions, they will be in another room, as if they were all part of the same track.  We will let you know what room to go to on the day of the event – just like the rest of the tracks.&lt;/p&gt;  &lt;p&gt;If you’re not excited about this, I don’t know what &lt;em&gt;could&lt;/em&gt; get you excited!  You have a small mix of everything that you’d want in a day of learning about various Microsoft technologies.   &lt;/p&gt;  &lt;p&gt;&lt;a href="https://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032447269&amp;EventCategory=4&amp;culture=en-US&amp;CountryCode=US" target="_blank"&gt;Sign up for the MSDN webcast&lt;/a&gt;, or &lt;a href="http://orlandocodecamp.com/" target="_blank"&gt;register to attend the event&lt;/a&gt; if you live in the Orlando area.&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:0dec3285-b893-44f4-838f-91b34d41976f" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Orlando+Code+Camp" rel="tag"&gt;Orlando Code Camp&lt;/a&gt;,&lt;a href="http://technorati.com/tags/MSDN" rel="tag"&gt;MSDN&lt;/a&gt;,&lt;a href="http://technorati.com/tags/DotNetNuke" rel="tag"&gt;DotNetNuke&lt;/a&gt;,&lt;a href="http://technorati.com/tags/DNN" rel="tag"&gt;DNN&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Cloud" rel="tag"&gt;Cloud&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Azure" rel="tag"&gt;Azure&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Visual+Studio" rel="tag"&gt;Visual Studio&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Windows+Phone+7" rel="tag"&gt;Windows Phone 7&lt;/a&gt;,&lt;a href="http://technorati.com/tags/ASP.Net" rel="tag"&gt;ASP.Net&lt;/a&gt;,&lt;a href="http://technorati.com/tags/MVC" rel="tag"&gt;MVC&lt;/a&gt;,&lt;a href="http://technorati.com/tags/User+Experience" rel="tag"&gt;User Experience&lt;/a&gt;&lt;/div&gt;</description>
      <link>http://www.willstrohl.com/Blog/EntryId/562/MSDN-Webcast-Simulcast-Event-Orlando-Code-Camp</link>
      <author>wills@strohlsitedesign.com</author>
      <comments>http://www.willstrohl.com/Blog/EntryId/562/MSDN-Webcast-Simulcast-Event-Orlando-Code-Camp#Comments</comments>
      <guid isPermaLink="true">http://www.willstrohl.com/Blog/EntryId/562/MSDN-Webcast-Simulcast-Event-Orlando-Code-Camp</guid>
      <pubDate>Sat, 20 Mar 2010 20:46:00 GMT</pubDate>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.willstrohl.com/DesktopModules/Blog/Trackback.aspx?id=562</trackback:ping>
    </item>
    <item>
      <title>Delete Soft Deleted Users After Deleting Portals</title>
      <description>&lt;p&gt;I ran into an interesting situation last night.  I don’t know why I hadn’t noticed this in the past.  My blog site was originally one of many in a single &lt;a href="http://www.dotnetnuke.com" target="_blank"&gt;DotNetNuke®&lt;/a&gt; installation or instance.  Since it has grown in popularity and traffic, I had to move it to it’s own standalone DNN instance.  The quickest way to make that happen was to move a copy of the original instance, and delete all of the other portals that came with it.  In doing so, this left all of the users from the other portals still in the &lt;font face="Courier New"&gt;Users&lt;/font&gt; table in the database.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font color="#ff0000"&gt;&lt;strong&gt;WARNING!!!&lt;/strong&gt; Don’t just run the queries here. Read the post in detail first. Also, BACKUP your database before manually changing any data.  You may severely mess up your site. &lt;u&gt;You’ve been warned&lt;/u&gt;!&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;At first, I kind of panicked, because I was looking at the users in my Superusers Account module.  It was 100+ pages of users!  We all know that there is probably not a single site out there that has 10 super users, much less 100+ pages worth of super users.  In the first page, there were several test accounts, so my first thought was that I had been hacked at some point.  However, I didn’t take the history of the portal into account.  &lt;/p&gt;  &lt;p&gt;As it turns out, I had learned in a very scary way how DNN handles user accounts when portals are deleted.  I am not sure of the thought process behind it, but the users are soft deleted from the portals that get deleted.  In this situation, this has a couple of distinctive attributes to take note of.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;The &lt;font face="Courier New"&gt;IsDeleted&lt;/font&gt; column in the &lt;font face="Courier New"&gt;Users&lt;/font&gt; table is 1&lt;/li&gt;    &lt;li&gt;The &lt;font face="Courier New"&gt;PortalId&lt;/font&gt; column in the &lt;font face="Courier New"&gt;UserPortals&lt;/font&gt; table is &lt;font face="Courier New"&gt;NULL&lt;/font&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;You can see these attributes by running the following query:&lt;/p&gt;  &lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;   &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;     &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;SELECT&lt;/span&gt; up.[PortalId], u.[UserID], u.[Username], u.[FirstName], u.[LastName], u.[IsSuperUser], u.[Email], u.[DisplayName], u.[IsDeleted] &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;FROM&lt;/span&gt; [databaseOwner}[{objectQualifier}Users] u &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt;   3:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;LEFT&lt;/span&gt; &lt;span style="color: #0000ff"&gt;OUTER&lt;/span&gt; &lt;span style="color: #0000ff"&gt;JOIN&lt;/span&gt; [dbo].[UserPortals] up &lt;span style="color: #0000ff"&gt;ON&lt;/span&gt; u.[UserId] = up.[UserId] &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum4"&gt;   4:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;ORDER&lt;/span&gt; &lt;span style="color: #0000ff"&gt;BY&lt;/span&gt; up.[PortalId], up.[UserId];&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum5"&gt;   5:&lt;/span&gt; &lt;span style="color: #008000"&gt;-- OR --&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum6"&gt;   6:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;SELECT&lt;/span&gt; up.[PortalId], u.[UserID], u.[Username], u.[FirstName], u.[LastName], u.[IsSuperUser], u.[Email], u.[DisplayName], u.[IsDeleted] &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum7"&gt;   7:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;FROM&lt;/span&gt; [dbo].[Users] u &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum8"&gt;   8:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;LEFT&lt;/span&gt; &lt;span style="color: #0000ff"&gt;OUTER&lt;/span&gt; &lt;span style="color: #0000ff"&gt;JOIN&lt;/span&gt; [dbo].[UserPortals] up &lt;span style="color: #0000ff"&gt;ON&lt;/span&gt; u.[UserId] = up.[UserId] &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum9"&gt;   9:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;ORDER&lt;/span&gt; &lt;span style="color: #0000ff"&gt;BY&lt;/span&gt; up.[PortalId], up.[UserId];&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;At first glance, this appears to be an easy fix.  That is, if you’re not paying attention.  Just delete all of the users that are no longer associated with a portal.  Let’s try it!&lt;/p&gt;

&lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;
  &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;DELETE&lt;/span&gt; &lt;span style="color: #0000ff"&gt;FROM&lt;/span&gt; {databaseOwner}[{objectQualifier}Users] &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;WHERE&lt;/span&gt; [UserId] &lt;span style="color: #0000ff"&gt;IN&lt;/span&gt; (&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt;   3:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;SELECT&lt;/span&gt; u.[UserId] &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum4"&gt;   4:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;FROM&lt;/span&gt; {databaseOwner}[{objectQualifier}Users] u &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum5"&gt;   5:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;LEFT&lt;/span&gt; &lt;span style="color: #0000ff"&gt;OUTER&lt;/span&gt; &lt;span style="color: #0000ff"&gt;JOIN&lt;/span&gt; {databaseOwner}[{objectQualifier}UserPortals] up &lt;span style="color: #0000ff"&gt;ON&lt;/span&gt; u.[UserId] = up.[UserId] &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum6"&gt;   6:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;WHERE&lt;/span&gt; up.[PortalId] &lt;span style="color: #0000ff"&gt;IS&lt;/span&gt; &lt;span style="color: #0000ff"&gt;NULL&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum7"&gt;   7:&lt;/span&gt; )&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum8"&gt;   8:&lt;/span&gt; &lt;span style="color: #008000"&gt;-- OR -- &lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum9"&gt;   9:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;DELETE&lt;/span&gt; &lt;span style="color: #0000ff"&gt;FROM&lt;/span&gt; [dbo].[Users] &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum10"&gt;  10:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;WHERE&lt;/span&gt; [UserId] &lt;span style="color: #0000ff"&gt;IN&lt;/span&gt; (&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum11"&gt;  11:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;SELECT&lt;/span&gt; u.[UserId] &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum12"&gt;  12:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;FROM&lt;/span&gt; [dbo].[Users] u &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum13"&gt;  13:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;LEFT&lt;/span&gt; &lt;span style="color: #0000ff"&gt;OUTER&lt;/span&gt; &lt;span style="color: #0000ff"&gt;JOIN&lt;/span&gt; [dbo].[UserPortals] up &lt;span style="color: #0000ff"&gt;ON&lt;/span&gt; u.[UserId] = up.[UserId] &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum14"&gt;  14:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;WHERE&lt;/span&gt; up.[PortalId] &lt;span style="color: #0000ff"&gt;IS&lt;/span&gt; &lt;span style="color: #0000ff"&gt;NULL&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum15"&gt;  15:&lt;/span&gt; )&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Well, that didn’t work so well.  What I failed to notice is what you might not have as well.  Super User accounts are not associated to a portal.  So the previous query would have deleted all of those users as well.  D’oh!  Luckily, I backup my database before I do anything like this, so I just restored it real quick.  &lt;/p&gt;

&lt;p&gt;To delete all of the soft deleted users from the other portals, we need to adjust the previous query to filter out the super user accounts.&lt;/p&gt;

&lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;
  &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;DELETE&lt;/span&gt; &lt;span style="color: #0000ff"&gt;FROM&lt;/span&gt; {databaseOwner}[{objectQualifier}Users] &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;WHERE&lt;/span&gt; [UserId] &lt;span style="color: #0000ff"&gt;IN&lt;/span&gt; (&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt;   3:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;SELECT&lt;/span&gt; u.[UserId] &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum4"&gt;   4:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;FROM&lt;/span&gt; {databaseOwner}[{objectQualifier}Users] u &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum5"&gt;   5:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;LEFT&lt;/span&gt; &lt;span style="color: #0000ff"&gt;OUTER&lt;/span&gt; &lt;span style="color: #0000ff"&gt;JOIN&lt;/span&gt; {databaseOwner}[{objectQualifier}UserPortals] up &lt;span style="color: #0000ff"&gt;ON&lt;/span&gt; u.[UserId] = up.[UserId] &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum6"&gt;   6:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;WHERE&lt;/span&gt; up.[PortalId] &lt;span style="color: #0000ff"&gt;IS&lt;/span&gt; &lt;span style="color: #0000ff"&gt;NULL&lt;/span&gt; &lt;span style="color: #0000ff"&gt;AND&lt;/span&gt; &lt;span style="color: #0000ff"&gt;NOT&lt;/span&gt; u.[IsSuperUser] = 1&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum7"&gt;   7:&lt;/span&gt; )&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum8"&gt;   8:&lt;/span&gt; &lt;span style="color: #008000"&gt;-- OR -- &lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum9"&gt;   9:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;DELETE&lt;/span&gt; &lt;span style="color: #0000ff"&gt;FROM&lt;/span&gt; [dbo].[Users] &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum10"&gt;  10:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;WHERE&lt;/span&gt; [UserId] &lt;span style="color: #0000ff"&gt;IN&lt;/span&gt; (&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum11"&gt;  11:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;SELECT&lt;/span&gt; u.[UserId] &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum12"&gt;  12:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;FROM&lt;/span&gt; [dbo].[Users] u &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum13"&gt;  13:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;LEFT&lt;/span&gt; &lt;span style="color: #0000ff"&gt;OUTER&lt;/span&gt; &lt;span style="color: #0000ff"&gt;JOIN&lt;/span&gt; [dbo].[UserPortals] up &lt;span style="color: #0000ff"&gt;ON&lt;/span&gt; u.[UserId] = up.[UserId] &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum14"&gt;  14:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;WHERE&lt;/span&gt; up.[PortalId] &lt;span style="color: #0000ff"&gt;IS&lt;/span&gt; &lt;span style="color: #0000ff"&gt;NULL&lt;/span&gt; &lt;span style="color: #0000ff"&gt;AND&lt;/span&gt; &lt;span style="color: #0000ff"&gt;NOT&lt;/span&gt; u.[IsSuperUser] = 1&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum15"&gt;  15:&lt;/span&gt; )&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Viola!  That did the trick.  All of the goodness, none of the oversights.  I hope this helps you too!&lt;/p&gt;

&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:47e936c3-2335-4c4f-86fe-83bf63a74962" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/DotNetNuke" rel="tag"&gt;DotNetNuke&lt;/a&gt;,&lt;a href="http://technorati.com/tags/DNN" rel="tag"&gt;DNN&lt;/a&gt;,&lt;a href="http://technorati.com/tags/DNN+Blogs" rel="tag"&gt;DNN Blogs&lt;/a&gt;,&lt;a href="http://technorati.com/tags/T-SQL" rel="tag"&gt;T-SQL&lt;/a&gt;,&lt;a href="http://technorati.com/tags/SQL+Server" rel="tag"&gt;SQL Server&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Administration" rel="tag"&gt;Administration&lt;/a&gt;&lt;/div&gt;</description>
      <link>http://www.willstrohl.com/Blog/EntryId/556/Delete-Soft-Deleted-Users-After-Deleting-Portals</link>
      <author>wills@strohlsitedesign.com</author>
      <comments>http://www.willstrohl.com/Blog/EntryId/556/Delete-Soft-Deleted-Users-After-Deleting-Portals#Comments</comments>
      <guid isPermaLink="true">http://www.willstrohl.com/Blog/EntryId/556/Delete-Soft-Deleted-Users-After-Deleting-Portals</guid>
      <pubDate>Wed, 10 Mar 2010 10:03:00 GMT</pubDate>
      <slash:comments>2</slash:comments>
      <trackback:ping>http://www.willstrohl.com/DesktopModules/Blog/Trackback.aspx?id=556</trackback:ping>
    </item>
    <item>
      <title>DotNetNuke Lightbox Gallery Module Version 01.02.00 Released</title>
      <description>&lt;p&gt;It was less than a year ago that I created the &lt;a href="http://wnslightbox.codeplex.com/" target="_blank"&gt;Lightbox Gallery Module&lt;/a&gt;, as a proof of concept for using &lt;a href="http://www.jquery.com" target="_blank"&gt;jQuery&lt;/a&gt; in a &lt;a href="http://www.dotnetnuke.com" target="_blank"&gt;DotNetNuke®&lt;/a&gt; module.  It has been quite popular considering I only ever expected those who attended my code camp sessions to enjoy it.  Since its first release, it has had over 1600 downloads!  I am sure that less than 50 people have physically attended those sessions, so that number is staggering for me.  That being said, I am pleased to announce that I have another release ready for you to use and abuse.&lt;/p&gt;  &lt;p&gt;If you don’t already know, &lt;a href="http://en.wikipedia.org/wiki/Lightbox_%28JavaScript%29" target="_blank"&gt;Lightbox&lt;/a&gt; is the highly interactive method of displaying pictures on a website.  The thing that separates Lightbox out from the uncountable others is that its fast, user-friendly, interactive, very stable, and the average website visitor has fun using it.  This method of displaying pictures has been around since long before &lt;a href="http://www.jquery.com" target="_blank"&gt;jQuery&lt;/a&gt; came into our hearts.  When &lt;a href="http://www.jquery.com" target="_blank"&gt;jQuery&lt;/a&gt; came along, it just made it that much easier and more fun for us to implement as designers and programmers.&lt;/p&gt;  &lt;h4&gt;Aspect Ratio Thumbnails&lt;/h4&gt;  &lt;p&gt;The latest release of the &lt;a href="http://wnslightbox.codeplex.com/" target="_blank"&gt;Lightbox Gallery Module&lt;/a&gt; has two significant updates along with several bug fixes.  First, the algorithm used to generate your thumbnails for you has been updated to maintain the aspect ratio of the original image.  Long gone are the days where your thumbnails look stretched in one way or another.  Don’t rush off to upgrade just yet.  You will need to force the module to regenerate your thumbnail images.  I didn’t make this a feature.  This is something you’ll have to do manually.  &lt;/p&gt;  &lt;p&gt;Go into the folder that have your images in it, and find all of the images that have &lt;em&gt;–thumb&lt;/em&gt; appended to the filename.  For example, if you have a file named "My_Vacation_001.jpg”, the thumbnail would be “My_Vacation_001-thumb.jpg”.  Delete all of the thumbnails.  Be very careful to not accidentally delete any of your actual images.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.willstrohl.com/Portals/1/Blog/Files/3/554/WLW-DotNetNukeLightboxGalleryModu.00Released_11176-WillStrohl-Lightbox-Module-Album-View_2.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="WillStrohl Lightbox Module: Album View" border="0" alt="WillStrohl Lightbox Module: Album View" src="/Portals/1/Blog/Files/3/554/WLW-DotNetNukeLightboxGalleryModu.00Released_11176-WillStrohl-Lightbox-Module-Album-View_thumb.jpg" width="504" height="457" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;h4&gt;Extra Span Wrapper&lt;/h4&gt;  &lt;p&gt;The original markup left little room for CSS designers to alter how the thumbnails were rendered.  One fix to this was to add another SPAN tag to the markup to give CSS designers more to chew on.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.jquery.com" target="_blank"&gt;jQuery&lt;/a&gt; and CSS people alike will enjoy that I also included more ID’s and class names to assist with manipulation of the rendering.s&lt;/p&gt;  &lt;h4&gt;New Lightbox Provider&lt;/h4&gt;  &lt;p&gt;The lightbox &lt;a href="http://www.jquery.com" target="_blank"&gt;jQuery&lt;/a&gt; plugin that I originally used was the &lt;a href="http://www.balupton.com/sandbox/jquery_lightbox_bal/demo/" target="_blank"&gt;Balupton Edition&lt;/a&gt;.  I chose this one for two reasons: (1) I was running out of time to complete my demo; (2) It was the first plugin that came up in my initial web search.  I have been able to check out several other plugins since.  I keep coming back to one in particular.  It doesn’t tout itself as a lightbox plugin, but rather a lightbox alternative.  I have opted to replace the original plugin with the &lt;a href="http://fancybox.net" target="_blank"&gt;Fancybox&lt;/a&gt; plugin.&lt;/p&gt;  &lt;p&gt;Why?  Simple.  The first one included (removable) text about whose plugin it was.  I never like any software that does that.  It was also broken.  The arrow navigation didn’t work without some extra effort.  When I use any plugin for any type of system, I expect it just to work.  I don’t want to have to &lt;em&gt;make&lt;/em&gt; it work.  &lt;a href="http://fancybox.net" target="_blank"&gt;Fancybox&lt;/a&gt; just works!  And it works INCREDIBLY well!&lt;/p&gt;  &lt;p&gt;This plugin comes with many options, most of which I have exposed in the album settings.  I left it open to allow these settings to be per album, and not per module instance so that it maintains the most flexibility.  Among these options are the type of animation, the animation speed, position of title, and more.  Also, the right and left arrows on your keyboard now work, along with the escape key (unless you disable it in the settings).&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.willstrohl.com/Portals/1/Blog/Files/3/554/WLW-DotNetNukeLightboxGalleryModu.00Released_11176-WillStrohl-Lightbox-Module-Lightbox-View_2.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="WillStrohl Lightbox Module: Lightbox View" border="0" alt="WillStrohl Lightbox Module: Lightbox View" src="/Portals/1/Blog/Files/3/554/WLW-DotNetNukeLightboxGalleryModu.00Released_11176-WillStrohl-Lightbox-Module-Lightbox-View_thumb.jpg" width="504" height="459" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;h4&gt;Documentation&lt;/h4&gt;  &lt;p&gt;I hadn’t really thought about writing any &lt;a href="http://wnslightbox.codeplex.com/documentation" target="_blank"&gt;documentation for the Lightbox Gallery Module&lt;/a&gt; before, but I did manage to get some drawn up.  There are now instructions for the basic steps of &lt;a href="http://wnslightbox.codeplex.com/wikipage?title=Add%20Albums&amp;referringTitle=Documentation" target="_blank"&gt;adding albums&lt;/a&gt;, &lt;a href="http://wnslightbox.codeplex.com/wikipage?title=Edit%20Albums&amp;referringTitle=Documentation" target="_blank"&gt;editing albums&lt;/a&gt;, &lt;a href="http://wnslightbox.codeplex.com/wikipage?title=Delete%20Albums&amp;referringTitle=Documentation" target="_blank"&gt;deleting albums&lt;/a&gt;, and even a few frequently asked questions.  For example, there are two items that have come up through the usage of this module.  I have been getting asked &lt;a href="http://wnslightbox.codeplex.com/wikipage?title=Fix%20Folder%20Autocomplete&amp;referringTitle=Documentation" target="_blank"&gt;why a folder name doesn’t appear in the autocomplete&lt;/a&gt;, and also &lt;a href="http://wnslightbox.codeplex.com/wikipage?title=Regenerate%20Thumbnails&amp;referringTitle=Documentation" target="_blank"&gt;how to regenerate the thumbnails&lt;/a&gt; that the module automatically create for you.&lt;/p&gt;  &lt;p&gt;There is much to talk about, but I will leave the rest for you to check out and try it for yourself.  The only thing that I ask is that you review it.  Please submit a review and rating on &lt;a href="http://wnslightbox.codeplex.com/" target="_blank"&gt;CodePlex&lt;/a&gt;, and on &lt;a href="http://forge.dotnetnuke.com/" target="_blank"&gt;DotNetNuke® Forge&lt;/a&gt; (on page 2 right now).  Also, you can see this module in action here on this site.  Just go to my &lt;a href="http://www.willstrohl.com/Photos"&gt;Photos section&lt;/a&gt;.&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:85ddfa3e-8e72-40a8-9cb3-12867db3c5ac" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/DotNetNuke" rel="tag"&gt;DotNetNuke&lt;/a&gt;,&lt;a href="http://technorati.com/tags/DNN" rel="tag"&gt;DNN&lt;/a&gt;,&lt;a href="http://technorati.com/tags/DNN+Blogs" rel="tag"&gt;DNN Blogs&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Lightbox" rel="tag"&gt;Lightbox&lt;/a&gt;,&lt;a href="http://technorati.com/tags/jQuery" rel="tag"&gt;jQuery&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Modules" rel="tag"&gt;Modules&lt;/a&gt;,&lt;a href="http://technorati.com/tags/CodePlex" rel="tag"&gt;CodePlex&lt;/a&gt;&lt;/div&gt;</description>
      <link>http://www.willstrohl.com/Blog/EntryId/554/DotNetNuke-Lightbox-Gallery-Module-Version-01-02-00-Released</link>
      <author>wills@strohlsitedesign.com</author>
      <comments>http://www.willstrohl.com/Blog/EntryId/554/DotNetNuke-Lightbox-Gallery-Module-Version-01-02-00-Released#Comments</comments>
      <guid isPermaLink="true">http://www.willstrohl.com/Blog/EntryId/554/DotNetNuke-Lightbox-Gallery-Module-Version-01-02-00-Released</guid>
      <pubDate>Mon, 08 Mar 2010 01:20:00 GMT</pubDate>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.willstrohl.com/DesktopModules/Blog/Trackback.aspx?id=554</trackback:ping>
    </item>
    <item>
      <title>How to Start a DotNetNuke User Group</title>
      <description>&lt;p&gt;&lt;a href="http://www.willstrohl.com/Portals/1/Blog/Files/3/553/WLW-HowtoStartaDotNetNukeUserGroup_1421B-IMG_3342.jpg"&gt;&lt;img style="border-right-width: 0px; margin: 0px 0px 5px 5px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="ODUG Meeting" border="0" alt="ODUG Meeting" align="right" src="/Portals/1/Blog/Files/3/553/WLW-HowtoStartaDotNetNukeUserGroup_1421B-IMG_3342_thumb.jpg" width="244" height="184" /&gt;&lt;/a&gt; I have blogged about some community things here and there, and I will begin blogging about them more starting right now.  My first meaningful post in this area talked about &lt;a href="http://www.willstrohl.com/Blog/EntryId/199/How-Do-You-Promote-Run-a-User-Group"&gt;how to run a user group&lt;/a&gt;, and it was more generic in its discussion.  It could apply to any user group.  This time, I am talking about how to start a user group, and I am focusing this discussion on &lt;a href="http://www.dotnetnuke.com" target="_blank"&gt;DotNetNuke®&lt;/a&gt; user groups specifically.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Honestly, I had forgotten that I wrote the blog post I just mentioned.  I was only recently reminded about it by Bill Walker.  That may sound like it came out of left field.  Why would Bill Walker, of the &lt;/em&gt;&lt;a href="http://www.dotnetnuke.com" target="_blank"&gt;&lt;em&gt;DotNetNuke®&lt;/em&gt;&lt;/a&gt;&lt;em&gt; Corporation,  remind me about that specific blog post on my site?  It’s because I have been working with Bill Walker and Scott Willhite to help develop a program where the DNN Corp will be lending a helping hand to user groups that focus on DNN.  What began as an excellent idea has already had action.  Together, we formed a user group leaders committee with other user group leaders and just had our first meeting a couple of weeks ago.  But that’s all I can say about that for the time being.  You can be assured that I will let you know how this is going as soon as I can&lt;/em&gt;.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;I get comments and e-mails all of the time from people who want to have a DNN user group in their area, and they all begin by asking the same thing.  “How can I start a DNN user group?”  This question is simple enough, but it appears to always generate fear within the person asking this question.  This is okay and it’s expected.  After all, fear comes from the inside of us when we do not know what to expect from a situation.  I hope to lower that level of fear for you with this blog post.&lt;/p&gt;  &lt;h4&gt;Plant the Seed&lt;/h4&gt;  &lt;p&gt;You have the idea.  You want the idea to become something more.  You want a user group in your area that you can attend and help yourself and other DNN community members.  But what’s the first step?&lt;/p&gt;  &lt;p&gt;The first step is to look on the &lt;a href="http://www.dotnetnuke.com/Community/UserGroups/tabid/1074/Default.aspx" target="_blank"&gt;DNN user group wizard&lt;/a&gt; to see if your area already have a user group created.  If not, create one.&lt;/p&gt;  &lt;p&gt;In many areas, you will find that a user group was created but nothing was done with it.  There are numerous user groups that were started in the wizard, but for any number of reasons nothing else was done.  In these instances, it is necessary for you to attempt to contact the person listed as the leader.  If you cannot get in touch with them, let me know until there’s a better system in place.  I can help you move this step along.&lt;/p&gt;  &lt;p&gt;Setting up the user group in the wizard is not a requirement though.  Do not let this stop you from moving forward with your planning.&lt;/p&gt;  &lt;p&gt;Begin announcing your intentions to start the user group in the DNN user group forum and on any social networks you’re on.  You never know where your fellow DNN’ers are going to come from.  Make sure you let people know that you want to start the user group and gather the names and e-mail addresses of anyone interested.  If you were able to start the user group in the wizard, have them sign up there.  If you are able to start a user group website even before your first meeting, have them register there too.  Basically, you are building the foundation to hold your first meeting.&lt;/p&gt;  &lt;p&gt;Be diligent with this step.  In the first year or more of a user group’s existence, you will need to be the walking, talking billboard advertisement for the user group.  Do not be afraid to talk about it to everyone, and never assume that you’re talking about it too much.  It’s like most traditional media.  One commercial is never enough.  You have to repeat the commercial over and over again to get the desired effect.  If no one tells you that you’re talking about it too much, then you’re not doing your job.&lt;/p&gt;  &lt;h4&gt;Mark Off the Garden&lt;/h4&gt;  &lt;p&gt;&lt;a href="http://www.willstrohl.com/Portals/1/Blog/Files/3/553/WLW-HowtoStartaDotNetNukeUserGroup_1421B-ODUG-First-Meeting-Picture_2.jpg"&gt;&lt;img style="border-right-width: 0px; margin: 0px 5px 5px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="ODUG's First Meeting Picture" border="0" alt="ODUG's First Meeting Picture" align="left" src="/Portals/1/Blog/Files/3/553/WLW-HowtoStartaDotNetNukeUserGroup_1421B-ODUG-First-Meeting-Picture_thumb.jpg" width="244" height="164" /&gt;&lt;/a&gt; I find that the previous step is the easiest, and most people I talk to can handle that step just fine.  The excuses and other problems begin with the next step – holding your &lt;a href="http://www.willstrohl.com/Blog/EntryId/398/Blast-from-the-Past-ODUG-First-Meeting-Pictures"&gt;first meeting&lt;/a&gt;.  The most common excuse I hear with this is that people are not sure if they have enough people to hold the first meeting.  This is just silly.  There’s no rule to how many people that you need to hold a meeting.  Just set a date and advertise it everywhere you can, as often as you can.  You will reach different people at different times.&lt;/p&gt;  &lt;p&gt;Another reason I hear behind not holding the meeting, is not having a place to meet.  While this is not an easy task, it is probably easier than you think.  There are a variety of ways to get a meeting place.  First, begin by asking those who are already in your mailing list if they have a venue that they can offer.  If you are unable to find one, just meet at a coffee place or sandwich shop for the first couple of meetings.  Once you are ready to have a speaker, you can often find places to meet through the local technical recruiters, library, and other businesses that have large conference rooms.&lt;/p&gt;  &lt;p&gt;At the first 1-3 meetings, talk to those people that show up about what they want out of the user group.  Pay special attention to what areas of &lt;a href="http://www.dotnetnuke.com" target="_blank"&gt;DotNetNuke®&lt;/a&gt; they specialize in and what their talents are.  They are the people that you need to plan meeting topics for, and are potential speakers.&lt;/p&gt;  &lt;h4&gt;Fertilize the Seed&lt;/h4&gt;  &lt;p&gt;After the meeting format is determined and you begin to schedule speakers, you will have other things to worry about.  New and important questions will start to arise.  Should I charge a fee for the meetings?  Do I need a sponsor?  How do I get one?  How do I recruit speakers?  How can I get door prizes?  &lt;/p&gt;  &lt;p&gt;There is no one-size-fits-all formula to starting and maintaining a user group.  The success of the user group depends entirely on those people that attend the meetings.  You need to plug-in to those people, and those at other user groups.   You will need to become a talker.  You will need to let everyone you talk to know about what you’re doing.  Your passion will show, and they will begin sharing your conversation with others in the .Net and DNN community.  &lt;/p&gt;  &lt;p&gt;It is my opinion that you should never charge a fee for the user group meetings.  This will stifle the growth of the user group severely.&lt;/p&gt;  &lt;p&gt;You do not need a sponsor for the user group unless you want either of two things: (1) free food and drinks, (2) door prizes.  Sponsors are typically very easy to find and get involved.  Begin with local technical recruiters for the food and drinks.  They love to get their people and branding in front of technical audiences, no matter how small.&lt;/p&gt;  &lt;p&gt;Recruiting speaker is not easy since most people have a fear of speaking in front of an audience.  This fear for those people just gets more powerful when that audience is full of your peers.  It is for this reason that many user groups begin with the leader speaking a lot, and have chalk talk meetings.  &lt;/p&gt;  &lt;p&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Stan Schultes talking to the ODUG" border="0" alt="Stan Schultes talking to the ODUG" src="/Portals/1/images/blog/ODUG/ODUG_20090106_03_500x375.jpg" width="504" height="379" /&gt; &lt;/p&gt;  &lt;p&gt;The secret to getting speakers is once again talking to people.  Find out what your members are doing in their day jobs and for recreational programming.  They love to tell people about their newest projects.  This is a perfect ice breaker to ask them to show everyone in the user group what they just told you at the next meeting.  Presentations do not have to last through the duration of your meeting.  Sometimes having more than one speaker can be better than just one.&lt;/p&gt;  &lt;h4&gt;Watch the Seed Grow&lt;/h4&gt;  &lt;p&gt;Once you have an idea of how the meetings are going to be, begin also asking for volunteers.  You may want people to help with the prize raffles, sending of newsletters, getting sponsors, getting speakers, and so on.  Getting these people involved and giving them a sense of ownership over the user group will only help grow the group and encourage other members to help in various ways.  You shouldn’t be doing everything yourself.&lt;/p&gt;  &lt;p&gt;If you follow this advice, you should be seeing your user group membership and activity grow more and more each month.  I hope I have inspired you to start your own user group.  Please let me know by leaving a comment below.&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:c478e123-a8ba-4173-aaec-c28bf0cddb65" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/DotNetNuke" rel="tag"&gt;DotNetNuke&lt;/a&gt;,&lt;a href="http://technorati.com/tags/DNN" rel="tag"&gt;DNN&lt;/a&gt;,&lt;a href="http://technorati.com/tags/DNN+Blogs" rel="tag"&gt;DNN Blogs&lt;/a&gt;,&lt;a href="http://technorati.com/tags/User+Group" rel="tag"&gt;User Group&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Community" rel="tag"&gt;Community&lt;/a&gt;&lt;/div&gt;</description>
      <link>http://www.willstrohl.com/Blog/EntryId/553/How-to-Start-a-DotNetNuke-User-Group</link>
      <author>wills@strohlsitedesign.com</author>
      <comments>http://www.willstrohl.com/Blog/EntryId/553/How-to-Start-a-DotNetNuke-User-Group#Comments</comments>
      <guid isPermaLink="true">http://www.willstrohl.com/Blog/EntryId/553/How-to-Start-a-DotNetNuke-User-Group</guid>
      <pubDate>Sat, 06 Mar 2010 00:21:00 GMT</pubDate>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.willstrohl.com/DesktopModules/Blog/Trackback.aspx?id=553</trackback:ping>
    </item>
    <item>
      <title>Upcoming Webinar for the DotNetNuke Beginner</title>
      <description>&lt;p&gt;&lt;a href="http://www.willstrohl.com/Portals/1/Blog/Files/3/551/WLW-UpcomingWebinarfortheDotNetNukeBeginner_115CB-Will-Strohl-South-Florida-Code-Camp-2010_2.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 0px 5px 5px 0px; display: inline; border-top: 0px; border-right: 0px" title="Will Strohl at the 2010 South Florida Code Camp" border="0" alt="Will Strohl at the 2010 South Florida Code Camp" align="left" src="/Portals/1/Blog/Files/3/551/WLW-UpcomingWebinarfortheDotNetNukeBeginner_115CB-Will-Strohl-South-Florida-Code-Camp-2010_thumb.jpg" width="244" height="244" /&gt;&lt;/a&gt; I will be presenting a webinar later this month titled, “&lt;a href="http://www.progressivebusinesstechnologytraining.com/V3/0/2/p3H9BDc/p4DGH3N3i/p1e" target="_blank"&gt;DotNetNuke® Essentials: Simple Solutions for Building Your Website&lt;/a&gt;.”  I have been very excited for quite some time to be able to announce this.  The webinar will focus on &lt;a href="http://www.dotnetnuke.com" target="_blank"&gt;DotNetNuke®&lt;/a&gt; from the beginner’s perspective.  This is not meant for the module developers, programmers, skinners, etc.  This webinar is more focused on your content management and website administrators.  However, they need not have had any DNN experience to participate or follow along.&lt;/p&gt;  &lt;p&gt;This webinar is meant purely for the beginners, and those who are interested in using DNN.  Out of all of the presentations and training with DNN that I have ever done, this is the type of presentation I love the most.  It is so much fun and rewarding to see the reaction people have when they see what DNN can do!  You can almost see them leaning out of their seats to go and try it that very moment.&lt;/p&gt;  &lt;p&gt;Unfortunately, you don’t get the same kind of instant feedback during webinars since I cannot see you, but it’s still a blast!&lt;/p&gt;  &lt;p&gt;The &lt;a href="http://www.progressivebusinesstechnologytraining.com/V3/0/2/p3H9BDc/p4DGH3N3i/p1e" target="_blank"&gt;DotNetNuke® Essentials webinar&lt;/a&gt; is broken up into 3 sections.&lt;/p&gt;  &lt;h4&gt;How To Get Started&lt;/h4&gt;  &lt;p&gt;We will begin where everyone does, with installation.  I love this area too.  It’s so cool to get feedback from people that had been told or thought that DNN was just too difficult to install.  It really isn’t.  The concept is just not easy for some people to grasp.&lt;/p&gt;  &lt;p&gt;Once DNN is installed, we are going to walk through the common ways that you would need to use to update your &lt;a href="http://www.dotnetnuke.com" target="_blank"&gt;DotNetNuke®&lt;/a&gt; website.  We are going to change the design of the DNN site, and then wrap this first section up with an upgrade.&lt;/p&gt;  &lt;h4&gt;Managing Content on a DNN Created Site&lt;/h4&gt;  &lt;p&gt;The next section goes a little deeper in detail in terms of managing DNN website content.  It takes much more than just adding some text to a page.  There are various situations where your content needs to do a little more than just display some words.  You might need to move it, export it, import it, and more.  &lt;/p&gt;  &lt;p&gt;Once we go over the common ways to manage content, we will explore the Admin menu in detail.  There are several nooks and crannies in the  Admin area that many new DNN administrators may not get to for a while.&lt;/p&gt;  &lt;h4&gt;Best Practices for Website Administration in DotNetNuke®&lt;/h4&gt;  &lt;p&gt;We will be wrapping this presentation up by reviewing some of the best practices out there for administrating your DNN websites.  &lt;/p&gt;  &lt;p&gt;The webinar will end with a question and answer period where I will answer any questions that you may have about &lt;a href="http://www.dotnetnuke.com" target="_blank"&gt;DotNetNuke®&lt;/a&gt;.  Go ahead.  Throw me a curve ball!  :)&lt;/p&gt;  &lt;p&gt;If that sounds good to you, then make sure you sign up.  But your benefits don’t end there.  You will also be receiving a downloadable handout that outlines everything we will be talking about, and can be used as a cheat sheet following the webinar.&lt;/p&gt;  &lt;p&gt;Does that sound too good to be true?  It’s not.  The webinar is not free – but it’s cheap.  For $199.00, you get 90 minutes of exclusive and interactive DNN training in the comfort of your home or office.  You will have the opportunity to ask any DNN questions that you want.  You’re going to have a DNN cheat sheet that you download before the webinar and can use as much as you want after the event.&lt;/p&gt;  &lt;p&gt;March 29, 2010  1:00 PM – 2:30 PM EST&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.progressivebusinesstechnologytraining.com/V3/0/2/p3H9BDc/p4DGH3N3i/p1e" target="_blank"&gt;DotNetNuke® Essentials: Simple Solutions for Building Your Website&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;I hope to see you there!  In the meantime, let me know if you have any questions.&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:dad22067-8d83-46c5-8e3e-fabb0a95c297" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/DotNetNuke" rel="tag"&gt;DotNetNuke&lt;/a&gt;,&lt;a href="http://technorati.com/tags/DNN" rel="tag"&gt;DNN&lt;/a&gt;,&lt;a href="http://technorati.com/tags/DNN+Blogs" rel="tag"&gt;DNN Blogs&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Webinar" rel="tag"&gt;Webinar&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Administration" rel="tag"&gt;Administration&lt;/a&gt;&lt;/div&gt;</description>
      <link>http://www.willstrohl.com/Blog/EntryId/551/Upcoming-Webinar-for-the-DotNetNuke-Beginner</link>
      <author>wills@strohlsitedesign.com</author>
      <comments>http://www.willstrohl.com/Blog/EntryId/551/Upcoming-Webinar-for-the-DotNetNuke-Beginner#Comments</comments>
      <guid isPermaLink="true">http://www.willstrohl.com/Blog/EntryId/551/Upcoming-Webinar-for-the-DotNetNuke-Beginner</guid>
      <pubDate>Fri, 05 Mar 2010 01:57:00 GMT</pubDate>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.willstrohl.com/DesktopModules/Blog/Trackback.aspx?id=551</trackback:ping>
    </item>
    <item>
      <title>Upgrading DotNetNuke to Use jQuery Version 1.4.2</title>
      <description>&lt;p&gt;&lt;a href="http://jquery.com" target="_blank"&gt;&lt;img style="border-right-width: 0px; margin: 0px 5px 5px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="jQuery" border="0" alt="jQuery" align="left" src="/Portals/1/Blog/Files/3/518/WLW-LearnAboutUsingjQueryinDotNetNukeTomorro_93F2-jquery_logo_240x81_3.png" width="244" height="85" /&gt;&lt;/a&gt; I didn’t notice it when it happened, but &lt;a href="http://www.jquery.com" target="_blank"&gt;jQuery&lt;/a&gt; has had a couple of stabilization releases since the popular 1.4 release.  The updates are pretty significant and I have seen performance increases that were noticeable to the eye with several implementations after upgrading.  I would highly recommend upgrading your current &lt;a href="http://www.jquery.com" target="_blank"&gt;jQuery&lt;/a&gt; core scripts if you’re not running version 1.4.2.  Here are some tips for those of you running &lt;a href="http://www.jquery.com" target="_blank"&gt;jQuery&lt;/a&gt; in your &lt;a href="http://www.dotnetnuke.com" target="_blank"&gt;DotNetNuke®&lt;/a&gt; sites.&lt;/p&gt;  &lt;p&gt;First of all, as I discussed in this blog before, &lt;a href="http://www.willstrohl.comhttp://www.willstrohl.com/Blog/EntryId/309/Upgrading-DotNetNuke-to-Use-the-Latest-jQuery-Version"&gt;upgrading the jQuery core script in your DNN site&lt;/a&gt; can be as easy as overwriting the existing &lt;a href="http://www.jquery.com" target="_blank"&gt;jQuery&lt;/a&gt; file.  Since it was covered there, I won’t go into detail about that again, but I will talk about the current versions.&lt;/p&gt;  &lt;p&gt;Aside from the many bug fixes and &lt;u&gt;significant&lt;/u&gt; performance enhancements, here are some of the updates that have been made to &lt;a href="http://www.jquery.com" target="_blank"&gt;jQuery&lt;/a&gt; since version 1.4:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Support for additional events in the &lt;a href="http://api.jquery.com/live/" target="_blank"&gt;live()&lt;/a&gt; method, such as hover, focus, and blur &lt;/li&gt;    &lt;li&gt;Complete unbinding for the &lt;a href="http://api.jquery.com/die/" target="_blank"&gt;die()&lt;/a&gt; method &lt;/li&gt;    &lt;li&gt;Inclusion of the &lt;a href="http://api.jquery.com/height" target="_blank"&gt;height()&lt;/a&gt; and &lt;a href="http://api.jquery.com/width" target="_blank"&gt;weight()&lt;/a&gt; functions &lt;/li&gt;    &lt;li&gt;Addition of the &lt;a href="http://api.jquery.com/delegate" target="_blank"&gt;delegate()&lt;/a&gt; and &lt;a href="http://api.jquery.com/undelegate" target="_blank"&gt;undelegate()&lt;/a&gt; functions &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Even if there weren’t any new features, the benchmarks show that with a 2x improvement in speed since version 1.3.2, your UI enhancements would benefit tremendously.&lt;/p&gt;  &lt;p&gt;You can tell which version of &lt;a href="http://www.jquery.com" target="_blank"&gt;jQuery&lt;/a&gt; you’re running by looking at your Host Settings page.  Find it near the bottom of the Advanced Settings section.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.willstrohl.com/Portals/1/Blog/Files/3/552/WLW-UpgradingDotNetNuketoUsejQueryVersion1.2_13E11-DotNetNuke-Host-Settings-Advanced-Settings-jQuery_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Host Settings &gt; Advanced Settings &gt; jQuery Settings" border="0" alt="Host Settings &gt; Advanced Settings &gt; jQuery Settings" src="/Portals/1/Blog/Files/3/552/WLW-UpgradingDotNetNuketoUsejQueryVersion1.2_13E11-DotNetNuke-Host-Settings-Advanced-Settings-jQuery_thumb.png" width="504" height="387" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;You can upgrade the DNN &lt;a href="http://www.jquery.com" target="_blank"&gt;jQuery&lt;/a&gt; file by &lt;a href="http://www.willstrohl.comhttp://www.willstrohl.com/Blog/EntryId/309/Upgrading-DotNetNuke-to-Use-the-Latest-jQuery-Version"&gt;following the advice in my earlier blog post&lt;/a&gt;.  However, what if you’re using the Google hosted version?  It is not very clear how to upgrade that, although it could be figured out.  Unfortunately, DNN Corp is not updating that setting even when they upgrade the &lt;a href="http://www.jquery.com" target="_blank"&gt;jQuery&lt;/a&gt; version included with DNN.  By default, the hosted URL is:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font face="Courier New"&gt;http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;If you want to upgrade to the newest hosted version, just change it to the following, and check the “Use Hosted jQuery Version” checkbox.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font face="Courier New"&gt;http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Click the Update link at the bottom of the page, and you’re running the newest &lt;a href="http://www.jquery.com" target="_blank"&gt;jQuery&lt;/a&gt; version.  Congrats!&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:a20bec9f-7d69-4934-b50c-f3e863825eee" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/DotNetNuke" rel="tag"&gt;DotNetNuke&lt;/a&gt;,&lt;a href="http://technorati.com/tags/DNN" rel="tag"&gt;DNN&lt;/a&gt;,&lt;a href="http://technorati.com/tags/DNN+Blogs" rel="tag"&gt;DNN Blogs&lt;/a&gt;,&lt;a href="http://technorati.com/tags/jQuery" rel="tag"&gt;jQuery&lt;/a&gt;&lt;/div&gt;</description>
      <link>http://www.willstrohl.com/Blog/EntryId/552/Upgrading-DotNetNuke-to-Use-jQuery-Version-1-4-2</link>
      <author>wills@strohlsitedesign.com</author>
      <comments>http://www.willstrohl.com/Blog/EntryId/552/Upgrading-DotNetNuke-to-Use-jQuery-Version-1-4-2#Comments</comments>
      <guid isPermaLink="true">http://www.willstrohl.com/Blog/EntryId/552/Upgrading-DotNetNuke-to-Use-jQuery-Version-1-4-2</guid>
      <pubDate>Thu, 04 Mar 2010 23:06:00 GMT</pubDate>
      <slash:comments>11</slash:comments>
      <trackback:ping>http://www.willstrohl.com/DesktopModules/Blog/Trackback.aspx?id=552</trackback:ping>
    </item>
    <item>
      <title>Adding Most Popular Entries View to Your DotNetNuke Blog</title>
      <description>&lt;p&gt;&lt;a href="http://www.willstrohl.com/Portals/1/Blog/Files/3/550/WLW-AddingMostPopularEntriestoYourDotNetNuke_2C8-willstrohl-blog-most-popular-entries_2.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 0px 5px 5px 0px; display: inline; border-top: 0px; border-right: 0px" title="Most Popular Blog Entries" border="0" alt="Most Popular Blog Entries" align="left" src="/Portals/1/Blog/Files/3/550/WLW-AddingMostPopularEntriestoYourDotNetNuke_2C8-willstrohl-blog-most-popular-entries_thumb.png" width="244" height="136" /&gt;&lt;/a&gt; One of the new features in the updates in my website is the “Most Popular Entries” area at the bottom of each page on my site.  It gets attention for a few different reasons.  First, everyone wants to know how I did it.  Next, people want to know what determines the most popular blog entries.  Finally, people want to know if I would blog about it.  I had always planned to, but since you asked…&lt;/p&gt;  &lt;p&gt;First of all, I need to give a quick disclaimer.  I had long forgotten the power behind the XML and Reports Modules.  I used to use them all of the time, but I have been in development mode for about a year now, leaving little room for playing with these two modules like I used to.  Luckily, &lt;a href="http://blog.theaccidentalgeek.com" target="_blank"&gt;Joe Brinkman&lt;/a&gt; brought it all back to me with his recent visit to the &lt;a href="http://orlando.dotnetnukeug.net" target="_blank"&gt;Orlando DotNetNuke® Users Group&lt;/a&gt; (&lt;a href="http://orlando.dotnetnukeug.net" target="_blank"&gt;ODUG&lt;/a&gt;).  &lt;/p&gt;  &lt;p&gt;Let’s answer the easiest question first.  The most popular entries are determined by the number of comments left on a blog.  So, if you want to “hack” the results in this module, leave a ton of useful comments on one of m blog entries.  (I say “useful” because I won’t approve any comments that appear to be spam or link builder comments.)  Unfortunately, I didn’t notice any existing queries that will feed me back the information that I need, so I wrote a custom query to be used with the Reports Module.&lt;/p&gt;  &lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;   &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;     &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;SELECT&lt;/span&gt; &lt;span style="color: #0000ff"&gt;TOP&lt;/span&gt; 5 &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt;     b.[BlogID],b.[EntryID],b.[Title],b.[Entry],b.[AddedDate]&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt;   3:&lt;/span&gt;     ,b.[Published],b.[Description],b.[Copyright],b.[PermaLink], &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum4"&gt;   4:&lt;/span&gt;     (&lt;span style="color: #0000ff"&gt;SELECT&lt;/span&gt; &lt;span style="color: #0000ff"&gt;COUNT&lt;/span&gt;(c.[CommentID]) &lt;span style="color: #0000ff"&gt;FROM&lt;/span&gt; [dbo].[Blog_Comments] c &lt;span style="color: #0000ff"&gt;WHERE&lt;/span&gt; c.[EntryID] = b.[EntryID]) [Comments]&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum5"&gt;   5:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;FROM&lt;/span&gt; [dbo].[Blog_Entries] b &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum6"&gt;   6:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;WHERE&lt;/span&gt; b.[Published] = 1 &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum7"&gt;   7:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;ORDER&lt;/span&gt; &lt;span style="color: #0000ff"&gt;BY&lt;/span&gt; [Comments] DESC&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Hopefully, you’re still paying attention.  I say that because this query has a limitation that you may or may not care about.  It pulls the entries from the entire site, and not just from a specific blog.  You’ll have to adjust the query if that’s what you’re looking for.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.willstrohl.com/Portals/1/Blog/Files/3/550/WLW-AddingMostPopularEntriestoYourDotNetNuke_2C8-reports-module-show-xml-source_2.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 0px 5px 5px 0px; display: inline; border-top: 0px; border-right: 0px" title="Reports Module: Show XML Source" border="0" alt="Reports Module: Show XML Source" align="left" src="/Portals/1/Blog/Files/3/550/WLW-AddingMostPopularEntriestoYourDotNetNuke_2C8-reports-module-show-xml-source_thumb.png" width="244" height="145" /&gt;&lt;/a&gt; Next, I chose to “View XML Source” in the module to show me the output that I’ll be dealing with.  This is an incredibly powerful feature in the Reports Module. as it allows me to write XSL against a known datasource format.  You simply click the link for it, and then begin using your favorite XML/XSL editor.&lt;/p&gt;

&lt;p&gt;Here is an example of my XSL using the same methods, and Visual Studio as my editor.&lt;/p&gt;

&lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;
  &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&lt;?&lt;/span&gt;&lt;span style="color: #800000"&gt;xml&lt;/span&gt; &lt;span style="color: #ff0000"&gt;version&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="1.0"&lt;/span&gt;?&lt;span style="color: #0000ff"&gt;&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;xsl:stylesheet&lt;/span&gt; &lt;span style="color: #ff0000"&gt;version&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="1.0"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;xmlns:xsl&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="http://www.w3.org/1999/XSL/Transform"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt;   3:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;&lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;xsl:template&lt;/span&gt; &lt;span style="color: #ff0000"&gt;match&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="/DocumentElement"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum4"&gt;   4:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;&lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;ul&lt;/span&gt; &lt;span style="color: #ff0000"&gt;class&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="wns_news_list"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum5"&gt;   5:&lt;/span&gt;             &lt;span style="color: #0000ff"&gt;&lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;xsl:for-each&lt;/span&gt; &lt;span style="color: #ff0000"&gt;select&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="QueryResults[position() &amp;lt; '6']"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum6"&gt;   6:&lt;/span&gt;                 &lt;span style="color: #0000ff"&gt;&lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;li&lt;/span&gt; &lt;span style="color: #ff0000"&gt;class&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="Normal"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum7"&gt;   7:&lt;/span&gt;                     &lt;span style="color: #0000ff"&gt;&lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;a&lt;/span&gt; &lt;span style="color: #ff0000"&gt;href&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="{PermaLink}"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum8"&gt;   8:&lt;/span&gt;                         &lt;span style="color: #0000ff"&gt;&lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;xsl:value-of&lt;/span&gt; &lt;span style="color: #ff0000"&gt;select&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="Title"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;disable-output-escaping&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="yes"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum9"&gt;   9:&lt;/span&gt;                     &lt;span style="color: #0000ff"&gt;&lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;a&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum10"&gt;  10:&lt;/span&gt;                 &lt;span style="color: #0000ff"&gt;&lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;li&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum11"&gt;  11:&lt;/span&gt;             &lt;span style="color: #0000ff"&gt;&lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;xsl:for-each&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum12"&gt;  12:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;&lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;ul&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum13"&gt;  13:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;&lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;xsl:template&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum14"&gt;  14:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;xsl:stylesheet&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;The XSL is used in conjunction with the datasource to render out an unordered list (UL) to the web browser.  You can notice that I make sure to include class names to make the UL manageable through CSS.  Which leads me to the next snippet!&lt;/p&gt;

&lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;
  &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;ul&lt;/span&gt;&lt;span style="color: #cc6633"&gt;.wns_news_list&lt;/span&gt; &lt;span style="color: #0000ff"&gt;li&lt;/span&gt; { &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;border&lt;/span&gt;-&lt;span style="color: #0000ff"&gt;bottom&lt;/span&gt;:&lt;span style="color: #006080"&gt;1px dashed #FFFFFF;&lt;/span&gt; &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt;   3:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;list-style&lt;/span&gt;-type:&lt;span style="color: #006080"&gt;none;&lt;/span&gt; &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum4"&gt;   4:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;padding&lt;/span&gt;:&lt;span style="color: #006080"&gt;2px 0 5px;&lt;/span&gt; &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum5"&gt;   5:&lt;/span&gt; }&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;The CSS used with this function is actually very simple.  All we do is remove the bullet points, add a separator, and a bit of padding for aesthetics.&lt;/p&gt;

&lt;p&gt;Finally, it’s time to put this all together!  Save the CSS in your skin, or the Portal.css.  If you choose to save it in the Portal.css, you can use the Site Settings to update it.&lt;/p&gt;

&lt;p&gt;Now, add an instance of the Reports Module to the page.  Paste the T-SQL query from above into the Query field in the module settings.  Further down, you are given the opportunity to select XSL Transformation Visualizer.  When you do, you can upload or choose XSL to run against the query.  I would suggest saving the XSL from above into a local file, and upload it here.&lt;/p&gt;

&lt;p&gt;Click the Update link to save your changes.  With the CSS, T-SQL, and query in place, you should see a pretty nice looking list of your most popular blogs!&lt;/p&gt;

&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:866d9251-cffe-4199-af8a-99c07e587c7f" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/DotNetNuke" rel="tag"&gt;DotNetNuke&lt;/a&gt;,&lt;a href="http://technorati.com/tags/DNN" rel="tag"&gt;DNN&lt;/a&gt;,&lt;a href="http://technorati.com/tags/DNN+Blogs" rel="tag"&gt;DNN Blogs&lt;/a&gt;,&lt;a href="http://technorati.com/tags/T-SQL" rel="tag"&gt;T-SQL&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Reports+Module" rel="tag"&gt;Reports Module&lt;/a&gt;,&lt;a href="http://technorati.com/tags/XML" rel="tag"&gt;XML&lt;/a&gt;,&lt;a href="http://technorati.com/tags/XSLT" rel="tag"&gt;XSLT&lt;/a&gt;,&lt;a href="http://technorati.com/tags/CSS" rel="tag"&gt;CSS&lt;/a&gt;&lt;/div&gt;</description>
      <link>http://www.willstrohl.com/Blog/EntryId/550/Adding-Most-Popular-Entries-View-to-Your-DotNetNuke-Blog</link>
      <author>wills@strohlsitedesign.com</author>
      <comments>http://www.willstrohl.com/Blog/EntryId/550/Adding-Most-Popular-Entries-View-to-Your-DotNetNuke-Blog#Comments</comments>
      <guid isPermaLink="true">http://www.willstrohl.com/Blog/EntryId/550/Adding-Most-Popular-Entries-View-to-Your-DotNetNuke-Blog</guid>
      <pubDate>Tue, 02 Mar 2010 00:40:00 GMT</pubDate>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.willstrohl.com/DesktopModules/Blog/Trackback.aspx?id=550</trackback:ping>
    </item>
    <item>
      <title>South Florida Code Camp 2010 Recap</title>
      <description>&lt;p&gt;&lt;a href="http://www.facebook.com/album.php?aid=2045553&amp;id=1046966128" target="_blank"&gt;&lt;img style="border-right-width: 0px; margin: 0px 5px 5px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="My son, Kohen, wearing his Day of DotNetNuke® shirt at the speaker party" border="0" alt="My son, Kohen, wearing his Day of DotNetNuke® shirt at the speaker party" align="left" src="/Portals/1/Blog/Files/3/549/WLW-SouthFloridaCodeCamp2010Recap_149F1-sflcc-2010-speaker-party-kohen-dodnn-shirt_3.jpg" width="184" height="244" /&gt;&lt;/a&gt; Another year has gone by since I last visited the Miami area.  It was of course for the &lt;a href="http://www.fladotnet.com/codecamp/" target="_blank"&gt;South Florida Code Camp&lt;/a&gt;.  There were many things that continue to remain the same with this event: the venue, the coordinators, and of course the fact that this was an incredible event!  The &lt;a href="http://www.fladotnet.com/codecamp/" target="_blank"&gt;South Florida Code Camp&lt;/a&gt; is one of the code camps in the state of Florida that you should never miss.  There are outstanding speakers, outstanding topics, and a ton of people to network with!&lt;/p&gt;  &lt;h4&gt;The Speaker Party&lt;/h4&gt;  &lt;p&gt;Being a speaker, my experience would begin with the speaker party the night before the event.  This is something I normally cannot attend since I travel so far to attend.  It’s kind of hard to validate the travel time during work.  However, I was able to make it to the speaker party this year!  It was a blast too!  Then again, what else would you expect?  With some of the best speakers in the state all coming to one place, such an event couldn't be expected to be anything but great!&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.facebook.com/album.php?aid=2045553&amp;id=1046966128" target="_blank"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="A view of some of the speakers at the speaker party" border="0" alt="A view of some of the speakers at the speaker party" src="/Portals/1/Blog/Files/3/549/WLW-SouthFloridaCodeCamp2010Recap_149F1-sflcc-2010-speaker-party-table-view_3.jpg" width="504" height="379" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;(&lt;em&gt;Thank you to Kim for taking the pictures at the speaker party.&lt;/em&gt;)&lt;/p&gt;  &lt;h4&gt;The Code Camp&lt;/h4&gt;  &lt;p&gt;The code camp itself was great.  It was a bit confusing at the registration desk, but didn’t get in the way too much.  I was disappointed to only see donuts for breakfast though.  I am not a fan of donuts.  Despite those very small issues, the morning went off without a hitch.  &lt;/p&gt;  &lt;p&gt;There was nearly an entire track of &lt;a href="http://www.dotnetnuke.com" target="_blank"&gt;DotNetNuke®&lt;/a&gt; love at the code camp, so I found myself staying in the same room most of the day.  Woo hoo!&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.willstrohl.com/Portals/1/Blog/Files/3/549/WLW-SouthFloridaCodeCamp2010Recap_149F1-IMG_3420.jpg"&gt;&lt;img style="border-right-width: 0px; margin: 0px 5px 5px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Jim Begley presenting DotNetNuke 101" border="0" alt="Jim Begley presenting DotNetNuke 101" align="left" src="/Portals/1/Blog/Files/3/549/WLW-SouthFloridaCodeCamp2010Recap_149F1-IMG_3420_thumb.jpg" width="244" height="184" /&gt;&lt;/a&gt; The first session of the DNN day was &lt;em&gt;DotNetNuke 101&lt;/em&gt;, presented by &lt;a href="http://www.jimbegley.com" target="_blank"&gt;Jim Begley&lt;/a&gt; of &lt;a href="http://www.glidecomputing.com" target="_blank"&gt;Glide Computing&lt;/a&gt;.  I went searching for water during the beginning of his presentation, so I missed the first 5-10 minutes.  So, I am not sure if he went through installation or not, but he did a great job of walking the attendees through the various features of DNN.  He spoke of administration, pages, modules, and skins.  I am certain that those in attendances were impressed.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.willstrohl.com/Portals/1/Blog/Files/3/549/WLW-SouthFloridaCodeCamp2010Recap_149F1-IMG_3426.jpg"&gt;&lt;img style="border-right-width: 0px; margin: 0px 0px 5px 5px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Gary Kulwin presenting The Elegance of XMod" border="0" alt="Gary Kulwin presenting The Elegance of XMod" align="right" src="/Portals/1/Blog/Files/3/549/WLW-SouthFloridaCodeCamp2010Recap_149F1-IMG_3426_thumb.jpg" width="244" height="184" /&gt;&lt;/a&gt; Next was a speaker that was new to me, &lt;strong&gt;Gary Kulwin&lt;/strong&gt;.  I am not sure if it was his first presentation or not.  He was presenting a session titled, &lt;em&gt;The Elegance of XMod&lt;/em&gt;.  Basically, he demonstrated how to use the popular XMod module by &lt;a href="http://dnndev.com/" target="_blank"&gt;DNNDev.com&lt;/a&gt;.  I was excited to see this session out of all of them since I have a copy of this module myself.  I just haven’t took any time to try it out myself yet.  Gary’s presentation was very beneficial to giving me more reasons to get started with it.  By the end of the presentation, we were watching him work with a nearly functional example of a mini-app created by XMod.  I say nearly functional only because we didn’t get completely through all of the examples, and I think he had to leave a couple of things out that weren’t ready for the demo.  Great work, Gary!&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.willstrohl.com/Portals/1/Blog/Files/3/549/WLW-SouthFloridaCodeCamp2010Recap_149F1-IMG_3428.jpg"&gt;&lt;img style="border-right-width: 0px; margin: 0px 5px 5px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Me, presenting How to AJAX-ify Your DNN Modules" border="0" alt="Me, presenting How to AJAX-ify Your DNN Modules" align="left" src="/Portals/1/Blog/Files/3/549/WLW-SouthFloridaCodeCamp2010Recap_149F1-IMG_3428_thumb.jpg" width="244" height="184" /&gt;&lt;/a&gt; Finally, it was my turn.  My session was &lt;em&gt;How to AJAX-ify Your DotNetNuke Modules&lt;/em&gt;.  My goal was to show a handful of ways to add AJAX functionality to your DNN modules, and to also demonstrate the difference between those ways using the same module functionality in different views.  I am sure I got those points across, but I am deeply disappointed with my performance with the code demonstration.  I really was off my game and wasn’t able to get into my intended groove.  I had a specific path planned out in terms of how I was going to demonstrate each of the AJAX methods, but it didn’t work out the way I wanted it to.  I ended up jumping around and skipping a couple of things, only to come back to them.  I am sure at least a couple of the people might have been confused by this.  Basically, I compared no AJAX to DNN’s Partial Rendering, and then walked us through using &lt;a href="http://www.jquery.com" target="_blank"&gt;jQuery&lt;/a&gt; and &lt;a href="http://www.telerik.com" target="_blank"&gt;Telerik&lt;/a&gt; AJAX methods.  If you want to see the slide deck or the source code, &lt;a href="http://www.willstrohl.com/Blog/EntryId/548/Presentation-files-for-AJAX-ifying-DotNetNuke-Modules"&gt;check my earlier blog post&lt;/a&gt;.&lt;/p&gt;  &lt;h4&gt;Lunch Time&lt;/h4&gt;  &lt;p&gt;There was nothing interesting to report about the lunch itself.  It was standard pizza, but I got there late, so it was cold.&lt;/p&gt;  &lt;p&gt;At the end of the lunch, I spent a great deal of time talking to &lt;a href="http://sqlandy.com/" target="_blank"&gt;Andy Warren&lt;/a&gt; about community and community events though.  It was probably the most valuable and rewarding part of the day.  Even though Andy lives in my neck of the woods, I would have traveled to Miami just for that conversation.  Thanks, Andy!&lt;/p&gt;  &lt;p&gt;That highlights the most important thing about these events…  The social networking that can be done at code camps is something that can only be duplicated by user group meetings.  However, not to scale.  I have seen a ton of positive conversations, plans, partnerships, jobs, and much more come out of the networking at events like these.  Heck, that’s how the &lt;a href="http://dayofdnn.com" target="_blank"&gt;Day of DotNetNuke®&lt;/a&gt; was born!&lt;/p&gt;  &lt;h4&gt;The Rest of the Sessions&lt;/h4&gt;  &lt;p&gt;&lt;a href="http://www.jimbegley.com" target="_blank"&gt;Jim Begley&lt;/a&gt; was on-deck again to speak about &lt;a href="http://www.dotnetnuke.com" target="_blank"&gt;DotNetNuke®&lt;/a&gt;, and this time it &lt;em&gt;Selling DotNetNuke to the Small and Medium-Sized Business&lt;/em&gt;.  Since my conversation with Andy had last much longer than I anticipated, I one again missed the beginning of Jim’s presentation.  However, the rest of what I saw was on par with what I would call a great presentation.  He had plenty of attendee participation, where it was clear that they all were very interested in using DNN to make money.  Nice!  That is usually a clear indicator of the success in a presentation, and this time it really was.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.willstrohl.com/Portals/1/Blog/Files/3/549/WLW-SouthFloridaCodeCamp2010Recap_149F1-IMG_3439.jpg"&gt;&lt;img style="border-right-width: 0px; margin: 0px 5px 5px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="South Florida Speaker Idol Regionals" border="0" alt="South Florida Speaker Idol Regionals" align="left" src="/Portals/1/Blog/Files/3/549/WLW-SouthFloridaCodeCamp2010Recap_149F1-IMG_3439_thumb.jpg" width="244" height="184" /&gt;&lt;/a&gt; I only stayed for one more session before leaving to pickup the family before the after party, and it really wasn’t really a session.  It was the South Florida Microsoft Speaker Idol Regional competition.  The winner of this contest would compete against the other regions at &lt;a href="http://www.orlandocodecamp.com" target="_blank"&gt;Orlando Code Camp&lt;/a&gt; next month.&lt;/p&gt;  &lt;p&gt;There were 5 presenters competing for this honor, and a $200 gift card.  Each contestant would need to give a 10 minute or less presentation about anything Microsoft.  There were some outstanding presentations, including SEO, ASP.Net 0-60, and more.  Though I really favored a presentation from someone that didn’t place in the top 3, the winner was &lt;strong&gt;Jeff Truman&lt;/strong&gt;.  Congrats!&lt;/p&gt;  &lt;p&gt;(That being said, I was later recruited to be a judge at the State finals, so I am now accepting bribes!  Hehehe…)&lt;/p&gt;  &lt;h4&gt;The After Party&lt;/h4&gt;  &lt;p&gt;The family and I arrived early to the after party venue, &lt;strong&gt;JP Mulligans&lt;/strong&gt;.  The after party is one of the most important parts of the code camp events, that is, unless you know everything and know everyone already.  If you never want to gain another contact or learn anything new, then by all means, skip the after party.  You probably can do everything on your own, without any help whatsoever.  :P&lt;/p&gt;  &lt;p&gt;The venue was pretty good for an after party.  It’s basically a bar and grill, and specializes in beer and wings.  The coolest part of this place though was that one entire side was actually the side of a hockey rink too!  We were able to watch 2 different hockey games while we were there.  It was awesome!  My son especially liked it.  His face was glued to the glass most of the night.&lt;/p&gt;  &lt;p&gt;The food at events like these is never meant to last, so it went pretty quickly.  Only a couple of people missed it.  There was plenty of great conversations had that night.  Did you miss it?  Tsk, tsk…  Along with the rest of the event, you can see some of the &lt;a href="http://www.facebook.com/album.php?aid=2045553&amp;id=1046966128" target="_blank"&gt;SFLCC pictures on my Facebook album&lt;/a&gt;.  Don’t miss it next time!&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:4e42bbc7-11fa-4a55-97e1-f6e9ab76f976" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/DotNetNuke" rel="tag"&gt;DotNetNuke&lt;/a&gt;,&lt;a href="http://technorati.com/tags/DNN" rel="tag"&gt;DNN&lt;/a&gt;,&lt;a href="http://technorati.com/tags/DNN+Blogs" rel="tag"&gt;DNN Blogs&lt;/a&gt;,&lt;a href="http://technorati.com/tags/South+Florida+Code+Camp" rel="tag"&gt;South Florida Code Camp&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Code+Camp" rel="tag"&gt;Code Camp&lt;/a&gt;,&lt;a href="http://technorati.com/tags/XMod" rel="tag"&gt;XMod&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Modules" rel="tag"&gt;Modules&lt;/a&gt;&lt;/div&gt;</description>
      <link>http://www.willstrohl.com/Blog/EntryId/549/South-Florida-Code-Camp-2010-Recap</link>
      <author>wills@strohlsitedesign.com</author>
      <comments>http://www.willstrohl.com/Blog/EntryId/549/South-Florida-Code-Camp-2010-Recap#Comments</comments>
      <guid isPermaLink="true">http://www.willstrohl.com/Blog/EntryId/549/South-Florida-Code-Camp-2010-Recap</guid>
      <pubDate>Mon, 01 Mar 2010 05:59:00 GMT</pubDate>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.willstrohl.com/DesktopModules/Blog/Trackback.aspx?id=549</trackback:ping>
    </item>
    <item>
      <title>Presentation files for AJAX-ifying DotNetNuke Modules</title>
      <description>&lt;p&gt;I just got home from the 2010 &lt;a href="http://www.fladotnet.com/codecamp/" target="_blank"&gt;South Florida Code Camp&lt;/a&gt;, where I presented a session titled “How to AJAX-ify Your DotNetNuke Modules.”  Here are the presentation files for that session.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Slide Deck&lt;/strong&gt; – This can be downloaded from my &lt;a href="http://www.willstrohl.com/Sessions"&gt;Sessions page&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Code Files&lt;/strong&gt; – The code files has been released as an open source module on CodePlex.  This module is called the &lt;a href="http://querytogrid.codeplex.com/" target="_blank"&gt;QueryToGrid module&lt;/a&gt;.&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:d2e88bb4-9156-4f79-8bc0-30870e69711c" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/DotNetNuke" rel="tag"&gt;DotNetNuke&lt;/a&gt;,&lt;a href="http://technorati.com/tags/DNN" rel="tag"&gt;DNN&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Modules" rel="tag"&gt;Modules&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Session" rel="tag"&gt;Session&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Presentation" rel="tag"&gt;Presentation&lt;/a&gt;&lt;/div&gt;</description>
      <link>http://www.willstrohl.com/Blog/EntryId/548/Presentation-files-for-AJAX-ifying-DotNetNuke-Modules</link>
      <author>wills@strohlsitedesign.com</author>
      <comments>http://www.willstrohl.com/Blog/EntryId/548/Presentation-files-for-AJAX-ifying-DotNetNuke-Modules#Comments</comments>
      <guid isPermaLink="true">http://www.willstrohl.com/Blog/EntryId/548/Presentation-files-for-AJAX-ifying-DotNetNuke-Modules</guid>
      <pubDate>Mon, 01 Mar 2010 04:19:00 GMT</pubDate>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.willstrohl.com/DesktopModules/Blog/Trackback.aspx?id=548</trackback:ping>
    </item>
    <item>
      <title>Did You Read the Shaun Walker Interview Today</title>
      <description>&lt;p&gt;&lt;a href="http://howsoftwareisbuilt.com/2010/02/08/interview-with-shaun-walker-dotnetnuke-co-founder/" target="_blank"&gt;&lt;img style="border-right-width: 0px; margin: 0px 5px 5px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="howsoftwareisbuilt.com: Shaun Walker Interview" border="0" alt="howsoftwareisbuilt.com: Shaun Walker Interview" align="left" src="/Portals/1/Blog/Files/3/547/WLW-DidYouReadtheShaunWalkerInterview_12632-howsoftwareisbuilt-shaun-walker-interview-screenshot_3.png" width="204" height="152" /&gt;&lt;/a&gt; I just finished reading the &lt;a href="http://howsoftwareisbuilt.com/2010/02/08/interview-with-shaun-walker-dotnetnuke-co-founder/" target="_blank"&gt;interview with Shaun Walker&lt;/a&gt; by the folks at &lt;a href="http://www.howsoftwareisbuilt.com/about/" target="_blank"&gt;HowSoftwareIsBuilt.com&lt;/a&gt;.  This is a website sponsored by Microsoft, whose purpose is to open a dialogue for proprietary and open source software development.  What I think that means is that every developer you meet will have a slightly (or drastic) variance on what each of those terms mean.  This website appears to have its goals rooted in bridging that gap.  In helping to build that bridge, they recently interviewed Shaun Walker.&lt;/p&gt;  &lt;p&gt;If you’re new to &lt;a href="http://www.dotnetnuke.com" target="_blank"&gt;DotNetNuke®&lt;/a&gt;, then you might not know who Shaun Walker is.  Basically, he’s the father of DNN.  He was the original developer behind the web application framework you’re using today.  I won’t go into any greater detail here, because Shaun does a much better job of telling us who he is in his interview.&lt;/p&gt;  &lt;p&gt;The interview covers the topics that we have heard before, but not a whole lot.  We pretty much all know where DNN came from if we’ve been in the DNN community for a while.  However, this article begins and hovers over how DNN has grown over the past 2 years, especially with the venture capital funding.  That is all great information, and I found it useful.  However, I think there is a single section that most of the community will be very interested in.&lt;/p&gt;  &lt;p&gt;One of the questions posed to Shaun asks about the future of &lt;a href="http://www.dotnetnuke.com" target="_blank"&gt;DotNetNuke®&lt;/a&gt;.  Any of us that are running businesses or sites that depend on DNN should keep our eyes open here whenever the topic is brought up.  Fortunately, there wasn’t any new information there, but not everyone is aware of these future goals.&lt;/p&gt;  &lt;p&gt;The most notable goal to me is for the DNN platform and the DNN marketplace (&lt;a href="http://www.snowcovered.com" target="_blank"&gt;Snowcovered&lt;/a&gt;) to become a more seamless experience.  This goal is important for a number of reasons.  The first reason this is important to pay attention to, is that they are using the IPhone App Store as a model to try and minimize the learning curve and obstacles for non-technical hosts using the DNN framework.  (Yes, there are plenty of them out there, and they need help.)  &lt;/p&gt;  &lt;p&gt;The main reason I loved to hear this is what other things this implies.  If you haven’t already  noticed, with each release of DNN, it becomes more and more usable.  Many of the tasks that seemed troublesome or tedious have been getting easier.  This is a path that will continue to grow.  This has always been a concern and on the radar for the &lt;a href="http://www.dotnetnuke.com" target="_blank"&gt;DotNetNuke®&lt;/a&gt; Corporation, but since they are now managing a commercial product, these enhancements are happening much faster.&lt;/p&gt;  &lt;p&gt;The other future enhancement is already being done by those in the DNN offices, and elsewhere.  This is the use of the cloud to host DNN websites.  There are already many DNN websites, including mission-critical ones, that are utilizing the cloud – and doing it well.  Luckily for them, DNN has its sights set on making sure that these use cases are completely covered.&lt;/p&gt;  &lt;p&gt;There is more to the article, and I encourage you to &lt;a href="http://howsoftwareisbuilt.com/2010/02/08/interview-with-shaun-walker-dotnetnuke-co-founder/" target="_blank"&gt;read it for yourself&lt;/a&gt;.&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:62f9c18a-e2f6-4132-81fd-05dc94982bb6" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/DotNetNuke" rel="tag"&gt;DotNetNuke&lt;/a&gt;,&lt;a href="http://technorati.com/tags/DNN" rel="tag"&gt;DNN&lt;/a&gt;,&lt;a href="http://technorati.com/tags/DNN+Blogs" rel="tag"&gt;DNN Blogs&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Interview" rel="tag"&gt;Interview&lt;/a&gt;&lt;/div&gt;</description>
      <link>http://www.willstrohl.com/Blog/EntryId/547/Did-You-Read-the-Shaun-Walker-Interview-Today</link>
      <author>wills@strohlsitedesign.com</author>
      <comments>http://www.willstrohl.com/Blog/EntryId/547/Did-You-Read-the-Shaun-Walker-Interview-Today#Comments</comments>
      <guid isPermaLink="true">http://www.willstrohl.com/Blog/EntryId/547/Did-You-Read-the-Shaun-Walker-Interview-Today</guid>
      <pubDate>Thu, 25 Feb 2010 02:05:00 GMT</pubDate>
      <slash:comments>7</slash:comments>
      <trackback:ping>http://www.willstrohl.com/DesktopModules/Blog/Trackback.aspx?id=547</trackback:ping>
    </item>
    <item>
      <title>DotNetNuke Has Plenty of SEO Built Into It</title>
      <description>&lt;p&gt;As you likely know, I am a user of twitter.  You’ll find me at:  &lt;a href="http://twitter.com/WillStrohl" target="_blank"&gt;http://twitter.com/WillStrohl&lt;/a&gt;.  Lately, I don’t contribute as much as I used to, but I still try and pay attention to what’s going on.  For example, I have an ongoing search that filters all tweets based on some &lt;a href="http://www.dotnetnuke.com" target="_blank"&gt;DotNetNuke®&lt;/a&gt; keywords.  Today, this search came across a blog post titled, &lt;a href="http://dotnetnukedevelopers.wordpress.com/2010/02/22/does-dnn-allow-me-to-do-seo-stuff/" target="_blank"&gt;Does DNN Allow Me To Do SEO Stuff&lt;/a&gt;.  I liked this post, despite it being on a non-DNN blog platform.  It only scrapes the surface though.&lt;/p&gt;  &lt;p&gt;Basically, it mentions that DNN makes it easy to manage the Page Title, Keywords, and Description.  Unfortunately, the only thing here that is very important these days with SEO is the Page Title.  The Kewords and Description can help, but by all accounts, little to no improvements are seen these days with the Keywords and Description.&lt;/p&gt;  &lt;p&gt;So where does that leave us?  Does DNN end there and leave us to our own wits when it comes to SEO?  Absolutely not!&lt;/p&gt;  &lt;h4&gt;XML Site Map&lt;/h4&gt;  &lt;p&gt;DNN also automatically generates an XML Site Map for its portals.  You still have to submit it though.  In order to view it, you simply need to visit your site root, and append SiteMap.aspx to the end.  For example, here’s mine:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://www.willstrohl.com/SiteMap.aspx" target="_blank"&gt;http://www.WillStrohl.comhttp://www.willstrohl.com/SiteMap.aspx&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;This feature had historically been given a bad reputation, as it would automatically assign the same importance value of 0.5 to every page in your site.  As you might imagine, most sites would have pages that rate more or less value than that.  With a scale from 0.1 to 1.0, that leaves plenty of room to play with.  Luckily, DNN has the ability in the Advanced Settings area of the Page Settings to adjust this value.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.willstrohl.com/Portals/1/Blog/Files/3/546/WLW-DotNetNukeHasPlentyofSEOBuiltIntoIt_7D7B-Site-Map-Priority_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="DotNetNuke &gt; Page Settings: Site Map Priority" border="0" alt="DotNetNuke &gt; Page Settings: Site Map Priority" src="/Portals/1/Blog/Files/3/546/WLW-DotNetNukeHasPlentyofSEOBuiltIntoIt_7D7B-Site-Map-Priority_thumb.png" width="504" height="252" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;h4&gt;Submit Your Site to Search Engines&lt;/h4&gt;  &lt;p&gt;Each DNN portal allows you to submit your website to various search engines in the Site Settings.  However, you should make sure that you do not do this until your site is at a stable point with plenty of content on it (or as much as you’ll have).  Also, if you plan to make your URLs SEO-friendly in some way, I’d wait until that is done as well.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.willstrohl.com/Portals/1/Blog/Files/3/546/WLW-DotNetNukeHasPlentyofSEOBuiltIntoIt_7D7B-DNN-Submit-To-Search-Engines_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="DotNetNuke &gt; Site Settings : Submit To Search Engines" border="0" alt="DotNetNuke &gt; Site Settings : Submit To Search Engines" src="/Portals/1/Blog/Files/3/546/WLW-DotNetNukeHasPlentyofSEOBuiltIntoIt_7D7B-DNN-Submit-To-Search-Engines_thumb.png" width="504" height="92" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;h4&gt;Page URLs&lt;/h4&gt;  &lt;p&gt;One of the biggest weaknesses with DNN is also one of its biggest strengths – Page URLs.  The weakness is that there are literally infinite possible URLs to reach any given web page on a typical DNN site.  For example, the following URLs might all render the same exact page in a web browser:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font face="Courier New"&gt;http://www.domain.com        &lt;br /&gt;http://www.domain.com/Default.aspx         &lt;br /&gt;http://www.domain.com/Default.aspx?tabid=36         &lt;br /&gt;http://www.domain.com/Home.aspx         &lt;br /&gt;http://www.domain.com/Home/tabid/36/Default.aspx         &lt;br /&gt;http://www.domain.com/AnythingAnyoneWantsToPutHereWillNotMatter/tabid/36/Default.aspx&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;The list goes on…  You get the idea, I hope.  Luckily, DNN comes with a feature called Human Friendly URLs.  It was only enabled by default with new installations of DNN 05.01.xx sites and above.  Previously, you had to enable this on your own, and it had to be done in the &lt;font face="Courier New"&gt;web.config&lt;/font&gt;.  This will render the human-readable URLs to the page, using the Page Name in the Page Settings, instead of the others.&lt;/p&gt;  &lt;p&gt;However, I mentioned that this is one of the biggest strengths.  How is that?  I can sum that up in one word: extensibility.  There are a variety of ways to apply 3rd party solutions to this potential problem.  With the simple installation of a module, you can have complete control over the URLs that are emitted to your web pages.  Examples of this are &lt;a href="http://www.snapsis.com/PageBlaster.aspx?CATReferrer=5487" target="_blank"&gt;PageBlaster&lt;/a&gt; by &lt;a href="http://www.snapsis.com" target="_blank"&gt;Snapsis&lt;/a&gt;, &lt;a href="http://ifinity.com.au/Products/Url_Master_DNN_SEO_Urls" target="_blank"&gt;URL Master&lt;/a&gt; by &lt;a href="http://ifinity.com.au" target="_blank"&gt;Ifinity&lt;/a&gt;, or the &lt;a href="http://www.dnnmasters.com/products-services/dnn-modules/seo-modules" target="_blank"&gt;SEO Modules&lt;/a&gt; by &lt;a href="http://www.dnnmasters.com/" target="_blank"&gt;DNNMasters&lt;/a&gt;.  With a very low cost, you can have all of the power that you could ask for with your URLs.&lt;/p&gt;  &lt;h4&gt;Canonical URLs&lt;/h4&gt;  &lt;p&gt;One of the best things that could have happened recently, and to my knowledge, the only thing that the various search engines have openly collaborated on is &lt;a href="http://www.mattcutts.com/blog/canonical-link-tag/" target="_blank"&gt;Canonical URLs or Links&lt;/a&gt;.  This is HUGE!  This allows us to help reduce how search engines perceive dynamic websites like DNN where it would appear that there is duplicate content, where there really isn’t duplicate content.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetnuke.com" target="_blank"&gt;DotNetNuke®&lt;/a&gt; allows you to add this to your page, and any other Meta Data for that matter, in the Page Settings.  Just add the canonical link tag into the Page Header Tags field in the Page Settings.  The URL you specify here will be recognized by search engines as the “official” or only URL for the content on that page, no matter how many URLs are pointing to it.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.willstrohl.com/Portals/1/Blog/Files/3/546/WLW-DotNetNukeHasPlentyofSEOBuiltIntoIt_7D7B-DNN-Page-Header-Tags_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="DotNetNuke &gt; Page Settings : Page Header Tags" border="0" alt="DotNetNuke &gt; Page Settings : Page Header Tags" src="/Portals/1/Blog/Files/3/546/WLW-DotNetNukeHasPlentyofSEOBuiltIntoIt_7D7B-DNN-Page-Header-Tags_thumb.png" width="504" height="92" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;h4&gt;Google Analytics Module&lt;/h4&gt;  &lt;p&gt;One of the awesome things about version 05.xx of the DNN releases is that it now comes preinstalled with a Google Analytics module, allowing you to automatically include your GA script without any programmers or additional modules being installed on your site.  You will find it in the Admin Menu.  I have already blogged about &lt;a href="http://www.willstrohl.com/Blog/EntryId/400/Google-Analytics-Module-In-DotNetNuke-5-01-00"&gt;how to use the Google Analytics module&lt;/a&gt;, so I will not rehash it now.&lt;/p&gt;  &lt;h4&gt;Site Design: Skinning&lt;/h4&gt;  &lt;p&gt;There are many areas that an SEO campaign needs to focus on when optimizing your website.  One of the most important in this area is the design of the site itself - meaning the HTML and CSS that renders the design, not the design itself.  With DNN, you have 100% control over of the way that your web pages are rendered though the DNN skinning engine.  The only caveat here is that you need to pay attention to the mark-up that is rendered by the modules on your pages.&lt;/p&gt;  &lt;h4&gt;Summary&lt;/h4&gt;  &lt;p&gt;In general, the most important part of SEO has nothing to do with your site at all.  You need to build the reputation of your site by having other reputable websites link to yours.&lt;/p&gt;  &lt;p&gt;There are many other areas where SEO comes into play with DNN, but this post would go on forever.  Remember this though…  Content is KING!  If you don’t have content that is of value, then the rest of your SEO work is for nothing.  Keep high-quality content on your site, and make sure your content is refreshed regularly.  If your content has value, people will link to it.  If it is refreshed, search engines will come back more often.&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:eeb1e223-4ec2-421c-811b-a8a02df7bd33" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/DotNetNuke" rel="tag"&gt;DotNetNuke&lt;/a&gt;,&lt;a href="http://technorati.com/tags/DNN" rel="tag"&gt;DNN&lt;/a&gt;,&lt;a href="http://technorati.com/tags/DNN+Blogs" rel="tag"&gt;DNN Blogs&lt;/a&gt;,&lt;a href="http://technorati.com/tags/SEO" rel="tag"&gt;SEO&lt;/a&gt;&lt;/div&gt;</description>
      <link>http://www.willstrohl.com/Blog/EntryId/546/DotNetNuke-Has-Plenty-of-SEO-Built-Into-It</link>
      <author>wills@strohlsitedesign.com</author>
      <comments>http://www.willstrohl.com/Blog/EntryId/546/DotNetNuke-Has-Plenty-of-SEO-Built-Into-It#Comments</comments>
      <guid isPermaLink="true">http://www.willstrohl.com/Blog/EntryId/546/DotNetNuke-Has-Plenty-of-SEO-Built-Into-It</guid>
      <pubDate>Wed, 24 Feb 2010 09:57:00 GMT</pubDate>
      <slash:comments>2</slash:comments>
      <trackback:ping>http://www.willstrohl.com/DesktopModules/Blog/Trackback.aspx?id=546</trackback:ping>
    </item>
    <item>
      <title>Updating DotNetNuke Blog Permalinks for URL Master</title>
      <description>&lt;p&gt;If you’re using the &lt;a href="http://ifinity.com.au/Products/Url_Master_DNN_SEO_Urls" target="_blank"&gt;URL Master&lt;/a&gt; module from &lt;a href="http://ifinity.com.au" target="_blank"&gt;IFinity&lt;/a&gt;, chances are that you are also using the extension-less URL pattern like you see on my site.  This is a great way to shorten your URLs for a more SEO-friendly impact when search engine spiders crawl your site.  It also removes the TabID from the URL, which also has a meaningful impact on SEO – not to mention making the URLs more human-friendly.  This is sometimes more important than the SEO benefits.&lt;/p&gt;  &lt;p&gt;By default, the &lt;a href="http://www.dotnetnuke.com" target="_blank"&gt;DotNetNuke®&lt;/a&gt; Blog Module generates a URL that looks like the following URL:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font face="Courier New"&gt;http://www.domain.com/PageName/tabid/123/EntryID/123/Blog-Title.aspx&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;This isn’t a horrible URL structure, but it leaves &lt;u&gt;plenty&lt;/u&gt; of room for improvement.  That pesky &lt;font face="Courier New"&gt;TabID&lt;/font&gt; needs to go.  This is done automatically by &lt;a href="http://ifinity.com.au/Products/Url_Master_DNN_SEO_Urls" target="_blank"&gt;URL Master&lt;/a&gt;.  It also gets rid of the &lt;font face="Courier New"&gt;.aspx&lt;/font&gt; for you with a simple setting checkbox.  You really cannot get rid of the &lt;font face="Courier New"&gt;EntryID&lt;/font&gt; without modifying the Blog Module code.  You could get rid of the &lt;font face="Courier New"&gt;PageName&lt;/font&gt; too, but you might not even have to deal with it if your blog module lives on your home page.  For me, the optimal URL would look more like this:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font face="Courier New"&gt;http://www.domain.com/PageName/EntryID/123/Blog-Title&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;You may notice that I already have that done.  Well, &lt;a href="http://ifinity.com.au/Products/Url_Master_DNN_SEO_Urls" target="_blank"&gt;URL Master&lt;/a&gt; made its job easy, but I still had the old URLs rendered in the mark-up of the blog module.  Meaning, when you hovered over the blog links, you saw the original URL format, and your web browser goes to that same URL when the link is clicked.  Luckily, &lt;a href="http://ifinity.com.au/Products/Url_Master_DNN_SEO_Urls" target="_blank"&gt;URL Master&lt;/a&gt; will perform a 301 redirect, so the search engines are covered, but it would be even better for the search engines, and even better for your visitors who might create their own links to those blog links in your page.&lt;/p&gt;  &lt;p&gt;How do we fix this?  My first instinct was to regenerate the permalinks in the blog module, in its Blog Settings.  This didn’t have the intended effect.  So, I resolved to having to manually update the permalinks.  It’s unbelievably simple to make this update.  You can do it in one query, but I have it broken down into two queries for illustration.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;&lt;font color="#ff0000"&gt;PLEASE NOTE: These updates have an irreversible effect on the database. It is suggested that you try this on a staging site first, and backup your database prior to executing these queries.&lt;/font&gt;&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;First, remove the &lt;font face="Courier New"&gt;TabID&lt;/font&gt; from the URL using this query (replace 123 with the appropriate tabid):&lt;/p&gt;  &lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;   &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;     &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;UPDATE&lt;/span&gt; {databaseOwner}[{objectQualifier}Blog_Entries] &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;SET&lt;/span&gt; [PermaLink] = REPLACE([PermaLink],N&lt;span style="color: #006080"&gt;'/tabid/123'&lt;/span&gt;,N&lt;span style="color: #006080"&gt;''&lt;/span&gt;);&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Second, remove the &lt;font face="Courier New"&gt;.aspx&lt;/font&gt; extension using this query:&lt;/p&gt;

&lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;
  &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;UPDATE&lt;/span&gt; {databaseOwner}[{objectQualifier}Blog_Entries] &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;SET&lt;/span&gt; [PermaLink] = REPLACE([PermaLink],N&lt;span style="color: #006080"&gt;'.aspx'&lt;/span&gt;,N&lt;span style="color: #006080"&gt;''&lt;/span&gt;);&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;If you want to see the effects you just had on the database, just run this query:&lt;/p&gt;

&lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;
  &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;SELECT&lt;/span&gt; [BlogID],[EntryID],[Title],[PermaLink]&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;FROM&lt;/span&gt; [dbo].[Blog_Entries] &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt;   3:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;ORDER&lt;/span&gt; &lt;span style="color: #0000ff"&gt;BY&lt;/span&gt; [EntryId] &lt;span style="color: #0000ff"&gt;DESC&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;I added the &lt;font face="Courier New"&gt;databaseOwner&lt;/font&gt; and &lt;font face="Courier New"&gt;objectQualifier&lt;/font&gt; tokens in the previous code snippets so that they could be run in the SQL Module.&lt;/p&gt;

&lt;p&gt;That’s all there is to it.  Once your cache refreshes, all of your blog URLs should be rendered in the new SEO-friendly format.&lt;/p&gt;

&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:8008b962-5ffa-4482-b871-74ed1dd32809" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/DotNetNuke" rel="tag"&gt;DotNetNuke&lt;/a&gt;,&lt;a href="http://technorati.com/tags/DNN" rel="tag"&gt;DNN&lt;/a&gt;,&lt;a href="http://technorati.com/tags/DNN+Blogs" rel="tag"&gt;DNN Blogs&lt;/a&gt;,&lt;a href="http://technorati.com/tags/T-SQL" rel="tag"&gt;T-SQL&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Blog+Module" rel="tag"&gt;Blog Module&lt;/a&gt;,&lt;a href="http://technorati.com/tags/URL+Master+Module" rel="tag"&gt;URL Master Module&lt;/a&gt;,&lt;a href="http://technorati.com/tags/SEO" rel="tag"&gt;SEO&lt;/a&gt;&lt;/div&gt;</description>
      <link>http://www.willstrohl.com/Blog/EntryId/545/Updating-DotNetNuke-Blog-Permalinks-for-URL-Master</link>
      <author>wills@strohlsitedesign.com</author>
      <comments>http://www.willstrohl.com/Blog/EntryId/545/Updating-DotNetNuke-Blog-Permalinks-for-URL-Master#Comments</comments>
      <guid isPermaLink="true">http://www.willstrohl.com/Blog/EntryId/545/Updating-DotNetNuke-Blog-Permalinks-for-URL-Master</guid>
      <pubDate>Mon, 22 Feb 2010 21:33:00 GMT</pubDate>
      <slash:comments>2</slash:comments>
      <trackback:ping>http://www.willstrohl.com/DesktopModules/Blog/Trackback.aspx?id=545</trackback:ping>
    </item>
    <item>
      <title>WillStrohl.com Has a New and Improved Look</title>
      <description>&lt;p&gt;&lt;a href="http://www.willstrohl.com/Portals/1/Blog/Files/3/544/WLW-WillStrohl.comHasaNewSkin_F25F-willstrohl_blog_screentshot_2.png"&gt;&lt;img style="border-right-width: 0px; margin: 0px 0px 5px 5px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="WillStrohl.com Blog Page Screen Shot" border="0" alt="WillStrohl.com Blog Page Screen Shot" align="right" src="/Portals/1/Blog/Files/3/544/WLW-WillStrohl.comHasaNewSkin_F25F-willstrohl_blog_screentshot_thumb.png" width="204" height="310" /&gt;&lt;/a&gt; I had been planning for a long, long time to update the design of my blog site.  Even though I consider myself a proficient skinner, I simply haven’t been able to find the time to return to it for my own projects.  Nearly all of my professional and personal time has been taken up recently with module development.  Through this, I have found that not only did I not have the time to build myself a new skin, I also have been getting a bit rusty at it.  Well, through the magic of networking at user group meetings, I was able to partner with someone to make this happen.&lt;/p&gt;  &lt;p&gt;I mentioned the magic of networking at the user group meetings.  This is the truth.  User group meetings are rarely about the topic or speaker.  The most value I have ever seen come out of any meeting has come from the networking between members.  I have seen businesses get created, events get planned, projects get started, jobs get found, and more.  It’s an amazing thing, and it’s no secret – which is why I am completely at a loss for why some people don’t go to user group meetings.  Anyhow…&lt;/p&gt;  &lt;h3&gt;Who Built My Skin?&lt;/h3&gt;  &lt;p&gt;&lt;a href="http://ralphwilliams.com/" target="_blank"&gt;&lt;img style="border-right-width: 0px; margin: 0px 5px 5px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Ralph Williams, Jr." border="0" alt="Ralph Williams, Jr." align="left" src="/Portals/1/Blog/Files/3/544/WLW-WillStrohl.comHasaNewSkin_F25F-RalphWilliamsJr_2009_3.jpg" width="104" height="137" /&gt;&lt;/a&gt; During one of these user group meetings, I mentioned the goals I had in my blog and some of the updates that I wanted to make to it.  Someone spoke up and said that they’d be willing to build my skin for me.  This person was &lt;a href="http://ralphwilliams.com/" target="_blank"&gt;Ralph Williams&lt;/a&gt;.  I am no stranger to Ralph.  He works at &lt;a href="http://www.architechsw.com" target="_blank"&gt;ArchitechSW&lt;/a&gt; as a skin designer, which are the same folks who created the &lt;a href="http://dayofdnn.com" target="_blank"&gt;Day of DotNetNuke®&lt;/a&gt; skin.  Well, I should be more accurate.  They are responsible for nearly all of the current branding of the &lt;a href="http://dayofdnn.com" target="_blank"&gt;Day of DotNetNuke®&lt;/a&gt;.  They designed the logo, the favicons, the skin, a press release kit, and more.  It was much more than I had expected.&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://architechsw.com" target="_blank"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="ArchiTech Software" border="0" alt="ArchiTech Software" src="/Portals/1/Blog/Files/3/544/WLW-WillStrohl.comHasaNewSkin_F25F-ArchiTechLogo_3.jpg" width="172" height="65" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;That wasn’t the end of my experience with &lt;a href="http://www.architechsw.com" target="_blank"&gt;ArchitechSW&lt;/a&gt;, I have since used them for some of my other projects.  They continue to not disappoint.&lt;/p&gt;  &lt;h3&gt;What’s New?&lt;/h3&gt;  &lt;p&gt;This new skin was built keeping three things in mind: pure CSS, search engine optimization (SEO), and sharing.  Even though I felt that my page load times were decent enough, page render times were still an issue.  By going the path of pure CSS, this would alleviate that issue, as well as increase cross browser compatibility and decrease design issues within the other elements on the site.  Furthermore, it would strengthen the ability for me to reuse design elements throughout.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Note that I didn’t say XHTML compliant.  This is because &lt;a href="http://www.youtube.com/watch?v=FPBACTS-tyg" target="_blank"&gt;Google has revealed&lt;/a&gt; that they are not concerned about markup compliance. Therefore, I am concerned about rendering, and not compliance myself.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Search engine optimization is a concern for most bloggers, but as a blogger, there is rarely time or resources to devote to it.  Luckily, I was able to carve out time some to dedicate to it.  I have added sections in the footer of the page to increase the cross page linking and visibility for updates on the site.  Each part of the region is using live data to generate recent comments, most popular blog entries, and more, using only core DNN functionality.  This alone will end up contributing significantly to web traffic, page popularity, and blog subscribers.&lt;/p&gt;  &lt;p&gt;When I said that I used existing DNN functionality, I simply reused data using the &lt;a href="http://dnnreports.codeplex.com/" target="_blank"&gt;Reports Module&lt;/a&gt; and the database, or the &lt;a href="http://dnnxml.codeplex.com/" target="_blank"&gt;XML Module&lt;/a&gt; and my RSS feeds.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.willstrohl.com/Portals/1/Blog/Files/3/544/WLW-WillStrohl.comHasaNewSkin_F25F-willstrohl_footer_regions_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="WillStrohl.com Footer regions" border="0" alt="WillStrohl.com Footer regions" src="/Portals/1/Blog/Files/3/544/WLW-WillStrohl.comHasaNewSkin_F25F-willstrohl_footer_regions_thumb.png" width="504" height="264" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;The search element is not the Core DNN Search.  We all know that there is much work to be done before that’s completely useful.  So, we opted instead to use an AJAX enabled search that uses Google as its back-end.  I have a couple of usability issues left to deal with, but they will indeed be solved.&lt;/p&gt;  &lt;p&gt;On every page, you are able to share the page through a large handful of avenues.  Just choose your preferred method in the top-right of every page.&lt;/p&gt;  &lt;p&gt;Probably the most important update that was made was to make the URLs throughout my website even more SEO-friendly than they were.  I used &lt;a href="http://www.snapsis.com/PageBlaster.aspx?CATReferrer=5487" target="_blank"&gt;PageBlaster&lt;/a&gt; to do this for some of my pages, but this module is not suited to easily manage dynamic URLs that are generated by modules, like the &lt;a href="http://dnnblog.codeplex.com/" target="_blank"&gt;Blog Module&lt;/a&gt;.  So, while I am still using &lt;a href="http://www.snapsis.com/PageBlaster.aspx?CATReferrer=5487" target="_blank"&gt;PageBlaster&lt;/a&gt; to perform some text replacement and compression, I am now using &lt;a href="http://ifinity.com.au/Products/Url_Master_DNN_SEO_Urls" target="_blank"&gt;URL Master&lt;/a&gt; by &lt;a href="http://ifinity.com.au" target="_blank"&gt;Ifinity&lt;/a&gt; to perform all of my URL management.&lt;/p&gt;  &lt;p&gt;What’s the benefit of that?  This allows me to use something like this:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.willstrohl.com"&gt;http://www.willstrohl.com&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Instead of:  &lt;a href="http://www.willstrohl.com/Home.aspx"&gt;http://www.willstrohl.comhttp://www.willstrohl.com/Home.aspx&lt;/a&gt; or &lt;a href="http://www.willstrohl.com/Home/tabid/36http://www.willstrohl.com/Default.aspx"&gt;http://www.willstrohl.comhttp://www.willstrohl.com/Home/tabid/36http://www.willstrohl.com/Default.aspx&lt;/a&gt; or &lt;a href="http://www.willstrohl.com/Default.aspx"&gt;http://www.willstrohl.comhttp://www.willstrohl.com/Default.aspx&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;I think you get the idea.  All non-preferred URLs will get 301’s to a single acceptable and SEO-friendly URL that’s also human-friendly, all the while preventing search engines from thinking I have multiple pages with duplicate content.  This has a &lt;u&gt;massive&lt;/u&gt; SEO benefit!&lt;/p&gt;  &lt;p&gt;I also made all of my list content available through XML feeds using the &lt;a href="http://dnnfnl.codeplex.com/" target="_blank"&gt;Form and List Module&lt;/a&gt;.  This duplicates the kind of set-up that the &lt;a href="http://dnnlinks.codeplex.com/" target="_blank"&gt;Links Module&lt;/a&gt; has, but I have complete control over the mark-up rendered using XSLT.  What lists, you ask?  Well, my &lt;a href="http://www.willstrohl.comhttp://www.willstrohl.com/Home.aspx#1023" target="_blank"&gt;blog roll&lt;/a&gt;, &lt;a href="http://www.willstrohl.comhttp://www.willstrohl.com/Home.aspx#1024" target="_blank"&gt;resources&lt;/a&gt;, &lt;a href="http://www.willstrohl.com/About-Me.aspx#1025" target="_blank"&gt;open source projects&lt;/a&gt;, and &lt;a href="http://www.willstrohl.com/About-Me.aspx#1028" target="_blank"&gt;previous speaking engagements&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;There’s more, but I am not going to bore you with the minor details.&lt;/p&gt;  &lt;h3&gt;What’s Left?&lt;/h3&gt;  &lt;p&gt;There are a few CSS updates left to be made, and the search function needs a usability fix.  Aside from that, I am always looking for ways to update my site.  Let me know what you think!&lt;/p&gt;  &lt;h3&gt;What Modules Am I Using?&lt;/h3&gt;  &lt;p&gt;&lt;a href="http://dnnblog.codeplex.com/" target="_blank"&gt;Blog Module&lt;/a&gt;, &lt;a href="http://wnsfh.codeplex.com/" target="_blank"&gt;Feed Handler Module&lt;/a&gt;, &lt;a href="http://dnnfnl.codeplex.com/" target="_blank"&gt;Form and List Module&lt;/a&gt;, &lt;a href="http://dnnhtml.codeplex.com/" target="_blank"&gt;HTML/Text Module&lt;/a&gt; (CE), &lt;a href="http://wnsinj.codeplex.com/" target="_blank"&gt;Injection Module&lt;/a&gt;, &lt;a href="http://wnslightbox.codeplex.com/" target="_blank"&gt;Lightbox Gallery Module&lt;/a&gt;, &lt;a href="http://www.snapsis.com/PageBlaster.aspx?CATReferrer=5487" target="_blank"&gt;PageBlaster&lt;/a&gt;, &lt;a href="http://dnnreports.codeplex.com/" target="_blank"&gt;Reports Module&lt;/a&gt;, &lt;a href="http://dnnrepository.codeplex.com/" target="_blank"&gt;Repository Module&lt;/a&gt;, &lt;a href="http://www.snowcovered.com/snowcovered2http://www.willstrohl.com/Default.aspx?tabid=242&amp;PackageID=14699" target="_blank"&gt;Universal Tag Cloud&lt;/a&gt;, &lt;a href="http://ifinity.com.au/Products/Url_Master_DNN_SEO_Urls" target="_blank"&gt;URL Master&lt;/a&gt;, and the &lt;a href="http://dnnxml.codeplex.com/" target="_blank"&gt;XML Module&lt;/a&gt;.  (If you didn’t notice, I have links all over my site, yet I literally have 0 instances of the Links Module on my site.)&lt;/p&gt;  &lt;p&gt;Only one of these modules are modified from its original release, and that’s the Blog Module.  I have added bookmark links to it, and changed the way it renders the page title.  This was done about a year ago though.&lt;/p&gt;  &lt;p&gt;That’s about it.  So…  What do you think?&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:45f51f9c-d01f-4f85-8bc0-ab6ac873a64d" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/DotNetNuke" rel="tag"&gt;DotNetNuke&lt;/a&gt;,&lt;a href="http://technorati.com/tags/DNN" rel="tag"&gt;DNN&lt;/a&gt;,&lt;a href="http://technorati.com/tags/DNN+Blogs" rel="tag"&gt;DNN Blogs&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Skins" rel="tag"&gt;Skins&lt;/a&gt;,&lt;a href="http://technorati.com/tags/SEO" rel="tag"&gt;SEO&lt;/a&gt;&lt;/div&gt;</description>
      <link>http://www.willstrohl.com/Blog/EntryId/544/WillStrohl-com-Has-a-New-and-Improved-Look</link>
      <author>wills@strohlsitedesign.com</author>
      <comments>http://www.willstrohl.com/Blog/EntryId/544/WillStrohl-com-Has-a-New-and-Improved-Look#Comments</comments>
      <guid isPermaLink="true">http://www.willstrohl.com/Blog/EntryId/544/WillStrohl-com-Has-a-New-and-Improved-Look</guid>
      <pubDate>Mon, 22 Feb 2010 20:23:00 GMT</pubDate>
      <slash:comments>4</slash:comments>
      <trackback:ping>http://www.willstrohl.com/DesktopModules/Blog/Trackback.aspx?id=544</trackback:ping>
    </item>
    <item>
      <title>How to Clear Out Skins and Containers in DotNetNuke</title>
      <description>&lt;p&gt;There can be many times when you might want to clear out the skin and/or container value assignments for your &lt;a href="http://www.dotnetnuke.com" target="_blank"&gt;DotNetNuke®&lt;/a&gt; website.  The most common example would be when you’re switching skins.  By clearing out the skin and containers, it can make it easier to re-assign the new skins and containers across your site.  (This of course depends on your specific site.)  This is quite easy to accomplish.&lt;/p&gt;  &lt;h3&gt;Default Skins and Containers&lt;/h3&gt;  &lt;p&gt;First, let’s review where the container and skin assignments are made.  This begins at the portal level.  For your portal, you can set the default skin and container to be used for all pages and containers in the Site Settings.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.willstrohl.com/Portals/1/Blog/Files/3/543/WLW-HowtoClearOutSkinsandContainersinDotNetN_13903-sitesettings_appearance_2.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="Site Settings &gt; Basic Settings &gt; Appearance" border="0" alt="Site Settings &gt; Basic Settings &gt; Appearance" src="/Portals/1/Blog/Files/3/543/WLW-HowtoClearOutSkinsandContainersinDotNetN_13903-sitesettings_appearance_thumb.png" width="504" height="173" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;These values, once saved, live in the PortalSettings table in the DNN database.  You can find these values by using the following query. &lt;/p&gt;  &lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;   &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;     &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;SELECT&lt;/span&gt; [PortalID],[SettingName],[SettingValue]&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;FROM&lt;/span&gt; {databaseOwner}[{objectQualifier}PortalSettings] &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt;   3:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;WHERE&lt;/span&gt; [SettingName] &lt;span style="color: #0000ff"&gt;IN&lt;/span&gt; (N&lt;span style="color: #006080"&gt;'DefaultAdminContainer'&lt;/span&gt;,N&lt;span style="color: #006080"&gt;'DefaultAdminSkin'&lt;/span&gt;,N&lt;span style="color: #006080"&gt;'DefaultPortalContainer'&lt;/span&gt;,N&lt;span style="color: #006080"&gt;'DefaultPortalSkin'&lt;/span&gt;) &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum4"&gt;   4:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;AND&lt;/span&gt; [PortalID] = 0 &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum5"&gt;   5:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;ORDER&lt;/span&gt; &lt;span style="color: #0000ff"&gt;BY&lt;/span&gt; [SettingName]&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;em&gt;For each code sample in this blog, be sure to change the PortalID to reflect your own, if necessary.  Also, replace the tokens if you’re not using the SQL Module to run this code.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In order to clear our the default skin and container settings here, you simply nullify their values.  Here’s an example:&lt;/p&gt;

&lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;
  &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;UPDATE&lt;/span&gt; {databaseOwner}[{objectQualifier}PortalSettings] &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;SET&lt;/span&gt; [SettingValue] = &lt;span style="color: #0000ff"&gt;NULL&lt;/span&gt; &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt;   3:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;WHERE&lt;/span&gt; [SettingName] &lt;span style="color: #0000ff"&gt;IN&lt;/span&gt; (N&lt;span style="color: #006080"&gt;'DefaultAdminContainer'&lt;/span&gt;,N&lt;span style="color: #006080"&gt;'DefaultAdminSkin'&lt;/span&gt;,N&lt;span style="color: #006080"&gt;'DefaultPortalContainer'&lt;/span&gt;,N&lt;span style="color: #006080"&gt;'DefaultPortalSkin'&lt;/span&gt;) &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum4"&gt;   4:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;AND&lt;/span&gt; [PortalID] = 0&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;h3&gt;Skin: Page Settings&lt;/h3&gt;

&lt;p&gt;Even though the skin and container is assigned in the Site Settings, it can be overridden in the Page Settings.  This value is saved to the Tabs table in the database.  The container value is used to be the default container for all new modules added to the current page, instead of the container specified in the Site Settings.  &lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.willstrohl.com/Portals/1/Blog/Files/3/543/WLW-HowtoClearOutSkinsandContainersinDotNetN_13903-pagesettings_advancedsettings_appearance_2.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="Page Settings &gt; Advanced Settings &gt; Appearance" border="0" alt="Page Settings &gt; Advanced Settings &gt; Appearance" src="/Portals/1/Blog/Files/3/543/WLW-HowtoClearOutSkinsandContainersinDotNetN_13903-pagesettings_advancedsettings_appearance_thumb.png" width="504" height="94" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;You can view this information by using the following query.&lt;/p&gt;

&lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;
  &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;SELECT&lt;/span&gt; [TabID],[PortalID],[TabName],[SkinSrc],[ContainerSrc] &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;FROM&lt;/span&gt; {databaseOwner}[{objectQualifier}Tabs]&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;In order to clear out the values, you would run the following query.&lt;/p&gt;

&lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;
  &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;UPDATE&lt;/span&gt; {databaseOwner}[{objectQualifier}Tabs]&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;SET&lt;/span&gt; [SkinSrc] = &lt;span style="color: #0000ff"&gt;NULL&lt;/span&gt;, [ContainerSrc] = &lt;span style="color: #0000ff"&gt;NULL&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt;   3:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;WHERE&lt;/span&gt; [PortalID] = 0&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;h3&gt;Container: Module Settings&lt;/h3&gt;

&lt;p&gt;Like the skins, the containers can also be overridden.  This time, we’re looking at the Module Settings.  This will override the default containers in the Site Settings and Page Settings.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.willstrohl.com/Portals/1/Blog/Files/3/543/WLW-HowtoClearOutSkinsandContainersinDotNetN_13903-modulesettings_pagesettings_basicsettings_2.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="Module Settings &gt; Page Settings &gt; Basic Settings" border="0" alt="Module Settings &gt; Page Settings &gt; Basic Settings" src="/Portals/1/Blog/Files/3/543/WLW-HowtoClearOutSkinsandContainersinDotNetN_13903-modulesettings_pagesettings_basicsettings_thumb.png" width="504" height="52" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;You can view the module container by using the following query.&lt;/p&gt;

&lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;
  &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;SELECT&lt;/span&gt; [TabModuleID],[TabID],[ModuleID],[ContainerSrc]&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;FROM&lt;/span&gt; {databaseOwner}[{objectQualifier}TabModules]&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Finally, in order to clear out the specified container values, you would use the following query.&lt;/p&gt;

&lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;
  &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;UPDATE&lt;/span&gt; {databaseOwner}[{objectQualifier}TabModules]&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;SET&lt;/span&gt; [ContainerSrc] = &lt;span style="color: #0000ff"&gt;NULL&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt;   3:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;WHERE&lt;/span&gt; &lt;span style="color: #0000ff"&gt;NOT&lt;/span&gt; [ContainerSrc] &lt;span style="color: #0000ff"&gt;IS&lt;/span&gt; NULL&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;h3&gt;Summary&lt;/h3&gt;

&lt;p&gt;I really only discussed a single use case as far as the containers and skins are concerned.  Hopefully, you are able to see that these same queries can be changed in various ways to perform all kinds of administrative tasks.&lt;/p&gt;

&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:b6820089-31a6-42d6-846f-3e5d51637608" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/DotNetNuke" rel="tag"&gt;DotNetNuke&lt;/a&gt;,&lt;a href="http://technorati.com/tags/DNN" rel="tag"&gt;DNN&lt;/a&gt;,&lt;a href="http://technorati.com/tags/DNN+Blogs" rel="tag"&gt;DNN Blogs&lt;/a&gt;,&lt;a href="http://technorati.com/tags/T-SQL" rel="tag"&gt;T-SQL&lt;/a&gt;,&lt;a href="http://technorati.com/tags/SQL+Server" rel="tag"&gt;SQL Server&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Skins" rel="tag"&gt;Skins&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Containers" rel="tag"&gt;Containers&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Administration" rel="tag"&gt;Administration&lt;/a&gt;&lt;/div&gt;</description>
      <link>http://www.willstrohl.com/Blog/EntryId/543/How-to-Clear-Out-Skins-and-Containers-in-DotNetNuke</link>
      <author>wills@strohlsitedesign.com</author>
      <comments>http://www.willstrohl.com/Blog/EntryId/543/How-to-Clear-Out-Skins-and-Containers-in-DotNetNuke#Comments</comments>
      <guid isPermaLink="true">http://www.willstrohl.com/Blog/EntryId/543/How-to-Clear-Out-Skins-and-Containers-in-DotNetNuke</guid>
      <pubDate>Sun, 21 Feb 2010 22:47:00 GMT</pubDate>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.willstrohl.com/DesktopModules/Blog/Trackback.aspx?id=543</trackback:ping>
    </item>
    <item>
      <title>Select IP Address for Last Login in DotNetNuke</title>
      <description>&lt;p&gt;I thought I’d share a little gem that I had drummed up some time back to help you with a little bit of built in audit information from your &lt;a href="http://www.dotnetnuke.com" target="_blank"&gt;DotNetNuke®&lt;/a&gt; website.  Many sites that want to present their visitors with a notification of when and where they last logged into the web application.  This can be useful, even if I believe few to no people actually pay attention to it past the first couple of times they logged in.  That being said, it’s very easy to implement in &lt;a href="http://www.dotnetnuke.com" target="_blank"&gt;DotNetNuke®&lt;/a&gt;, and you don’t even need to build a module to take advantage of it!&lt;/p&gt;  &lt;p&gt;First, you’d want to add a stored procedure to your DNN site that queries the database for the user login information that’s currently logged in.  Here is an example snippet:&lt;/p&gt;  &lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 500px; padding-right: 4px; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;   &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;     &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;CREATE&lt;/span&gt; &lt;span style="color: #0000ff"&gt;PROCEDURE&lt;/span&gt; {databaseOwner}[{objectQualifier}GetLastIpNumberForUser]&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt;     @UserId &lt;span style="color: #0000ff"&gt;INT&lt;/span&gt;,&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt;   3:&lt;/span&gt;     @PortalId &lt;span style="color: #0000ff"&gt;INT&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum4"&gt;   4:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;AS&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum5"&gt;   5:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;BEGIN&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum6"&gt;   6:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;SET&lt;/span&gt; NOCOUNT &lt;span style="color: #0000ff"&gt;ON&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum7"&gt;   7:&lt;/span&gt;     &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum8"&gt;   8:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;DECLARE&lt;/span&gt; @Xml XML, @LogDate DATETIME;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum9"&gt;   9:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;SELECT&lt;/span&gt; &lt;span style="color: #0000ff"&gt;TOP&lt;/span&gt; 1 @Xml = &lt;span style="color: #0000ff"&gt;CAST&lt;/span&gt;(el.[LogProperties] &lt;span style="color: #0000ff"&gt;AS&lt;/span&gt; XML), @LogDate = el.[LogCreateDate] &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum10"&gt;  10:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;FROM&lt;/span&gt; [EventLog] el &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum11"&gt;  11:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;WHERE&lt;/span&gt; (el.[LogUserId] = @UserId &lt;span style="color: #0000ff"&gt;AND&lt;/span&gt; el.[LogPortalID] = @PortalId) &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum12"&gt;  12:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;AND&lt;/span&gt; el.[LogTypeKey] = &lt;span style="color: #006080"&gt;'LOGIN_SUCCESS'&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum13"&gt;  13:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;ORDER&lt;/span&gt; &lt;span style="color: #0000ff"&gt;BY&lt;/span&gt; el.[LogCreateDate] &lt;span style="color: #0000ff"&gt;DESC&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum14"&gt;  14:&lt;/span&gt;  &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum15"&gt;  15:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;SELECT&lt;/span&gt; @Xml.&lt;span style="color: #0000ff"&gt;value&lt;/span&gt;(&lt;span style="color: #006080"&gt;'(/LogProperties/LogProperty/PropertyValue)[1]'&lt;/span&gt;, &lt;span style="color: #006080"&gt;'NVARCHAR(50)'&lt;/span&gt;), @LogDate&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum16"&gt;  16:&lt;/span&gt; END&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;As you can see, you might want to slightly alter the preceding snippet to suit your needs.  Also, if you run the code outside of the SQL Module in DNN, you would need to replace {databaseOwner} and {objectQualifier"} with the appropriate values.&lt;/p&gt;

&lt;p&gt;Now, all you have to do is pass the UserId and PortalId into the stored procedure, and format the result.  There are multiple ways to use this via your own DNN module, or even by using the core Reports Module.  Andrew Nurse has a great blog outlining &lt;a href="http://blog.andrewnurse.net/CommentView,guid,aeb6fab5-6926-45f9-9dbc-c606d2ec8cc8.aspx" target="_blank"&gt;passing parameters to the DNN Reports Module&lt;/a&gt;.&lt;/p&gt;

&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:65780311-b384-494f-80e9-a6532eedb81b" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/DotNetNuke" rel="tag"&gt;DotNetNuke&lt;/a&gt;,&lt;a href="http://technorati.com/tags/DNN" rel="tag"&gt;DNN&lt;/a&gt;,&lt;a href="http://technorati.com/tags/DNN+Blogs" rel="tag"&gt;DNN Blogs&lt;/a&gt;,&lt;a href="http://technorati.com/tags/T-SQL" rel="tag"&gt;T-SQL&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Reports+Module" rel="tag"&gt;Reports Module&lt;/a&gt;&lt;/div&gt;</description>
      <link>http://www.willstrohl.com/Blog/EntryId/542/Select-IP-Address-for-Last-Login-in-DotNetNuke</link>
      <author>wills@strohlsitedesign.com</author>
      <comments>http://www.willstrohl.com/Blog/EntryId/542/Select-IP-Address-for-Last-Login-in-DotNetNuke#Comments</comments>
      <guid isPermaLink="true">http://www.willstrohl.com/Blog/EntryId/542/Select-IP-Address-for-Last-Login-in-DotNetNuke</guid>
      <pubDate>Thu, 18 Feb 2010 14:17:00 GMT</pubDate>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.willstrohl.com/DesktopModules/Blog/Trackback.aspx?id=542</trackback:ping>
    </item>
  </channel>
</rss>