<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://alexcrome.co.uk/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"><channel><title>Alex Crome</title><link>http://alexcrome.co.uk/b/</link><description /><dc:language>en-US</dc:language><generator>Telligent Community 5.6.583.17537 (Build: 5.6.583.17537)</generator><item><title>Evolution Profiler Tool</title><link>http://alexcrome.co.uk/b/alex/archive/2013/04/08/evolution-profiler-tool.aspx</link><pubDate>Mon, 08 Apr 2013 10:28:00 GMT</pubDate><guid isPermaLink="false">14ef0438-becd-400b-84a7-36022fc26c96:1763</guid><dc:creator>Alex</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;The Evolution Profiler utility provides you with information about how the page was loaded, as well as how long each part took to load.&amp;nbsp; Once installed and configured, it will add a small overlay in the top left of the screen, showing the time it took the current request (and any subsequent callbacks on the page).&amp;nbsp; Clicking on one of these links will open up a popup providing more details about the page load (see Reading trace results below for more detail).&lt;/p&gt;
&lt;p&gt;This is perfect for troubleshooting cases where specific pages are taking longer to load than expected as it will allow you to narrow down exactly where the performance issue is located.&amp;nbsp; This tool may be of less help if you&amp;rsquo;re experiencing site wide performance issues &amp;ndash; it will help if there is one particular cause on every page that&amp;rsquo;s being slow, but will not help in the case of a load related issue where everything is running slow, as the information it gives is too specific.&amp;nbsp; The tool also profiles the execution of AJAX requests, so can be used to troubleshoot performance issues with scripted file callbacks, REST requests or other AJAX requests.&lt;/p&gt;
&lt;p&gt;The source code is available on &lt;a href="https://github.com/afscrome/EvolutionProfiler"&gt;GitHub&lt;/a&gt;.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://alexcrome.co.uk/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-28-metablogapi/4606.image_5F00_228A73EE.png"&gt;&lt;img title="image" style="background-image:none;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border:0px;" border="0" alt="image" src="http://alexcrome.co.uk/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-28-metablogapi/5518.image_5F00_thumb_5F00_012ACE52.png" width="744" height="470" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;&lt;a id="Installation" name="Installation"&gt;&lt;/a&gt;Installation&lt;/h2&gt;
&lt;p&gt;(Note, this plugin only supports Telligent Community 7+ and Telligent Enterprise 4+)&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://github.com/afscrome/EvolutionProfiler/blob/master/Downloads/EvolutionProfiler-1.0.zip?raw=true"&gt;Download the installation package&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Copy the contents of the /deploy/ folder to your Telligent Community or Telligent Enterprise web folder&lt;/li&gt;
&lt;li&gt;Go to the Manage Plugins Page in your community&lt;/li&gt;
&lt;li&gt;Enable the &amp;ldquo;Performance Profiler&amp;rdquo; plugin.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;There are a number of configuration options you can use to customise the profiler results.&amp;nbsp; These can be accessed by going to the plugin&amp;rsquo;s configuration, and are all documented on that page.&lt;/p&gt;
&lt;h2&gt;&lt;a id="Who_can_see_Trace_Results" name="Who_can_see_Trace_Results"&gt;&lt;/a&gt;Who can see Trace Results&lt;/h2&gt;
&lt;p&gt;You don&amp;rsquo;t want all your users to see your trace results.&amp;nbsp; For starters the information is likely to be distracting to many of your users, but may also pose a security risk by exposing the internals of how the page is rendered.&amp;nbsp; Because of this,&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;All requests made from the web server itself will display performance results&lt;/li&gt;
&lt;li&gt;Users whose username is in the list of Allowed Usernames option under the plugin&amp;rsquo;s configuration&lt;/li&gt;
&lt;li&gt;Users who are in any of the roles listed in the Allowed Roles option under the plugin&amp;rsquo;s configuration&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you want to make profiler results visible to everyone (e.g. for a development environment), include &amp;lsquo;Everyone&amp;rsquo; in the list of allowed roles.&lt;/p&gt;
&lt;h2&gt;&lt;a id="Reading_trace_results" name="Reading_trace_results"&gt;&lt;/a&gt;Reading trace results&lt;/h2&gt;
&lt;p&gt;Events taking a trivial, amount of time (by default less than 2ms, but can be configured in the plugin&amp;rsquo;s configuration) are excluded.&amp;nbsp; These can be displayed by pressing the show trivial button at the bottom of the profiler popup.&amp;nbsp; Events are also shown up in a hierarch.&amp;nbsp; For example the &amp;ldquo;[page] building container of content-fragments&amp;rdquo; event will have a number of &amp;ldquo;[widget]&amp;rdquo; events in it for each widget rendered.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Each event has three values with it.&amp;nbsp;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;duration &lt;/strong&gt;&amp;ndash; the time spent inclusively.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;duration with children &lt;/strong&gt;- If the event has no children it will be the same as the duration.&amp;nbsp; If an event does have children, this value will be the sum of the durations of the current event and it&amp;rsquo;s children.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;from start &lt;/strong&gt;&amp;ndash; how long after the request first began did the event begin.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Many events have a prefix in square brackets which categorise the event.&amp;nbsp; The main events you&amp;rsquo;ll see in the Main events you&amp;rsquo;ll see&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;[aspnet] -&lt;/strong&gt; Represent phases of the ASP.Net pipeline&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;[header],[page],[footer]&lt;/strong&gt;: Represents the rendering of the header, page body or footer regions of a page&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;[widget-header]&lt;/strong&gt; -&amp;nbsp; The rendering of a widget&amp;#39;s header script&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;[widget]&lt;/strong&gt; - The rendering time for the main widget body.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;[executed-file]&lt;/strong&gt; - This occurs whenever a widget view is being rendered typically by a widget callback, or when a widget/widget callback calls $core_v2_widget.RenderView(...) to render another view.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;[sproc]&lt;/strong&gt; - Execution of a stored procedure in the core of Telligent Evolution.&amp;nbsp; Will not show sproc execution in Calendar&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A couple of notes about reading the performance results&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;If you see a long time in the MapRequestHandler stage of the ASP.Net pipeline, then that is probably due to ASP.Net recompiling the ASPX page you&amp;#39;re requesting.&amp;nbsp; This should be a one time hit per page, per application lifecycle, although refer to the ASP.Net documentation for more details on this.&lt;/li&gt;
&lt;li&gt;If you see a lot of time being spent in [cfs] events, then look at the Disk performance on the servers containing your CFS, and the network connectivity/latency between your web servers and the filestorage servers.&lt;/li&gt;
&lt;li&gt;Remember that due to caching, the times different parts of the page take to render may vary significantly from request to request.&amp;nbsp; Entire widgets may be cached, or just the data the widgets have to get from the database to process.&amp;nbsp; If you&amp;rsquo;re seeing part of the trace taking a long time, which shows up again and again after refreshing, it may be a candidate for doing some Caching work.&lt;/li&gt;
&lt;li&gt;There are currently no trace events logged around search.&amp;nbsp; Since search makes network IO calls, these can take some time.&amp;nbsp; If a widget which is using search is taking a long time, you&amp;rsquo;ll need to do further investigation to identify if the search calls are the cause of the problems or not.&lt;/li&gt;
&lt;li&gt;The hiding of trivial results does not respect the trace result hierarchy.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Note, the profiler will not trace events in your custom code.&amp;nbsp; To record events from your custom code, you&amp;rsquo;ll need to explicitly add the tracing code yourself.&amp;nbsp; See &lt;a title="http://miniprofiler.com/" href="http://miniprofiler.com/"&gt;http://miniprofiler.com/&lt;/a&gt; for more details.&lt;/p&gt;
&lt;h2&gt;&lt;a id="Disabling_the_Plugin" name="Disabling_the_Plugin"&gt;&lt;/a&gt;Disabling the Plugin&lt;/h2&gt;
&lt;p&gt;Note that even after disabling the plugin in the Control Panel, there will still be some remnants wired up which will result in a performance overhead.&amp;nbsp; To totally remove these, you should totally remove the plugin from your community by delete the files you copied in step 1 of the installation instructions from your community.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://alexcrome.co.uk/aggbug.aspx?PostID=1763" width="1" height="1"&gt;</description></item><item><title>Extensibility points for building an application on top of the Telligent Evolution Platform.</title><link>http://alexcrome.co.uk/evolution/b/blog/archive/2012/01/25/extensibility-points-for-building-an-application-on-top-of-the-telligent-evolution-platform.aspx</link><pubDate>Wed, 25 Jan 2012 13:18:41 GMT</pubDate><guid isPermaLink="false">14ef0438-becd-400b-84a7-36022fc26c96:760</guid><dc:creator>Alex</dc:creator><slash:comments>1</slash:comments><description>&lt;p&gt;Today I was responding to a customer query which involved me giving a listing of some of the more useful extensibility points that are most likely be used when building a custom application within the &lt;a href="http://telligent.com/products/p/evolution.aspx"&gt;Telligent Evolution Platform&lt;/a&gt;.&amp;#160; I’m reproducing this here as I feel it may be useful to others.&amp;#160; &lt;/p&gt;  &lt;p&gt;N.B. this is not an exhaustive list.&amp;#160; For full documentation of extensibility points in Telligent Evolution 6.0, see refer to the &lt;a href="http://telligent.com/community/developers/w/developer6/"&gt;online documentation&lt;/a&gt;.&lt;/p&gt;  &lt;h2&gt;&lt;a id="Widgets" name="Widgets"&gt;&lt;/a&gt;Widgets&lt;/h2&gt;  &lt;ul&gt;   &lt;li&gt;&lt;b&gt;&lt;a href="http://telligent.com/community/developers/w/developer6/creating-new-widget-extensions.aspx"&gt;IScriptedContentFragmentExtension&lt;/a&gt;&lt;/b&gt; – use this to expose custom data to Studio Widgets &lt;/li&gt;    &lt;li&gt;&lt;b&gt;&lt;a href="http://telligent.com/community/developers/w/developer6/creating-factory-default-widgets.aspx"&gt;IScriptedContentFragmentFactoryDefaultProvider&lt;/a&gt;&lt;/b&gt; – Load your applications custom widgets as factory defaults so the user can revert back.&amp;#160; Can also be used as one approach for storing widgets in Source Control.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;(These can be found at Telligent.Evolution.Extensibility.UI.Version1 in Telligent.Evolution.ScriptedContentFragments.dll)&lt;/p&gt;  &lt;h2&gt;&lt;a id="Navigation" name="Navigation"&gt;&lt;/a&gt;Navigation&lt;/h2&gt;  &lt;ul&gt;   &lt;li&gt;&lt;b&gt;&lt;a href="http://telligent.com/community/developers/w/developer6/creating-new-custom-navigation-link-types.aspx"&gt;ISiteCustomNavigationPlugin&lt;/a&gt;&lt;/b&gt; – allow easy addition of a link to your application to site wide navigation &lt;/li&gt;    &lt;li&gt;&lt;b&gt;&lt;a href="http://telligent.com/community/developers/w/developer6/creating-new-group-application-navigation-link-types.aspx"&gt;IGroupCustomNavigationPlugin&lt;/a&gt;&lt;/b&gt; - to allow easy adding of a link to your custom application &lt;/li&gt;    &lt;li&gt;&lt;b&gt;&lt;a href="http://telligent.com/community/developers/w/developer6/creating-new-default-group-application-navigation-link-types.aspx"&gt;IGroupDefaultCustomNavigationPlugin&lt;/a&gt;&lt;/b&gt; – add a link to your application to the default group navigation. &lt;/li&gt;    &lt;li&gt;&lt;b&gt;&lt;a href="http://telligent.com/community/developers/w/developer6/20668.aspx"&gt;IGroupNewPostLinkPlugin&lt;/a&gt;&lt;/b&gt; – add links to your application in the New Post drop down in a group.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;(These can be found at Telligent.Evolution.Extensibility.UI.Version1 in Telligent.Evolution.Components.dll)&lt;/p&gt;  &lt;h2&gt;&lt;a id="Plugins" name="Plugins"&gt;&lt;/a&gt;Plugins&lt;/h2&gt;  &lt;ul&gt;   &lt;li&gt;&lt;b&gt;IPlugin&lt;/b&gt; – allow initialisation logic so that users can enable/disable a feature&lt;b&gt;&lt;/b&gt;&lt;/li&gt;    &lt;li&gt;&lt;b&gt;IConfigurablePlugin&lt;/b&gt; – capture configurations settings related to your app &lt;/li&gt;    &lt;li&gt;&lt;b&gt;IPluginGroup &lt;/b&gt;– Group multiple plugins into a single plugin that can either be all enabled, or all disabled.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;(These can be found at Telligent.Evolution.Extensibility.Version1 in Telligent.Evolution.Components.dll)&lt;/p&gt;  &lt;h2&gt;&lt;a id="Core_Objects" name="Core_Objects"&gt;&lt;/a&gt;Core Objects&lt;/h2&gt;  &lt;ul&gt;   &lt;li&gt;These can be accessed from the Public API Telligent.Evolution.Extensibility.Api.Version1.PublicAPI (in Telligent.Evolution.Api.dll)&amp;#160; &lt;ul&gt;       &lt;li&gt;Users &lt;/li&gt;        &lt;li&gt;Groups &lt;/li&gt;        &lt;li&gt;Etc.&lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;(These can be found at Telligent.Evolution.Api.Version1.PublicApi in Telligent.Evolution.Components.dll)&lt;/p&gt;  &lt;h2&gt;&lt;a id="Other_Services" name="Other_Services"&gt;&lt;/a&gt;Other Services&lt;/h2&gt;  &lt;ul&gt;   &lt;li&gt;&lt;b&gt;&lt;a href="http://telligent.com/community/developers/w/developer6/search-documentation.aspx"&gt;Search&lt;/a&gt;&lt;/b&gt; - Telligent.Evolution.Extensibility.Api.Version1.PublicApi.Search &lt;/li&gt;    &lt;li&gt;&lt;b&gt;File Storage&lt;/b&gt; - Telligent.Evolution.Extensibility.Storage.Version1.CentralizedFileStorage. &lt;/li&gt;    &lt;li&gt;&lt;b&gt;&lt;a href="http://telligent.com/community/developers/w/developer6/cache-extensibility.aspx"&gt;Caching&lt;/a&gt;&lt;/b&gt; – Telligent.Evolution.Extensibility.Caching.Version.CacheService&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;(These can be fund in Telligent.Evolution.Api.dll)&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://alexcrome.co.uk/aggbug.aspx?PostID=760" width="1" height="1"&gt;</description></item><item><title>Improving Documentation Part 1 – Inline Table of Contents</title><link>http://alexcrome.co.uk/evolution/b/blog/archive/2010/11/08/improving-documentation-part-1-inline-table-of-contents.aspx</link><pubDate>Mon, 08 Nov 2010 17:51:00 GMT</pubDate><guid isPermaLink="false">14ef0438-becd-400b-84a7-36022fc26c96:741</guid><dc:creator>Alex</dc:creator><slash:comments>1</slash:comments><description>&lt;p&gt;If you’ve been watching the documentation on &lt;a href="http://telligent.com"&gt;http://telligent.com&lt;/a&gt; over the past 6 months or so, you’ll have noticed some big improvements to how easily you can read through our documentation.&amp;#160; There are lots of improvements we have made, but three of the big ones I’d like to highlight are&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://alexcrome.co.uk/evolution/b/blog/archive/2010/09/20/using-syntax-highlighter-with-telligent-evolution.aspx"&gt;Source Code Formatting&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Inline Table of Contents&lt;/strong&gt; &lt;/li&gt;    &lt;li&gt;Custom styles &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;In this blog post, I’m going to concentrate solely on the Table of Contents, and in part 2, I’ll discuss the Custom Styles used, and how we’ve made it easier to use these styles in the text editor.&lt;/p&gt;  &lt;h2&gt;&lt;a name="Inline_Table_of_Contents"&gt;&lt;/a&gt;Inline Table of Contents&lt;/h2&gt;  &lt;p&gt;The Table of Contents addon is an extension we built for allowing easy navigation within a Wiki article (&lt;a href="http://telligent.com/marketplace/m/marketplace/1342633.aspx"&gt;now available in the Telligent Marketplace&lt;/a&gt;). The Table of Contents is the Grey “In this Article” box on the pages.&amp;#160; For example, if you look at the &lt;a href="http://telligent.com/support/telligent_evolution_platform/w/documentation/install-a-new-community.aspx"&gt;Installation document for Telligent Evolution&lt;/a&gt;, you’ll see the table of contents looking like:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://alexcrome.co.uk/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-00-47-metablogapi/1200.image_5F00_7860D261.png"&gt;&lt;img style="background-image:none;border-right-width:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://alexcrome.co.uk/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-00-47-metablogapi/4848.image_5F00_thumb_5F00_2F5AB09B.png" width="244" height="187" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The Table of Contents serves two main purposes&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Provides an outline of the article &lt;/li&gt;    &lt;li&gt;Allows readers to easily navigate the article by clicking on the link to the section they want to read. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;It incredibly simple to use.&amp;#160; Make sure you use H2,H3 and H4 tags when Simply add the text [&lt;em&gt;toc&lt;/em&gt;] into the article where you want the Table of Contents to be, and then add the text [t&lt;em&gt;o&lt;/em&gt;c] into an article where you want the Table of Contents to be displayed to the reader.&amp;#160; The addon can be used in wiki pages, blog posts, media uploads and even forum posts. &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;What are you waiting for, &lt;a href="http://telligent.com/marketplace/m/marketplace/1342633.aspx"&gt;go get the Table of Contents from the Telligent Marketplace&lt;/a&gt;.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://alexcrome.co.uk/aggbug.aspx?PostID=741" width="1" height="1"&gt;</description></item><item><title>Measuring webpage load times</title><link>http://alexcrome.co.uk/b/alex/archive/2010/09/23/measuring-webpage-load-times.aspx</link><pubDate>Thu, 23 Sep 2010 12:32:49 GMT</pubDate><guid isPermaLink="false">14ef0438-becd-400b-84a7-36022fc26c96:737</guid><dc:creator>Alex</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;This is a quick powershell script I knocked up to take a crude measurement of how long it takes a webpage to load&lt;/p&gt;  &lt;pre class="brush: ps;"&gt;$webConfigPath = &amp;quot;D:\Path\To\Web\Config\File\web.config&amp;quot;;
$url = &amp;quot;http://localhost:88/&amp;quot;

$webClient = new-object System.Net.WebClient
$webConfig = [xml](gc $webConfigPath)

$iterations = 0;
while($iterations -lt 5)
{
    &amp;quot; &amp;quot;
    &amp;quot;Iteration $iterations&amp;quot;
    #Touch web.config to clear out cach etc.
    $webConfig.Save($webConfigPath)
    # Request page twice to ensure cache is fully populated
    $webClient.DownloadString($url) | out-null
    $webClient.DownloadString($url) | out-null

    $loads  = 0;
    while ($loads -lt 20)
    {
        (measure-command { $webClient.DownloadString($url) }).TotalMilliseconds
        $loads++
    }
    $iterations++
}&lt;/pre&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://alexcrome.co.uk/aggbug.aspx?PostID=737" width="1" height="1"&gt;</description></item><item><title>Using Syntax Highlighter with Telligent Evolution</title><link>http://alexcrome.co.uk/evolution/b/blog/archive/2010/09/20/using-syntax-highlighter-with-telligent-evolution.aspx</link><pubDate>Mon, 20 Sep 2010 10:55:08 GMT</pubDate><guid isPermaLink="false">14ef0438-becd-400b-84a7-36022fc26c96:730</guid><dc:creator>Alex</dc:creator><slash:comments>3</slash:comments><description>&lt;p&gt;&lt;a href="http://alexgorbatchev.com/SyntaxHighlighter/"&gt;Syntax Highlighter&lt;/a&gt; is a code syntax highlighter written in Javascript.&amp;#160; The following blog post describes how you can use Syntax Highlighter with your Telligent Evolution platform Community, taking you first through setting up the Syntax Highlighter scripts and then installing a plugin for the text editor to make using Syntax Highlighter easier.&lt;/p&gt;  &lt;div class="table-of-contents"&gt;&lt;h2 class="toc-title"&gt;Table of Contents&lt;/h2&gt;&lt;div class="hierarchy-list-header"&gt; &lt;/div&gt;&lt;ul class="hierarchy-list"&gt;&lt;li class="hierarchy-item"&gt;&lt;a href="#Install_The_Syntax_Highlighter_Scripts"&gt;Install The Syntax Highlighter Scripts&lt;/a&gt;&lt;/li&gt;&lt;li class="hierarchy-item"&gt;&lt;a href="#Install_the_SyntaxHl_TinyMCE_plugin"&gt;Install the SyntaxHl TinyMCE plugin&lt;/a&gt;&lt;/li&gt;&lt;li class="hierarchy-item"&gt;&lt;a href="#Using_the_Syntax_HL_Plugin"&gt;Using the Syntax HL Plugin&lt;/a&gt;&lt;/li&gt;&lt;li class="hierarchy-item"&gt;&lt;a href="#Troubleshooting"&gt;Troubleshooting&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="hierarchy-list-footer"&gt; &lt;/div&gt;&lt;/div&gt;  &lt;h2&gt;&lt;a name="Install_The_Syntax_Highlighter_Scripts"&gt;&lt;/a&gt;Install The Syntax Highlighter Scripts&lt;/h2&gt;  &lt;p&gt;Note, the following instructions assume that you are running your Telligent Evolution platform community at the root of your domain.&amp;#160; If you are not, you will need to modify the paths for scripts and stylesheets to match the subdirectory your community is installed to.&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Download the Syntax Highlighter&amp;#160; 3.0 files from &lt;a href="http://alexgorbatchev.com/SyntaxHighlighter/download/"&gt;http://alexgorbatchev.com/SyntaxHighlighter/download/&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;Extract the contents of that download to a folder in your Telligent Evolution platform community (e.g. ~/SyntaxHighlighter/) &lt;/li&gt;    &lt;li&gt;Go to your community, login as an administrator and go to Control Panel &amp;gt; System Administration &amp;gt; Site Administration &amp;gt; Site Configuration &amp;gt; Setup &amp;gt; General Site Settings      &lt;ol&gt;       &lt;li&gt;In the “Raw Header” field, add the stylesheets required by Syntax Highlighter.          &lt;pre class="brush: xml;"&gt;&amp;lt;link href=&amp;quot;/SyntaxHighlighter/styles/shCore.css&amp;quot; rel=&amp;quot;stylesheet&amp;quot; type=&amp;quot;text/css&amp;quot; /&amp;gt;
&amp;lt;link href=&amp;quot;/SyntaxHighlighter/styles/shThemeDefault.css&amp;quot; rel=&amp;quot;stylesheet&amp;quot; type=&amp;quot;text/css&amp;quot; /&amp;gt; &lt;/pre&gt;
      &lt;/li&gt;

      &lt;li&gt;In the Google Analytics&amp;#160; field, add the javascript required by the plugin 
        &lt;pre class="brush: html;"&gt;&amp;lt;script src=&amp;quot;/SyntaxHighlighter/scripts/shCore.js&amp;quot; type=&amp;quot;text/javascript&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;script src=&amp;quot;/SyntaxHighlighter/scripts/shAutoloader.js&amp;quot; type=&amp;quot;text/javascript&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;

&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;
SyntaxHighlighter.autoloader(
   &amp;#39;applescript            /SyntaxHighlighter/scripts/shBrushAppleScript.js&amp;#39;
  ,&amp;#39;actionscript3 as3      /SyntaxHighlighter/scripts/shBrushAS3.js&amp;#39;
  ,&amp;#39;bash shell             /SyntaxHighlighter/scripts/shBrushBash.js&amp;#39;
  ,&amp;#39;coldfusion cf          /SyntaxHighlighter/scripts/shBrushColdFusion.js&amp;#39;
  ,&amp;#39;cpp c                  /SyntaxHighlighter/scripts/shBrushCpp.js&amp;#39;
  ,&amp;#39;c# c-sharp csharp      /SyntaxHighlighter/scripts/shBrushCSharp.js&amp;#39;
  ,&amp;#39;css                    /SyntaxHighlighter/scripts/shBrushCss.js&amp;#39;
  ,&amp;#39;delphi pascal          /SyntaxHighlighter/scripts/shBrushDelphi.js&amp;#39;
  ,&amp;#39;diff patch pas         /SyntaxHighlighter/scripts/shBrushDiff.js&amp;#39;
  ,&amp;#39;erl erlang             /SyntaxHighlighter/scripts/shBrushErlang.js&amp;#39;
  ,&amp;#39;groovy                 /SyntaxHighlighter/scripts/shBrushGroovy.js&amp;#39;
  ,&amp;#39;java                   /SyntaxHighlighter/scripts/shBrushJava.js&amp;#39;
  ,&amp;#39;jfx javafx             /SyntaxHighlighter/scripts/shBrushJavaFX.js&amp;#39;
  ,&amp;#39;js jscript javascript  /SyntaxHighlighter/scripts/shBrushJScript.js&amp;#39;
  ,&amp;#39;perl pl                /SyntaxHighlighter/scripts/shBrushPerl.js&amp;#39;
  ,&amp;#39;php                    /SyntaxHighlighter/scripts/shBrushPhp.js&amp;#39;
  ,&amp;#39;text plain             /SyntaxHighlighter/scripts/shBrushPlain.js&amp;#39;
  ,&amp;#39;py python              /SyntaxHighlighter/scripts/shBrushPython.js&amp;#39;
  ,&amp;#39;ruby rails ror rb      /SyntaxHighlighter/scripts/shBrushRuby.js&amp;#39;
  ,&amp;#39;sass scss              /SyntaxHighlighter/scripts/shBrushSass.js&amp;#39;
  ,&amp;#39;scala                  /SyntaxHighlighter/scripts/shBrushScala.js&amp;#39;
  ,&amp;#39;sql                    /SyntaxHighlighter/scripts/shBrushSql.js&amp;#39;
  ,&amp;#39;vb vbnet               /SyntaxHighlighter/scripts/shBrushVb.js&amp;#39;
  ,&amp;#39;xml xhtml xslt html    /SyntaxHighlighter/scripts/shBrushXml.js&amp;#39;
);
SyntaxHighlighter.config.stripBrs = true;
SyntaxHighlighter.all();
&amp;lt;/script&amp;gt;&lt;/pre&gt;
      &lt;/li&gt;

      &lt;li&gt;Save the page &lt;/li&gt;
    &lt;/ol&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;At this stage, you should now be able to use syntax highlighter by manually editing the HTML of your posts to include the required syntax for Syntax Highlighter to do it’s work (e.g. &amp;lt;pre class=&amp;quot;brush: xml&amp;quot;&amp;gt;Here is some code&amp;lt;/pre&amp;gt; ), however there is an extension for the Text Editor used by Telligent Evolution that makes it easier to insert code without having to manually edit the HTML.&lt;/p&gt;

&lt;ol&gt;&lt;/ol&gt;

&lt;h2&gt;&lt;a name="Install_the_SyntaxHl_TinyMCE_plugin"&gt;&lt;/a&gt;Install the SyntaxHl TinyMCE plugin&lt;/h2&gt;

&lt;p&gt;There is a SyntaxHl plugin for TinyMCE which makes it easier to insert code samples into content through the TinyMCE text editor.&amp;#160; To install this plugin:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Download the SyntaxHL plugin from &lt;a href="http://github.com/RichGuk/syntaxhl"&gt;http://github.com/RichGuk/syntaxhl&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;Copy the contents of the download to ~/tiny_mce/plugins/syntaxhl/ &lt;/li&gt;

  &lt;li&gt;Add the following entries to your communityserver_override.config file to register the SyntaxHL plugin&amp;#160; &lt;pre class="brush: xml;fontsize: 100; first-line: 1; "&gt;&amp;lt;!--
	TinyMCE extensions for Syntax Highlighter
	- requires SyntaxHl extension from http://github.com/RichGuk/syntaxhl
--&amp;gt;
&amp;lt;!-- Add Pre to the format selection list --&amp;gt;
&amp;lt;Override xpath=&amp;quot;/CommunityServer/Core/editors/editor[@name=&amp;#39;Enhanced&amp;#39;]/editorOption[@name=&amp;#39;theme_advanced_blockformats&amp;#39;]&amp;quot; mode=&amp;quot;change&amp;quot;
			 name=&amp;quot;value&amp;quot;
			 value=&amp;quot;&amp;#39;h2,h3,h4,p,pre,div&amp;#39;&amp;quot;
			 /&amp;gt;
&amp;lt;!-- Register the SyntaxHL Plugin --&amp;gt;
&amp;lt;Override xpath=&amp;quot;/CommunityServer/Core/editors/editor[@name=&amp;#39;Enhanced&amp;#39;]/editorOption[@name=&amp;#39;plugins&amp;#39;]&amp;quot; mode=&amp;quot;change&amp;quot;
			 name=&amp;quot;value&amp;quot;
			 value=&amp;quot;&amp;#39;advhr,advimage,advlink,contextmenu,emotions,fullscreen,iespell,insertmedia,insertvideo,paste,safari,smilies,spellchecker,table,syntaxhl&amp;#39;&amp;quot;
			 /&amp;gt;
&amp;lt;!-- Add the SyntaxhHL button --&amp;gt;
&amp;lt;Override xpath=&amp;quot;/CommunityServer/Core/editors/editor[@name=&amp;#39;Enhanced&amp;#39;]&amp;quot; mode=&amp;quot;add&amp;quot;&amp;gt;
	&amp;lt;editorOption name=&amp;quot;theme_advanced_buttons2_add&amp;quot; value=&amp;quot;&amp;#39;syntaxhl&amp;#39;&amp;quot; /&amp;gt;
&amp;lt;/Override&amp;gt;&lt;/pre&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;&lt;a name="Using_the_Syntax_HL_Plugin"&gt;&lt;/a&gt;Using the Syntax HL Plugin&lt;/h2&gt;

&lt;p&gt;Now when you use the text editor, you should see a syntax highlighter button on the right of the bottom row.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://alexcrome.co.uk/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-00-47-metablogapi/3704.image_5F00_641D1893.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://alexcrome.co.uk/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-00-47-metablogapi/3223.image_5F00_thumb_5F00_62D87FB4.png" width="638" height="195" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Upon clicking this button, you will get a window which allows you to paste in your code sample, specify the language the code is written in, as well as a few more configuration options supported by Syntax Highlighter.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://alexcrome.co.uk/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-00-47-metablogapi/5367.image_5F00_542DD3CF.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://alexcrome.co.uk/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-00-47-metablogapi/7345.image_5F00_thumb_5F00_23B74F59.png" width="470" height="438" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;When you save your content, you should see the code highlighted in colour when you view it.&amp;#160; For example, submitting the code in a forum post gives&lt;/p&gt;

&lt;p&gt;&lt;a href="http://alexcrome.co.uk/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-00-47-metablogapi/8883.image_5F00_284D5A13.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://alexcrome.co.uk/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-00-47-metablogapi/1641.image_5F00_thumb_5F00_1BDF36EA.png" width="654" height="204" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;h2&gt;&lt;a name="Troubleshooting"&gt;&lt;/a&gt;Troubleshooting&lt;/h2&gt;

&lt;p&gt;If you have problems, then you most likely haven’t specified the correct path to the syntax Highlighter scripts in the “Install the SyntaxHl TinyMCE plugin” section.&amp;#160; Use a tool such as &lt;a href="http://www.fiddler2.com/"&gt;Fiddler&lt;/a&gt; to view the HTTP Traffic when you view a page containing some code blocks configured for Syntax Highlighter – check your browser is successfully requesting the javascript and stylesheet files.&amp;#160; You should also check your browsers for any javascript errors.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://alexcrome.co.uk/aggbug.aspx?PostID=730" width="1" height="1"&gt;</description></item><item><title>Styling Widgets</title><link>http://alexcrome.co.uk/evolution/b/blog/archive/2010/08/19/styling-widgets.aspx</link><pubDate>Thu, 19 Aug 2010 14:13:51 GMT</pubDate><guid isPermaLink="false">14ef0438-becd-400b-84a7-36022fc26c96:721</guid><dc:creator>Alex</dc:creator><slash:comments>3</slash:comments><description>&lt;p&gt;In this blog post, I’m going to discuss various ways in which you can restyles widgets in the Telligent Evolution platform.&amp;#160; This article assumes you have basic knowledge of CSS, and and have had some experience with either the fiji theme from Telligent Community, or the evolution2 theme from Telligent Enterprise.&amp;#160; All the examples in this blog post will use Telligent Enterprise’s evolution2 theme, but the same concepts apply for Telligent Community’s fiji theme as well as any custom themes you may create.&lt;/p&gt;  &lt;div class="table-of-contents"&gt;&lt;h2 class="toc-title"&gt;Table of Contents&lt;/h2&gt;&lt;div class="hierarchy-list-header"&gt; &lt;/div&gt;&lt;ul class="hierarchy-list"&gt;&lt;li class="hierarchy-item"&gt;&lt;a href="#Structure_of_a_Widget"&gt;Structure of a Widget&lt;/a&gt;&lt;/li&gt;&lt;li class="hierarchy-item"&gt;&lt;a href="#Targeting_a_particular_type_of_widget"&gt;Targeting a particular type of widget&lt;/a&gt;&lt;/li&gt;&lt;li class="hierarchy-item"&gt;&lt;a href="#Targeting_particular_styles_of_widgets"&gt;Targeting particular styles of widgets&lt;/a&gt;&lt;/li&gt;&lt;li class="hierarchy-item"&gt;&lt;a href="#Targeting_widgets_in_a_particular_region"&gt;Targeting widgets in a particular region&lt;/a&gt;&lt;/li&gt;&lt;li class="hierarchy-item"&gt;&lt;a href="#Targeting_an_individual_widget"&gt;Targeting an individual widget&lt;/a&gt;&lt;/li&gt;&lt;li class="hierarchy-item"&gt;&lt;a href="#Targeting_Widgets_on_a_particular_Page"&gt;Targeting Widgets on a particular Page&lt;/a&gt;&lt;/li&gt;&lt;li class="hierarchy-item"&gt;&lt;a href="#Targeting_Widgets_on_a_particular_page_layout"&gt;Targeting Widgets on a particular page layout&lt;/a&gt;&lt;/li&gt;&lt;li class="hierarchy-item"&gt;&lt;a href="#Putting_it_all_together"&gt;Putting it all together&lt;/a&gt;&lt;/li&gt;&lt;li class="hierarchy-item"&gt;&lt;a href="#Conclusion"&gt;Conclusion&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="hierarchy-list-footer"&gt; &lt;/div&gt;&lt;/div&gt;  &lt;h2&gt;&lt;a name="Structure_of_a_Widget"&gt;&lt;/a&gt;Structure of a Widget&lt;/h2&gt;  &lt;p&gt;Widgets in the Telligent Evolution platform typically have three Css Classes&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;content-fragment &lt;/li&gt;    &lt;li&gt;a class name indicating the type of widget ( e.g. blog-post-list) .&amp;#160; This is generated from the class name used by the widget) &lt;/li&gt;    &lt;li&gt;a class name indicating the layout of the widget (e.g. full-border) &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Within this widget, there are three main areas&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Header (&amp;lt;div class=&amp;quot;content-fragment-header&amp;quot; /&amp;gt;) &lt;/li&gt;    &lt;li&gt;Content (&amp;lt;div class=&amp;quot;content-fragment-header&amp;quot; /&amp;gt;) &lt;/li&gt;    &lt;li&gt;Footer (&amp;lt;div class=&amp;quot;content-fragment-header&amp;quot; /&amp;gt;) &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;To demonstrate these three regions, add the following CSS to the CSS Overrides section of your theme’s configuration.&lt;/p&gt;  &lt;pre class="brush: css"&gt;.content-fragment
{
  border: 10px solid #9f9;
}
.content-fragment .content-fragment-header {
   background-image: none  !important;
   background-color: #666  !important;
   color: #fff  !important;
   border: none !important;
}

.content-fragment .content-fragment-content {
   background-color: #ccf;
   border: none !important;
}

.content-fragment .content-fragment-footer {
   height: 5px;
   background-color: #f00;
}&lt;/pre&gt;

&lt;p&gt;This will transform a widget in the Telligent Enterprise Theme as follows. &lt;/p&gt;

&lt;p&gt;&lt;a href="http://alexcrome.co.uk/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-00-47-metablogapi/3750.image_5F00_644804A9.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://alexcrome.co.uk/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-00-47-metablogapi/7723.image_5F00_thumb_5F00_26D7A022.png" width="347" height="152" /&gt;&lt;/a&gt;&amp;#160;&lt;/p&gt;

&lt;h2&gt;&lt;a name="Targeting_a_particular_type_of_widget"&gt;&lt;/a&gt;Targeting a particular type of widget&lt;/h2&gt;

&lt;p&gt;Above, i mentioned that widgets included a CSS class indicating the type of the widget.&amp;#160; We can use this to make our CSS Selectors more specific so that they only target a particular type of widget.&amp;#160; Let’s say we want to target the Generic Content widget, we can use a tool such as Firebug for Firefox, or the IE Developer Tools to inspect a Generic Content widget.&amp;#160; We can see that the Generic Content widget has a &amp;quot;html-content” css class which is the class used to indicate a Generic Content Widget. &lt;/p&gt;

&lt;p&gt;&lt;a href="http://alexcrome.co.uk/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-00-47-metablogapi/2262.image_5F00_405F2D4F.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://alexcrome.co.uk/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-00-47-metablogapi/7282.image_5F00_thumb_5F00_5E2D8B83.png" width="644" height="399" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;So to style just Generic Content widgets, instead of targeting just elements with the content-fragment class, we want to target all elements with the content-fragment AND html-content class.&amp;#160; For example, if we wanted to make the content of all generic content widgets larger and bold, we could use the following CSS:&lt;/p&gt;

&lt;pre class="brush: css"&gt;.content-fragment.html-content .content-fragment-content
{
  font-size: 1.2em;
  font-weight: bold;
  color: orange;
}&lt;/pre&gt;

&lt;p&gt;&lt;a href="http://alexcrome.co.uk/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-00-47-metablogapi/6165.image_5F00_771935FB.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://alexcrome.co.uk/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-00-47-metablogapi/4743.image_5F00_thumb_5F00_360AB697.png" width="174" height="244" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;h2&gt;&lt;a name="Targeting_particular_styles_of_widgets"&gt;&lt;/a&gt;Targeting particular styles of widgets&lt;/h2&gt;

&lt;p&gt;This is very similar to targeting widgets of a particular type.&amp;#160; If you use a tool such as Firebug to inspect the HTML of a widget, you’ll see a CSS Class indicating the style of the widget.&amp;#160; For example, say we want to target all widgets using the No Wrapper with Spacing or No Wrapper with No Spacing options&amp;#160; We can use the following CSS.&lt;/p&gt;

&lt;pre class="brush: css"&gt;.content-fragment.no-wrapper
,.content-fragment.no-wrapper-with-spacing
{
  background-color: #9f9;
}&lt;/pre&gt;

&lt;p&gt;Gives us&lt;/p&gt;

&lt;p&gt;&lt;a href="http://alexcrome.co.uk/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-00-47-metablogapi/0537.image_5F00_494B6D36.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://alexcrome.co.uk/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-00-47-metablogapi/7217.image_5F00_thumb_5F00_0FC85D3F.png" width="244" height="91" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;h2&gt;&lt;a name="Targeting_widgets_in_a_particular_region"&gt;&lt;/a&gt;Targeting widgets in a particular region&lt;/h2&gt;

&lt;p&gt;If you have a look around the HTML structure using Firebug, you’ll see that widgets are placed within layout regions.&amp;#160; You can use these layout regions to target only widgets in a particular areas of the page.&amp;#160; Say for example we want change the colour of headers in the left and right sidebars, we can use the following CSS&lt;/p&gt;

&lt;pre class="brush: css"&gt;.layout-region.left-sidebar .content-fragment .content-fragment-header
,.layout-region.right-sidebar .content-fragment .content-fragment-header
{
  background-image: none;
  background-color: #ccc
}&lt;/pre&gt;

&lt;p&gt;&lt;a href="http://alexcrome.co.uk/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-00-47-metablogapi/8037.image_5F00_3A348E5C.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://alexcrome.co.uk/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-00-47-metablogapi/2313.image_5F00_thumb_5F00_2C159F5F.png" width="644" height="228" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;h2&gt;&lt;a name="Targeting_an_individual_widget"&gt;&lt;/a&gt;Targeting an individual widget&lt;/h2&gt;

&lt;p class="docs-note"&gt;Be careful using this technique as the ID of a widget can sometimes change when a page is edited – see &lt;a href="#comments"&gt;Ben Tiedt’s comment&lt;/a&gt; below.&lt;/p&gt;

&lt;p&gt;If you use Firebug to inspect the markup of a widget, you’ll see that each widget has a unique id fragment-XXXX (where XXXX is an integer).&amp;#160; You can use this to target one particular widget.&amp;#160; For example, say we want to give the bottom right Generic Content (with an id of fragment-2146) a different coloured header to make it stand out, you could use the followign CSS&lt;/p&gt;

&lt;pre class="brush: css"&gt;#fragment-2146 .content-fragment-header
{
background-image: none;
background-color: #f00;
color: #fff;
}&lt;/pre&gt;

&lt;p&gt;&lt;a href="http://alexcrome.co.uk/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-00-47-metablogapi/0601.image_5F00_68EA2131.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://alexcrome.co.uk/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-00-47-metablogapi/8015.image_5F00_thumb_5F00_2F67113A.png" width="244" height="102" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;h2&gt;&lt;a name="Targeting_Widgets_on_a_particular_Page"&gt;&lt;/a&gt;Targeting Widgets on a particular Page&lt;/h2&gt;

&lt;p&gt;If you inspect the marrkup of the main page using firebug, you’ll see that all widgets are wrapped in a div with the css class “content-fragment-page”, and an additonall css class based on the page you’re on.&amp;#160; You can use this to target just widgets on a particular page.&amp;#160; For example to use the Impact font for just widgets on the homepage, use the following css&lt;/p&gt;

&lt;pre class="brush: css"&gt;.content-fragment-page.common-home .content-fragment .content-fragment-content
{
font-family: impact;
}&lt;/pre&gt;

&lt;p&gt;&lt;a href="http://alexcrome.co.uk/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-00-47-metablogapi/7506.image_5F00_4EA9B80D.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://alexcrome.co.uk/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-00-47-metablogapi/2703.image_5F00_thumb_5F00_49975491.png" width="644" height="383" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;h2&gt;&lt;a name="Targeting_Widgets_on_a_particular_page_layout"&gt;&lt;/a&gt;Targeting Widgets on a particular page layout&lt;/h2&gt;

&lt;p&gt;Looking a bit deeper into the HTML markup, you’ll see that the main widget area is wrapped in a div with the css class layout-content, and an additional css class based upon the page layout in use.&amp;#160; Again, we can use this to target just widgets.&amp;#160; For example, say we want to change the border of al widgets on pages using a header, main content and left sidebar&lt;/p&gt;

&lt;pre class="brush: css"&gt;.layout-content.content-left-sidebar-right .content-fragment
{
   border: dotted 5px;
}&lt;/pre&gt;

&lt;p&gt;&lt;a href="http://alexcrome.co.uk/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-00-47-metablogapi/4848.image_5F00_5EC55A39.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://alexcrome.co.uk/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-00-47-metablogapi/7041.image_5F00_thumb_5F00_04F78DC5.png" width="644" height="367" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;h2&gt;&lt;a name="Putting_it_all_together"&gt;&lt;/a&gt;Putting it all together&lt;/h2&gt;

&lt;p&gt;You can combine all these ideas together for some very detailed styling.&amp;#160; Let’s say you want to restyle all generic content widgets using the no wrapper layout in the left sidebar of the homepage, when it’s using a header &amp;amp; three column layout.&amp;#160; (Quite why you’d want to do something this specific I don’t know, but it’s more a demonstration that it can be done, as opposed to something that you would want to do).&lt;/p&gt;

&lt;pre class="brush: css"&gt;.content-fragment-page.common-home .layout-content.header-top-sidebar-left-content-center-sidebar-right .layout-region.left-sidebar .content-fragment.html-content.no-wrapper .content-fragment-content 
{
  background-image: none;
  background-color: #cfc
}&lt;/pre&gt;

&lt;p&gt;&lt;a href="http://alexcrome.co.uk/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-00-47-metablogapi/5277.image_5F00_7BDADC76.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://alexcrome.co.uk/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-00-47-metablogapi/2260.image_5F00_thumb_5F00_2A70E559.png" width="644" height="316" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;&lt;a name="Conclusion"&gt;&lt;/a&gt;Conclusion&lt;/h2&gt;

&lt;p&gt;I hope this post gives you some ideas of different ways in which you can customise widgets in themes.&amp;#160; If you have a look around my website, you’ll see I have some custom CSs that specifically restyles any widgets usingthe No Wrapper styles.&amp;#160; I have also updated all sidebar widgets to use the No Wrapper style to give my site a unique look.&amp;#160; I have also updated the header of other widgets to have a gradient background, and removed the rounded corners from the bottom of widgets.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://alexcrome.co.uk/aggbug.aspx?PostID=721" width="1" height="1"&gt;</description></item><item><title>Permission Viewer Tool</title><link>http://alexcrome.co.uk/evolution/b/blog/archive/2010/06/02/permission-viewer-tool.aspx</link><pubDate>Wed, 02 Jun 2010 13:44:00 GMT</pubDate><guid isPermaLink="false">14ef0438-becd-400b-84a7-36022fc26c96:706</guid><dc:creator>Alex</dc:creator><slash:comments>1</slash:comments><description>&lt;p&gt;The permission viewer application is a diagnostic tool for viewing permissions in a Telligent Evolution platform community.&amp;nbsp; It allows you to view permissions in a tabular form which can make diagnosing permission based issues easier.&lt;/p&gt;
&lt;p&gt;The application may be &lt;a href="http://github.com/downloads/afscrome/Telligent-Evolution-Permission-Viewer/PermissionViewer.zip"&gt;downloaded from github&lt;/a&gt;, where the source code is also hosted.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://alexcrome.co.uk/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-00-47-metablogapi/8524.image_5F00_3125CD53.png"&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="image" border="0" alt="image" src="http://alexcrome.co.uk/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-00-47-metablogapi/1665.image_5F00_thumb_5F00_3B76F1B3.png" width="563" height="348" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 style="clear:both;"&gt;Set up your Community&lt;/h2&gt;
&lt;p style="clear:both;"&gt;This application uses the REST API to communicate with the Telligent Evolution platform.&amp;nbsp; You must first &lt;a href="http://telligent.com/support/telligent_evolution_platform/w/documentation/enable-rest-api.aspx"&gt;enable the REST API&lt;/a&gt; and then &lt;a href="http://telligent.com/community/developers/w/wiki/how-to-generate-an-api-key.aspx"&gt;generate an API Key for your user account&lt;/a&gt; within your Telligent community.&lt;/p&gt;
&lt;h2 style="clear:both;"&gt;Connecting with the Application&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;In the connection area at the Enter the URL to your Telligent community and hit Connect &lt;/li&gt;
&lt;li&gt;The Application will try and connect to your website.&amp;nbsp; After a moment a new row will pop up asking for your Username and API Key.&amp;nbsp; Depending on how your community is configured, you may also be required to enter a password.&amp;nbsp; Enter the requires details and then hit Login &lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Understanding the Permission Report&lt;/h2&gt;
&lt;p&gt;The permission report is displayed as a grid with roles listed along the top of the table, and a list of permissions down the left hand side.&amp;nbsp; If a role is granted a permission, the cell corresponding to the permission and role will have a green colour with an X in.&lt;/p&gt;
&lt;p&gt;Roles are always listed in the following order: Everyone, Registered Users,Members, Managers, Owners, Moderators, Administrators, OTHER ROLES &lt;/p&gt;
&lt;p&gt;If you do not see a role listed in the table, that means the role has no permissions for that application&lt;/p&gt;
&lt;ol&gt;&lt;/ol&gt;
&lt;h2&gt;Viewing&amp;nbsp; Permissions for an Individual Application&lt;/h2&gt;
&lt;p&gt;In order to view permissions for a particular application, you first need to select an application.&amp;nbsp; After doing this, permissions will be displayed in a table in the Permission Display area on the right.&amp;nbsp; There are two ways of selecting an application:&lt;/p&gt;
&lt;h3&gt;Browsing for an Application&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Select the Browse tab in the Application Selector area &lt;/li&gt;
&lt;li&gt;Browse through the tree to find the application you want to view permissions for &lt;/li&gt;
&lt;li&gt;Click on the Application to view it&amp;rsquo;s permissions &lt;/li&gt;
&lt;/ol&gt;
&lt;h3 style="clear:both;"&gt;Searching for an Application&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Click on the search tab in the Application Selector area &lt;/li&gt;
&lt;li&gt;In the search box, type in your search query then hit Search to search for applications &lt;/li&gt;
&lt;li&gt;Click on the Application you want to view permissions for &lt;/li&gt;
&lt;/ol&gt;
&lt;h2 style="clear:both;"&gt;Viewing Site Wide Permissions&lt;/h2&gt;
&lt;p&gt;When you first connect to your community, you will be shown Site Wide permissions.&amp;nbsp; If you have started viewing permissions for an individual application, you can return to this page by hitting the Show Site Permissions button in the bottom right&lt;/p&gt;
&lt;h2 style="clear:both;"&gt;Exporting Permission Reports&lt;/h2&gt;
&lt;p&gt;You can export the permission grid for an application to an HTML report.&amp;nbsp; This HTML report will include the permissions for the currently selected application, and groups above it.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Show the permissions you wish to export &lt;/li&gt;
&lt;li&gt;Click on the &amp;ldquo;Export Permission Report&amp;rdquo; button in the bottom right &lt;/li&gt;
&lt;li&gt;In the Save As dialogue, choose a location to save the report and press Save. &lt;/li&gt;
&lt;/ol&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://alexcrome.co.uk/aggbug.aspx?PostID=706" width="1" height="1"&gt;</description></item><item><title>AlexCrome.Evolution 5.0 Addons for the Telligent Evolution Platform</title><link>http://alexcrome.co.uk/evolution/b/blog/archive/2009/08/28/alexcrome-evolution-5-0-addons-for-the-telligent-evolution-platform.aspx</link><pubDate>Fri, 28 Aug 2009 21:32:00 GMT</pubDate><guid isPermaLink="false">14ef0438-becd-400b-84a7-36022fc26c96:676</guid><dc:creator>Alex</dc:creator><slash:comments>7</slash:comments><description>&lt;p&gt;After a period of inactivity I am finally ready to publish the 5.0 version of my addons which have been upgraded to be compatible with the Telligent Evolution Platform (that is &lt;a href="http://telligent.com/products/telligent-community/"&gt;Teligent Community&lt;/a&gt; and &lt;a href="http://telligent.com/products/telligent-enterprise/"&gt;Telligent Enterprise&lt;/a&gt;)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://alexcrome.co.uk/evolution/m/addons/672.aspx"&gt;Download the addon package&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://alexcrome.co.uk/evolution/w/addon_documentation/"&gt;Read more about the full functionality contained in the addon package&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;New Functionality&lt;/h2&gt;
&lt;p&gt;The following is a list of the main new features since the &lt;a href="http://alexcrome.co.uk/community_server/b/community_server/archive/2009/04/07/alexcrome-cs-2008-5.aspx"&gt;previous version&lt;/a&gt;.&amp;nbsp; For a full list of functionality see the &lt;a href="http://alexcrome.co.uk/evolution/w/addon_documentation/"&gt;documentation&lt;/a&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://alexcrome.co.uk/evolution/w/addon_documentation/classic-forum-display.aspx"&gt;&lt;strong&gt;New Classic Forum Display Widget&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt; &lt;/strong&gt;&amp;ndash; The &lt;a href="http://alexcrome.co.uk/evolution/w/addon_documentation/classic-forum-display.aspx"&gt;Classic Forum Display widget&lt;/a&gt; displays a list of forums in a particular group and direct sub groups, grouped by the group the forums are in &lt;br /&gt;&lt;a href="http://alexcrome.co.uk/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/00.00.00.00.47.metablogapi/7444.image_5F00_22C19EC1.png"&gt;&lt;img height="177" width="244" src="http://alexcrome.co.uk/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/00.00.00.00.47.metablogapi/3010.image_5F00_thumb_5F00_580AB126.png" alt="image" border="0" title="image" style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" /&gt;&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="http://alexcrome.co.uk/evolution/w/addon_documentation/table-of-contents.aspx"&gt;&lt;strong&gt;Table of Contents redesign&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&amp;ndash; The &lt;a href="http://alexcrome.co.uk/evolution/w/addon_documentation/table-of-contents.aspx"&gt;Table of Contents&lt;/a&gt; addon has had a makeover to better fit into the new theme &lt;br /&gt;&lt;a href="http://alexcrome.co.uk/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/00.00.00.00.47.metablogapi/7217.image_5F00_37173E7F.png"&gt;&lt;img height="162" width="159" src="http://alexcrome.co.uk/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/00.00.00.00.47.metablogapi/8484.image_5F00_thumb_5F00_04B36B00.png" alt="image" border="0" title="image" style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" /&gt;&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&amp;nbsp;&lt;a href="http://alexcrome.co.uk/evolution/w/addon_documentation/manage-addon-configurations.aspx"&gt;&lt;strong&gt;Mange Addons page is now a widget&lt;/strong&gt;&lt;/a&gt;&amp;nbsp;&lt;strong&gt;&amp;ndash; &lt;/strong&gt;The Manage Addons page has been moved out of the control panel and into a &lt;a href="http://alexcrome.co.uk/evolution/w/addon_documentation/manage-addon-configurations.aspx"&gt;Manage Addons Configuration widget&lt;/a&gt; &amp;ndash; this prevents upgrades from removing the link to the Manage Addons page in the Control Panel. &lt;br /&gt;&lt;a href="http://alexcrome.co.uk/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/00.00.00.00.47.metablogapi/0334.image_5F00_246244C8.png"&gt;&lt;img height="122" width="244" src="http://alexcrome.co.uk/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/00.00.00.00.47.metablogapi/1185.image_5F00_thumb_5F00_2EB36928.png" alt="image" border="0" title="image" style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" /&gt;&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;General Refactoring &amp;ndash; I&lt;/strong&gt;mprovements have been made to the underlying codebase which make it easier to write additional Configurable Addons and deal with Dynamic Configuration.&amp;nbsp; I shall be blogging a more about this in the future. &lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Removed Functionality&lt;/h2&gt;
&lt;p&gt;The following features have been removed since AlexCrome.CS 2008.5.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Quick Reply &amp;ndash; this is now implemented out of the box &lt;/li&gt;
&lt;li&gt;Copy Wiki Page to Blog &lt;/li&gt;
&lt;li&gt;Refresh Cache on Comment &lt;/li&gt;
&lt;li&gt;Set Anonymous User Roles &lt;/li&gt;
&lt;li&gt;Subscribe to Hub on Join &lt;/li&gt;
&lt;/ul&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://alexcrome.co.uk/aggbug.aspx?PostID=676" width="1" height="1"&gt;</description><category domain="http://alexcrome.co.uk/evolution/b/blog/archive/tags/Extensions/">Extensions</category><category domain="http://alexcrome.co.uk/evolution/b/blog/archive/tags/Telligent/">Telligent</category><category domain="http://alexcrome.co.uk/evolution/b/blog/archive/tags/Telligent+Evolution+Platform/">Telligent Evolution Platform</category><category domain="http://alexcrome.co.uk/evolution/b/blog/archive/tags/AlexCrome-Evolution/">AlexCrome.Evolution</category><category domain="http://alexcrome.co.uk/evolution/b/blog/archive/tags/Addons/">Addons</category></item><item><title>Graffiti to Community Server Migrator</title><link>http://alexcrome.co.uk/community_server/b/community_server/archive/2009/05/14/graffiti-to-community-server-migrator.aspx</link><pubDate>Thu, 14 May 2009 10:31:25 GMT</pubDate><guid isPermaLink="false">14ef0438-becd-400b-84a7-36022fc26c96:464</guid><dc:creator>Alex</dc:creator><slash:comments>4</slash:comments><description>&lt;p&gt;A few months ago, I decided to move my website from &lt;a href="http://graffiticms.com/"&gt;GraffitiCMS&lt;/a&gt; to &lt;a href="http://communityserver.com"&gt;Community Server&lt;/a&gt;. Whilst I loved Graffiti as a blogging platform, it didn’t best serve my needs for my &lt;a href="http://alexcrome.co.uk/media/g/alexcrome-cs/default.aspx"&gt;Community Server Addons&lt;/a&gt; – I wanted to be able to show the addons in use, and wanted to use wikis for &lt;a href="http://alexcrome.co.uk/wikis/alexcrome-cs-2008-5/default.aspx"&gt;documentation&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;In order to migrate content from Graffiti to Community Server, I created a utility page that ran within Community Server, and grabbed posts from Graffiti using the Graffiti API.&amp;#160; It imports posts from an individual category (and optionally comments and posts from child categories) into a Community Server blog.&amp;#160; I was actually very surprised how easy it was to get posts out of Graffiti – I just referenced the GraffitiClient.API.dll file included with Graffiti from my custom webpage, created an instance of GraffitiService and could access the Graffiti content from that instance.&lt;/p&gt;  &lt;p&gt;The migrator page I created is available &lt;a href="http://alexcrome.co.uk/media/p/465.aspx"&gt;here&lt;/a&gt;.&amp;#160; It is very rough around the edges - the only testing’s it’s gone through was that it managed to successfully migrate cotnent from my graffiti website to my community server website on the third or fourth attempt.&amp;#160; Make sure to carefully read through the notes section when you open the migrator pgae.&lt;/p&gt;  &lt;p&gt;To use the migrator, just drop the migrator page somewhere within your Community Server website and copy the GraffitiClient.API.dll from your Graffiti install into the /bin/ folder of Community Server.&amp;#160; You can then access the migrator by opening the page in your web browser.&amp;#160; (If you get redirected to an Access Denied page, ensure the user you’re logged in as has permissions to post to at least one blog.)&lt;/p&gt;  &lt;p&gt;Once you’ve opened the Migrator page, there are two steps to the migration – the first is to get a list of categories from Graffiti.&amp;#160; To do that you need to fill in the username and password you use to login to Graffiti, as well as the URL to the Graffiti.&amp;#160; (NOTE, you must make sure you append /api/ to your url.)&amp;#160; Press the Load Graffiti Categories button to load the Categories.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://alexcrome.co.uk/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/community_5F00_server.metablogapi/8015.image_5F00_1237C3D3.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://alexcrome.co.uk/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/community_5F00_server.metablogapi/0310.image_5F00_thumb_5F00_71B08420.png" width="244" height="178" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Now you have a list of categories from Graffiti, you can select the categories you want to import and the blog you want to import the content into.&amp;#160; You can also chose if you want to migrate comments, and whether you want to migrate content from all child categories.&amp;#160; To migrate your content, hit the Migrate Posts button and your content will be copied from Graffiti to Community Server.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://alexcrome.co.uk/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/community_5F00_server.metablogapi/2086.image_5F00_6CCDD064.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://alexcrome.co.uk/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/community_5F00_server.metablogapi/1004.image_5F00_thumb_5F00_0C107738.png" width="244" height="199" /&gt;&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt; Again I must point out it’s very rough around the edges and should not be used without taking appropiate backups.&amp;#160; Feel free to look at the migration code but be warned it’s not pretty however it did the job it was required to do.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://alexcrome.co.uk/aggbug.aspx?PostID=464" width="1" height="1"&gt;</description></item><item><title>Developing on Community Server</title><link>http://alexcrome.co.uk/community_server/b/community_server/archive/2009/04/29/developing-on-community-server.aspx</link><pubDate>Wed, 29 Apr 2009 17:06:00 GMT</pubDate><guid isPermaLink="false">14ef0438-becd-400b-84a7-36022fc26c96:302</guid><dc:creator>Alex</dc:creator><slash:comments>10</slash:comments><description>&lt;p&gt;&amp;nbsp;When you come to developing on top of Community Server, you&amp;rsquo;ve first got to decide whether or not you should use the SDK (which you probably shouldn&amp;rsquo;t).&amp;nbsp; You&amp;rsquo;ve then got to set up your initial project so you can best take advantage of Community Server.&amp;nbsp; This blog post will guide you through deciding (hopefully against) using the SDK and setting up Community Server to develop on top of it.&lt;/p&gt;

&lt;h3 id="what_is_the_sdk"&gt;What is the SDK&lt;/h3&gt;
&lt;p&gt;To all intents and purposes the SDK is the source code for core of Community Server &amp;ndash; that is it includes the source for the various CS applications (forums, blogs, etc.), controls and components.&amp;nbsp; It does not however include source code for the Enterprise Addons (e.g. Single Sign On, Mail Gateway), nor the Telligent assemblies.&amp;nbsp; &lt;/p&gt;
&lt;h3 id="why_should_i_avoid_the_sdk_like_the_plague"&gt;Why should I avoid the SDK like the plague?&lt;/h3&gt;
&lt;p&gt;Maybe I&amp;#39;m being a little over the top here, but I strongly reccomend you don&amp;#39;t use the SDK for a live project.&amp;nbsp; By all means have a copy of the SDK to hand for reference purposes, but please avoid using the SDK when you don&amp;#39;t need to.&amp;nbsp; There are a number of reasons for this&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;If you build directly on the SDK, every time you build your project you&amp;#39;ll need to build the whole CS solution which takes time.&amp;nbsp; Whilst one build doesn&amp;rsquo;t take that long &amp;ndash; maybe 10 seconds to a minute depending on your machine,that time adds up over the course of a day. &lt;/li&gt;
&lt;li&gt;With the SDK in front of you, you&amp;#39;re tempted to modify the core Community Server source code (or accidently make changes).&amp;nbsp; Doing this has two problems &lt;ol&gt;
&lt;li&gt;If you encounter a bug, it&amp;#39;s difficult to determine whether there&amp;#39;s an underlying issue in Community Server, or the issue is with your changes. &lt;/li&gt;
&lt;li&gt;When it comes to upgrading you need to make sure copying the source files doesn&amp;#39;t overwrite the changes you&amp;#39;ve made so you need to spend a lot of time carefully reviewing changes made in the newer version to ensure you don&amp;#39;t lose any of your customisations. &lt;/li&gt;
&lt;/ol&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Generally there is no reason to need to&amp;nbsp;touch the SDK.&amp;nbsp; It only causes issues later down the lines (see above).&amp;nbsp; It is very easy to plug into the Community Server Pipeline when you need to extend it (such as CSModules, custom Data Providers and subclassing existing controls) and custom&amp;nbsp;features can be built in seperate projects and then referenced from within your Community Server theme.&amp;nbsp; If you are not sure of how you can achieve your goal without modifying the SDK, pose the question to some other developers on the &lt;a href="http://dev.communityserver.com/forums/"&gt;Community Server forums&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id="building_on_community_server_without_using_the_sdk"&gt;Building on Community Server without using the SDK&lt;/h3&gt;
&lt;p&gt;Now youv&amp;#39;e decided against usign the SDK (If you haven&amp;#39;t , I reccomend you read my warnings again and make very sure you can&amp;#39;t do this without the SDK) it&amp;#39;s time to set up Visual Studio to build on top of Community Server.&amp;nbsp; Before I detail how to do this, I must thank &lt;a href="http://community.hydrussoftware.com/blogs/john/default.aspx"&gt;John Bledsoe&lt;/a&gt; of &lt;a href="http://www.atgi.com"&gt;ATGi&lt;/a&gt; (A &lt;a href="http://communityserver.com/learn-more/partner-program/"&gt;Community Server Partner&lt;/a&gt;) for &lt;a href="http://dev.communityserver.com/forums/p/505831/644868.aspx#644868"&gt;introducing me&lt;/a&gt; to this set up.&amp;nbsp; This is simply step by step instructions on how to use John&amp;#39;s technique.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;If you don&amp;#39;t already have a copy of Visual Studio, download and install &lt;a href="http://www.microsoft.com/express/vwd/Default.aspx"&gt;Visual Studio Web Developer Express 2008&lt;/a&gt; SP1.&amp;nbsp;&amp;nbsp; (N.B. if you have a copy of Visual Studio Web Developer Express 2005, or 2008 without SP1, you will need to either upgrade to 2008 SP1 or a full version of Visual Studio in order to use this set up).&amp;nbsp; If you don&amp;#39;t have a copy of SQL Server, you will likely want to install that so you can run Community Server on your computer.&amp;nbsp; (Unlike Visual Studio Web Developer Express 2005, SQL Server Express 2005 is suitable for this purpose). &lt;/li&gt;
&lt;li&gt;Open Visual Studio and go to file &amp;gt; new project and create a new &amp;quot;ASP.Net Web Application&amp;quot; &lt;br /&gt;&lt;a href="http://alexcrome.co.uk/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/community_5F00_server.metablogapi/3480.image_5F00_3DB8C06E.png"&gt;&lt;img height="167" width="244" src="http://alexcrome.co.uk/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/community_5F00_server.metablogapi/7245.image_5F00_thumb_5F00_5CFDF7F2.png" alt="image" border="0" style="border-right-width:0px;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" /&gt;&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;To your Web Application Project, add a class library project - this will be where you write any custom controls and / or code for your website.&amp;nbsp; Depending on what you&amp;#39;re doing, you may prefer to make a number of class library projects to better separate your custom extensions. &lt;br /&gt;&lt;a href="http://alexcrome.co.uk/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/community_5F00_server.metablogapi/8562.image_5F00_5C9455AE.png"&gt;&lt;img height="156" width="244" src="http://alexcrome.co.uk/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/community_5F00_server.metablogapi/2625.image_5F00_thumb_5F00_550B76F2.png" alt="image" border="0" style="border-right-width:0px;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" /&gt;&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;Delete the existing files within the project &lt;br /&gt;&lt;a href="http://alexcrome.co.uk/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/community_5F00_server.metablogapi/5040.image_5F00_64AE12B4.png"&gt;&lt;img height="166" width="195" src="http://alexcrome.co.uk/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/community_5F00_server.metablogapi/3757.image_5F00_thumb_5F00_31DE0C40.png" alt="image" border="0" style="border-right-width:0px;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" /&gt;&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;Download the latest Community Server Web Installer from &lt;a href="http://get.communityserver.com/download/" title="http://get.communityserver.com/download/"&gt;http://get.communityserver.com/download/&lt;/a&gt;, and paste the contents of the /web/ folder (apart from the /bin/ folder) of the Web Installer into your web project.&amp;nbsp; (I suggest here you paste into the web project through Visual Studio rather than Windows Explorer) &lt;/li&gt;
&lt;li&gt;In Windows Explorer, open the location where you&amp;#39;ve created your two projects and add a new folder &amp;quot;References&amp;quot; &lt;br /&gt;&lt;a href="http://alexcrome.co.uk/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/community_5F00_server.metablogapi/8838.image_5F00_2818A4C8.png"&gt;&lt;img height="220" width="244" src="http://alexcrome.co.uk/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/community_5F00_server.metablogapi/1462.image_5F00_thumb_5F00_771B84CB.png" alt="image" border="0" style="border-right-width:0px;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" /&gt;&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;Into this References folder, copy the contents of /web/bin/ in the Web Installer download. &lt;br /&gt;&lt;a href="http://alexcrome.co.uk/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/community_5F00_server.metablogapi/2335.image_5F00_28A98312.png"&gt;&lt;img height="202" width="244" src="http://alexcrome.co.uk/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/community_5F00_server.metablogapi/1004.image_5F00_thumb_5F00_05EADC06.png" alt="image" border="0" style="border-right-width:0px;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" /&gt;&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;Now back in visual studio, right click the References folder in the Web Project, and select Add Reference &lt;br /&gt;&lt;a href="http://alexcrome.co.uk/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/community_5F00_server.metablogapi/6813.image_5F00_52B1334D.png"&gt;&lt;img height="242" width="244" src="http://alexcrome.co.uk/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/community_5F00_server.metablogapi/7343.image_5F00_thumb_5F00_5415561F.png" alt="image" border="0" style="border-right-width:0px;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" /&gt;&lt;/a&gt;&amp;nbsp; &lt;br /&gt;In the Add References Window that opens, select the Browse tab, navigate to the References folder, add references to all the files in this folder (n.b. you don&amp;#39;t have to add them one by one, you can select all the files in one go and click OK) &lt;br /&gt;&lt;a href="http://alexcrome.co.uk/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/community_5F00_server.metablogapi/1738.image_5F00_7C4A1FE2.png"&gt;&lt;img height="206" width="244" src="http://alexcrome.co.uk/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/community_5F00_server.metablogapi/6102.image_5F00_thumb_5F00_396DDB68.png" alt="image" border="0" style="border-right-width:0px;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" /&gt;&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;Now open the Add References Window again, and click on the Projects Tab.&amp;nbsp; Add a reference to the class library project(s) you created.&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;a href="http://alexcrome.co.uk/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/community_5F00_server.metablogapi/6036.image_5F00_32512FA1.png"&gt;&lt;img height="206" width="244" src="http://alexcrome.co.uk/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/community_5F00_server.metablogapi/8203.image_5F00_thumb_5F00_73EB6BED.png" alt="image" border="0" style="border-right-width:0px;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" /&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;a href="http://alexcrome.co.uk/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/community_5F00_server.metablogapi/8420.image_5F00_038E07B0.png"&gt;&lt;img height="244" width="226" src="http://alexcrome.co.uk/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/community_5F00_server.metablogapi/6663.image_5F00_thumb_5F00_60CCCFF2.png" align="left" alt="image" border="0" style="border-right-width:0px;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;You have now completed setting up the project in which to extend Community Server without modifying the core code.&amp;nbsp; All your custom code can go into the class library project(s) you created, and you can use the SDK as a reference for any custom controls or extension you do.&amp;nbsp; Before you can start using your Community Server site, you will need to build the solution, and then run the &lt;a href="http://docswiki.communityserver.com/wikis/cs20085docs/installing-web-based-community-server-2008-5.aspx"&gt;web installer&lt;/a&gt; to set up the Community Server database.&lt;/p&gt;
&lt;p&gt;At this point you may also wish to consider checking your project into a Source Control system so you can keep track of changes made.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id="building_on_community_server_with_the_sdk" style="clear:both;"&gt;Building on Community Server with the SDK&lt;/h3&gt;
&lt;p&gt;If you&amp;rsquo;ve got this far, you&amp;rsquo;ve ignored all my warnings about avoiding the SDK wherever you can.&amp;nbsp; For one last time I plea that do evaluate exactly what you want to achieve and whether it can be done without touching the SDK.&lt;/p&gt;
&lt;p&gt;I&amp;#39;ve tried my&amp;nbsp;best to disuade you from using the SDK, however if I&amp;#39;ve been unsuccessful, I might as well give you some advise on using the SDK.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Properly set your project up in source control&lt;/strong&gt; &amp;ndash; Whilst I would suggest that you always check your project into source control, regardless of whether you use the SDK or not, the importance of source control skyrockets when building directly with the SDK.&amp;nbsp; When it comes to upgrading, if you set your project up properly in source control you can automate a lot of the merge process.&amp;nbsp; For an idea of the process you&amp;rsquo;ll need to go through when upgrading CS with the SDK take a look at another blog post by &lt;a href="http://community.hydrussoftware.com/blogs/john/default.aspx"&gt;John Bledsoe&lt;/a&gt; on &lt;a href="http://community.hydrussoftware.com/blogs/john/archive/2009/04/08/upgrading-a-community-server-site-to-a-new-version-of-the-product.aspx"&gt;Upgrading Community Server&lt;/a&gt;.&amp;nbsp; That post should also give you an idea of how to set your project up in source control. &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Keep changes to the core SDK to a minimum &amp;ndash; &lt;/strong&gt;You&amp;rsquo;ve seen all the reasons above for why you should avoid the SDK.&amp;nbsp; The more you modify the SDK, the harder you make your life.&amp;nbsp; If you are adding significant new functionality which requires modification of the core code base, always think of whether some of the functionality can be moved into a separate project, and then just add pointerst into the SDK pointing to your custom code. &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id="using_community_server_with_the_visual_studio_web_server"&gt;Using Community Server with the Visual Studio Web Server&lt;/h3&gt;
&lt;p&gt;The CFS (Centralised File System) is not compatible with the Visual Studio Web Server.&amp;nbsp; Community Server will work find on the Visual Studio Web server, however any uploaded content (e.g. user avatars, media gallery posts etc.) will not work.&amp;nbsp; To work around this issue, you should do your testing on IIS where possible.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://alexcrome.co.uk/aggbug.aspx?PostID=302" width="1" height="1"&gt;</description></item><item><title>AlexCrome.CS 2008.5</title><link>http://alexcrome.co.uk/community_server/b/weblog/archive/2009/04/07/alexcrome-cs-2008-5.aspx</link><pubDate>Tue, 07 Apr 2009 21:56:00 GMT</pubDate><guid isPermaLink="false">14ef0438-becd-400b-84a7-36022fc26c96:653</guid><dc:creator>Alex</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;I&amp;#39;ve finaly got around to finishing and packing up the 2008.5 version of my addons.&lt;/p&gt;
&lt;p&gt;For those of you who can&amp;#39;t wait to read the rest of this blog post, you can download the addons from &lt;a href="http://alexcrome.co.uk/media/p/219.aspx"&gt;&lt;strong&gt;&lt;span style="color:#0066dd;"&gt;the media gallery&lt;/span&gt;&lt;/strong&gt;&lt;/a&gt; and read documentation on them from &lt;a href="http://alexcrome.co.uk/wikis/alexcrome-cs-2008-5/default.aspx"&gt;&lt;strong&gt;&lt;span style="color:#0066dd;"&gt;the wiki&lt;/span&gt;&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="new_in_this_version"&gt;New in this version&lt;/h2&gt;
&lt;h3 id="extended_attributes_sub_form"&gt;&lt;a href="http://alexcrome.co.uk/wikis/alexcrome-cs-2008-5/extended-attributes-subform.aspx"&gt;&lt;span style="color:#0066dd;"&gt;Extended Attributes Sub Form&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;This is the addon I&amp;#39;m most excited about.&amp;nbsp; A very powerful feature of Chameleon Forms in Community Server is the ability to plug in &amp;quot;SubForms&amp;quot; which can collect additional data and store it with the object when it saved.&amp;nbsp; Whilst this is a powerful feature, for simple situations where you only want to collect extra data without performing validation or much extra work the SubForms method is overly complictaed with a lot of formality required to do a simple action.&lt;/p&gt;
&lt;p&gt;The Extended Attributes SubForm is a SubForm which allows the controls within it to be defined through an XML file in much the same way you can define DynamicConfiguration optiosn for a theme in the theme.config file (In fact the subform control uses the same DynamicConfiguration bits as Theme Configurationd does).&amp;nbsp; Whilst I accept the XML file itself is not as elegant as writing a custom SubForm, for simple data collection it is easier, and more accessible.&lt;/p&gt;
&lt;p&gt;You can see an example of the SubForm in action at &lt;a href="http://alexcrome.co.uk/demo/ExtendedAttributesSample.aspx"&gt;&lt;strong&gt;&lt;span style="color:#0066dd;"&gt;http://alexcrome.co.uk/demo/ExtendedAttributesSample.aspx&lt;/span&gt;&lt;/strong&gt;&lt;/a&gt;&amp;nbsp;.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id="table_of_contents"&gt;Table of Contents&lt;/h3&gt;
&lt;p&gt;The table of contents addon can be used to generate a Table of Cotnents for an individual post.&amp;nbsp; The table of contents is generated based on the use of heading tags (h1, h2, h3 etc.)&amp;nbsp; A table of contents is placed by adding [&lt;strong&gt;toc&lt;/strong&gt;] into a post where you want the table of contents to appear.&amp;nbsp; The following is the table of contents generated for this post.&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id="other_smaller_additions"&gt;Other smaller additions&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;New User Random Avatar&lt;/strong&gt; - Sick of having lots of users with the anonymous avatar?&amp;nbsp; This module will assign new members a random avatar from the Selectable Avatars store when they join. &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Default Mirrored Blog Post Author&lt;/strong&gt; - Sick of having mirrrored blog posts having the anonymous user avatar.&amp;nbsp; This module will cause the posts to be created by the first owner of the blog the post is being mirrored to instead of the anonymous user. &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SubscribeToHubOnJoin&lt;/strong&gt; - Subscribes a user to a group when they join so they recieve email updates from that group. &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;New Hub Random Avatar &lt;/strong&gt;- Does the same as the User Random Avatar module, but for Hubs. &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id="changes_to_existing_addons"&gt;Changes to Existing Addons&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Referal Points now supports creating friendships betwen users when a user accepts an invitation from another user. &lt;/li&gt;
&lt;li&gt;A few CSModules have been renamed &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id="get_the_addons"&gt;Get the Addons&lt;/h2&gt;
&lt;p&gt;To get the addons, just to to &lt;a href="http://alexcrome.co.uk/media/p/219.aspx"&gt;&lt;strong&gt;&lt;span style="color:#0066dd;"&gt;the media gallery&lt;/span&gt;&lt;/strong&gt;&lt;/a&gt;&amp;nbsp;and download the addon package.&amp;nbsp; Installation instructions are available on the download page.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://alexcrome.co.uk/aggbug.aspx?PostID=653" width="1" height="1"&gt;</description></item><item><title>AlexCrome.CS 2008.5</title><link>http://alexcrome.co.uk/community_server/b/community_server/archive/2009/04/07/alexcrome-cs-2008-5.aspx</link><pubDate>Tue, 07 Apr 2009 21:22:00 GMT</pubDate><guid isPermaLink="false">14ef0438-becd-400b-84a7-36022fc26c96:220</guid><dc:creator>Alex</dc:creator><slash:comments>8</slash:comments><description>&lt;p&gt;I&amp;#39;ve finaly got around to finishing and packing up the 2008.5 version of my addons.&lt;/p&gt;
&lt;p&gt;For those of you who can&amp;#39;t wait to read the rest of this blog post, you can download the addons from &lt;a href="http://alexcrome.co.uk/media/p/219.aspx"&gt;the media gallery&lt;/a&gt; and read documentation on them from &lt;a href="http://alexcrome.co.uk/wikis/alexcrome-cs-2008-5/default.aspx"&gt;the wiki&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="new_in_this_version"&gt;New in this version&lt;/h2&gt;
&lt;h3 id="extended_attributes_sub_form"&gt;&lt;a href="http://alexcrome.co.uk/wikis/alexcrome-cs-2008-5/extended-attributes-subform.aspx"&gt;Extended Attributes Sub Form&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;This is the addon I&amp;#39;m most excited about.&amp;nbsp; A very powerful feature of Chameleon Forms in Community Server is the ability to plug in &amp;quot;SubForms&amp;quot; which can collect additional data and store it with the object when it saved.&amp;nbsp; Whilst this is a powerful feature, for simple situations where you only want to collect extra data without performing validation or much extra work the SubForms method is overly complictaed with a lot of formality required to do a simple action.&lt;/p&gt;
&lt;p&gt;The Extended Attributes SubForm is a SubForm which allows the controls within it to be defined through an XML file in much the same way you can define DynamicConfiguration optiosn for a theme in the theme.config file (In fact the subform control uses the same DynamicConfiguration bits as Theme Configurationd does).&amp;nbsp; Whilst I accept the XML file itself is not as elegant as writing a custom SubForm, for simple data collection it is easier, and more accessible.&lt;/p&gt;
&lt;p&gt;You can see an example of the SubForm in action at &lt;a href="http://alexcrome.co.uk/demo/ExtendedAttributesSample.aspx"&gt;http://alexcrome.co.uk/demo/ExtendedAttributesSample.aspx&lt;/a&gt;&amp;nbsp;.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id="table_of_contents"&gt;Table of Contents&lt;/h3&gt;
&lt;p&gt;The table of contents addon can be used to generate a Table of Cotnents for an individual post.&amp;nbsp; The table of contents is generated based on the use of heading tags (h1, h2, h3 etc.)&amp;nbsp; A table of contents is placed by adding [&lt;strong&gt;toc&lt;/strong&gt;] into a post where you want the table of contents to appear.&amp;nbsp; The following is the table of contents generated for this post.&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id="other_smaller_additions"&gt;Other smaller additions&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;New User Random Avatar&lt;/strong&gt; - Sick of having lots of users with the anonymous avatar?&amp;nbsp; This module will assign new members a random avatar from the Selectable Avatars store when they join.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Default Mirrored Blog Post Author&lt;/strong&gt; - Sick of having mirrrored blog posts having the anonymous user avatar.&amp;nbsp; This module will cause the posts to be created by the first owner of the blog the post is being mirrored to instead of the anonymous user.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SubscribeToHubOnJoin&lt;/strong&gt; - Subscribes a user to a group when they join so they recieve email updates from that group.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;New Hub Random Avatar &lt;/strong&gt;- Does the same as the User Random Avatar module, but for Hubs.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id="changes_to_existing_addons"&gt;Changes to Existing Addons&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Referal Points now supports creating friendships betwen users when a user accepts an invitation from another user.&lt;/li&gt;
&lt;li&gt;A few CSModules have been renamed&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id="get_the_addons"&gt;Get the Addons&lt;/h2&gt;
&lt;p&gt;To get the addons, just to to &lt;a href="http://alexcrome.co.uk/media/p/219.aspx"&gt;the media gallery&lt;/a&gt;&amp;nbsp;and download the addon package.&amp;nbsp; Installation instructions are available on the download page.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://alexcrome.co.uk/aggbug.aspx?PostID=220" width="1" height="1"&gt;</description></item><item><title>Back on Community Server</title><link>http://alexcrome.co.uk/b/alex/archive/2009/04/01/back-on-community-server.aspx</link><pubDate>Wed, 01 Apr 2009 19:41:00 GMT</pubDate><guid isPermaLink="false">14ef0438-becd-400b-84a7-36022fc26c96:192</guid><dc:creator>Alex</dc:creator><slash:comments>2</slash:comments><description>&lt;p&gt;If you&amp;#39;re viewing this post on the website as opposed to a feed reader, you might notice the site looks a little different.&amp;nbsp; The astute amongst you will also have noticed the site looks a lot like the Hawaii theme in Community Server.&amp;nbsp; That&amp;#39;s because the site is running on Community Server.&lt;/p&gt;
&lt;p&gt;There are two main reasons for moving from Graffiti back to Community Server.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;I felt with my CSAddon Package I&amp;#39;d rather show the addons off on the Site that was distributing them&lt;/li&gt;
&lt;li&gt;I wanted to use Wikis for the &lt;a href="http://alexcrome.co.uk/wikis/alexcrome-cs-2008-5/default.aspx"&gt;documentation for my upcoming AlexCrome.CS 2008.5 addons&lt;/a&gt; - take a look at the wiki now for a sneak peak at what&amp;#39;s coming.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Over the next few days I&amp;#39;ll be fixing some oddities due to moving from Graffiti to Community Server and a new domain name (askcrome.co.uk to alexcrome.co.uk), as well as finishing testing and releasing the next version of my Addons.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://alexcrome.co.uk/aggbug.aspx?PostID=192" width="1" height="1"&gt;</description></item><item><title>CSModules</title><link>http://alexcrome.co.uk/community_server/b/community_server/archive/2009/02/16/csmodules.aspx</link><pubDate>Mon, 16 Feb 2009 22:02:00 GMT</pubDate><guid isPermaLink="false">14ef0438-becd-400b-84a7-36022fc26c96:98</guid><dc:creator>Alex</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;CSModules allow you to plug into Community Server and run your own code when certain events happen.&lt;/p&gt;
&lt;p&gt;In fact CSModules are so good that a lot of Community Server functionality is implemented through CSModules (77 are used out of the box!). This means you can remove or replace Community Server functionality without having to touch the core source code. Examples of functionality implemented with CSModules include&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Activity Message Logging&lt;/li&gt;
&lt;li&gt;Email Notification &lt;/li&gt;
&lt;li&gt;Points &lt;/li&gt;
&lt;li&gt;Spam Filtering &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id="creating_a_csmodule"&gt;Creating a CSModule&lt;/h2&gt;
&lt;p&gt;To create a CSModule you need to create a class that implements the CommunityServer.Components.ICSModule Interface. This interface has one method &amp;ndash; Init &amp;ndash; with two paramaters&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;CSApplication &amp;ndash;&lt;/b&gt; this contains the events you want to hook into&lt;/li&gt;
&lt;li&gt;&lt;b&gt;XmlNode &amp;ndash;&lt;/b&gt; This is the XmlNode that was used to register the CSModule. This can be used for custom configuration options.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Additional events for Wikis are available by hooking into events in CommunityServer.Wikis.Components.WikiEvents.&lt;/p&gt;
&lt;p&gt;Once you&amp;rsquo;ve created your CSModule, you need to register it so that CS knows to use it. CSModules are registered in the &amp;lt;CSModules&amp;gt; section of communityserver.config. To add your custom module, just add a new node to this section with the following markup.&lt;/p&gt;
&lt;pre&gt;&amp;lt;add name=&amp;quot;Your_Module_Name&amp;quot; type = &amp;quot;Namespace.ClassName, Assembly&amp;quot; /&amp;gt;&lt;/pre&gt;
&lt;p&gt;(n.b. where possible you should use an override file to do this &amp;ndash; see below) &lt;/p&gt;
&lt;h2 id="tips_and_tricks"&gt;Tips and Tricks&lt;/h2&gt;
&lt;h3 id="register__remove_csmodules_with_override_files"&gt;Register / Remove CSModules with Override Files&lt;/h3&gt;
&lt;p&gt;For a more detailed explanation of Override files and why you should use them, read this article on &lt;a href="http://alexcrome.co.uk/blogs/community_server/override-files-in-community-server.aspx"&gt;Override Files&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Essentially by using a &lt;a href="http://alexcrome.co.uk/blogs/community_server/override-files-in-community-server.aspx"&gt;communityserver_override.config&lt;/a&gt; file to register CSModules you make upgrading to future versions of Community Server easier.&lt;/p&gt;
&lt;p&gt;Below are two example &lt;a href="http://alexcrome.co.uk/blogs/community_server/override-files-in-community-server.aspx"&gt;overrides&lt;/a&gt; for adding and removing CSModules.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Add a CSModule&lt;/b&gt; &lt;br /&gt;
&lt;pre&gt;&amp;lt;Override xpath=&amp;quot;/CommunityServer/CSModules&amp;quot; mode=&amp;quot;add&amp;quot;&amp;gt; 
&amp;lt;!-- Register your CSModules Here &amp;ndash;&amp;gt; 
&amp;lt;/Override&amp;gt; &lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Remove a CSModule&lt;/b&gt; &lt;br /&gt;
&lt;pre&gt;&amp;lt;Override xpath=&amp;quot;/CommunityServer/CSModules/add[@name=&amp;#39;ModuleName&amp;#39;]&amp;quot; mode=&amp;quot;remove&amp;quot; /&amp;gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="wikis"&gt;Wikis&lt;/h3&gt;
&lt;p&gt;Events on the CSApplication object in the ICSModule Init method do not fire for Wikis. To hook into events fired for Wikis, you should hook into events in the CommunityServer.Wikis.Components.WikiEvents class (in the CommunityServer.Wikis assembly).&lt;/p&gt;
&lt;h3 id="pre_or_post_before_or_after_in_wikievents"&gt;Pre or Post (Before or After in WikiEvents)&lt;/h3&gt;
&lt;p&gt;When you look through the list of available events, you&amp;rsquo;ll often see two similar events &amp;ndash; one PreSOMETHING and another PostSOMETHING. The difference between the two is the Pre event is fired before the object is saved or deleted to the database, whereas the Post event is fired after &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Pre / Before &amp;ndash;&lt;/b&gt; use this version of the event if you want to make changes to the object that you want persisted in the database. &lt;/li&gt;
&lt;li&gt;&lt;b&gt;Post / After &amp;ndash;&lt;/b&gt; use this version of the event if want to run code after an action has successfully completed. &lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="object_state"&gt;Object State&lt;/h3&gt;
&lt;p&gt;(N.B. Doesn&amp;rsquo;t apply to Wiki Events)&lt;/p&gt;
&lt;p&gt;Most events fire when a relevant object is being created, updated or deleted. However you may not want to run your code in all these scenarios. To determine the scenario you&amp;rsquo;re in, you should look at the State property of the event&amp;rsquo;s EventArgs&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;ObjectState.Create &amp;ndash;&lt;/b&gt; the object is about to be added to the database for the first time(Pre / Before) or has just been saved to the database for the first time (Post / After) &lt;/li&gt;
&lt;li&gt;&lt;b&gt;ObjectState.Delete &amp;ndash;&lt;/b&gt; the object is about to be deleted from the data store (Pre / Before) or has just been deleted (Post / After) &lt;/li&gt;
&lt;li&gt;&lt;b&gt;ObjectState.Update &amp;ndash;&lt;/b&gt; the object has been previously saved to the database, but is about to be updated in the data store (Pre / Before) or is has just been updated in the data store (Post / After) &lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="application_type"&gt;Application Type&lt;/h3&gt;
&lt;p&gt;(N.B. Doesn&amp;rsquo;t Apply to Wiki Events)&lt;/p&gt;
&lt;p&gt;The SectionGroup, Section and Post events fire regardless of whether the object is to do with Blogs or Forums etc., but you may only want your code to fire in one scenario. For that you should check the ApplicationType property of the event&amp;rsquo;s EventArgs.&lt;/p&gt;
&lt;h3 id="configuration"&gt;Configuration&lt;/h3&gt;
&lt;p&gt;You may have noticed that the CSModule Init event has two paramaters &amp;ndash; the CSApplication which provides the events to hook into, but also an XmlNode. This is the xml node which you used to register the module in the &amp;lt;CSModules&amp;gt; section of communityserver.config.&lt;/p&gt;
&lt;p&gt;This means that you don&amp;rsquo;t have to hard code variables into your CSModule, and can instead specify them on the XML Node you use to register your module &amp;ndash; this means you can change the variables at a later date without having to recompile your module&lt;/p&gt;
&lt;h2 id="troubleshooting_csmodules"&gt;Troubleshooting CSModules&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Make sure your Module class is marked as public &lt;/li&gt;
&lt;li&gt;Changes made to communityserver.config (or communityserver_override.config) may not take effect until your website is restarted. You can force a restart by touching the web.config file. &lt;/li&gt;
&lt;li&gt;Check the Community Server event logs &amp;ndash; events are recorded there if CSModules can&amp;rsquo;t be loaded. &lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="csmodule_events"&gt;CSModule Events&lt;/h2&gt;
&lt;p&gt;(N.B. for wiki related events, refer to the WikiEvents section below)&lt;/p&gt;
&lt;p&gt;I haven&amp;rsquo;t included descriptions of most events because they&amp;rsquo;re fairly self explanatory.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Pre...Update events are fired before the ... object is added, updated or deleted from the data store &lt;/li&gt;
&lt;li&gt;Post...Update events are fired after the ... object is added, updated or deleted from the data store &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For those events which aren&amp;rsquo;t so self explanatory, descriptions have been included&lt;/p&gt;
&lt;h3 id="group"&gt;Group&lt;/h3&gt;
&lt;p&gt;These events are for Section Groups, not Hubs (which are called Groups in the front end). For Hub events use the Section events.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;PreSectionGroupUpdate &lt;/li&gt;
&lt;li&gt;PostSectionGroupUpdate &lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="section"&gt;Section&lt;/h3&gt;
&lt;p&gt;A section is a Forum, a Weblog, a MediaGallery or a Hub.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;PreSectionUpdate &lt;/li&gt;
&lt;li&gt;PostSectionUpdate &lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="post"&gt;Post&lt;/h3&gt;
&lt;p&gt;Post is the base class to store blog posts, blog comments, media gallery posts, media gallery comments and forum posts &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;AuthorizePost &amp;ndash; Never Fired &lt;/li&gt;
&lt;li&gt;PreProcessPost &amp;ndash; Fired before just before the PrePostUpdate event &lt;/li&gt;
&lt;li&gt;PrePostUpdate &lt;/li&gt;
&lt;li&gt;PostPostUpdate &lt;/li&gt;
&lt;li&gt;PreRenderPost &lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="postattachments"&gt;PostAttachments&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;PrePostAttachmentUpdate &lt;/li&gt;
&lt;li&gt;PostPostAttachmentUpdate &lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="user"&gt;User&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;UserValidated &amp;ndash; Fired after a user&amp;rsquo;s credentials are verified &lt;/li&gt;
&lt;li&gt;UserKnown &amp;ndash; Fires as soon as CS knows the user who is viewing the page (this may be the anonymous user) &lt;/li&gt;
&lt;li&gt;PreUserUpdate &lt;/li&gt;
&lt;li&gt;PostUserUpdate &lt;/li&gt;
&lt;li&gt;UserRemoved &amp;ndash; Fired after a user is removed from the data store &lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="userinvitation"&gt;UserInvitation&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;PreUserInvitationUpdate &lt;/li&gt;
&lt;li&gt;PostUserInvitationUpdate &lt;/li&gt;
&lt;li&gt;UserInvitationAccepted &lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="userfiles"&gt;UserFiles&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;PreUserFileUpdate &lt;/li&gt;
&lt;li&gt;PostUserFileUpdate &lt;/li&gt;
&lt;li&gt;PreUserFolderUpdate &lt;/li&gt;
&lt;li&gt;PostUserFolderUpdate &lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="friendship"&gt;Friendship&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;PreFriendshipUpdate &lt;/li&gt;
&lt;li&gt;PostFriendshipUpdate &lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="messages"&gt;Messages&lt;/h3&gt;
&lt;p&gt;Messages include Conversations, Activity Messages, Announcements, Profile Comments and Status Messages. &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;PreMessageUpdate &lt;/li&gt;
&lt;li&gt;PostMessageUpdate &lt;/li&gt;
&lt;li&gt;PreMessageRender &lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="search"&gt;Search&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;PreSearch &lt;/li&gt;
&lt;li&gt;PostSearch &lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="configuration"&gt;Configuration&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;PostConfigurationInitialized &amp;ndash; Fired after Community Server loads configuration data for the first time. &lt;/li&gt;
&lt;li&gt;PreConfigurationUpdate &lt;/li&gt;
&lt;li&gt;PostConfigurationUpdate &lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="misc"&gt;Misc&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Category &amp;ndash; fired whenever a PostCategory (Tag) is updated or deleted (but not created)&lt;/li&gt;
&lt;li&gt;Rate &amp;ndash; Fired after any content is Rated&lt;/li&gt;
&lt;li&gt;Favorite &amp;ndash; Fired whenever an item is added or removed as a favourite. &lt;/li&gt;
&lt;li&gt;SectionMembership &amp;ndash; Fired whenever a user joins or leaves a Hub. &lt;/li&gt;
&lt;li&gt;CSException &amp;ndash; Fired whenever an ASP.Net exception is thrown at the application level. &lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="wiki_events"&gt;Wiki Events&lt;/h2&gt;
&lt;p&gt;Again I&amp;rsquo;m not providing descriptions because the events are self explanatory.&lt;/p&gt;
&lt;h3 id="wiki"&gt;Wiki&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;BeforeAddWiki &lt;/li&gt;
&lt;li&gt;AfterAddWiki &lt;/li&gt;
&lt;li&gt;BeforeUpdateWiki &lt;/li&gt;
&lt;li&gt;AfterUpdateWiki &lt;/li&gt;
&lt;li&gt;BeforeDeleteWiki &lt;/li&gt;
&lt;li&gt;AfterDeleteWiki &lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="page"&gt;Page&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;BeforeAddPage &lt;/li&gt;
&lt;li&gt;AfterAddPage &lt;/li&gt;
&lt;li&gt;BeforeUpdatePage &lt;/li&gt;
&lt;li&gt;AfterUpdatePage &lt;/li&gt;
&lt;li&gt;BeforeDeletePage &lt;/li&gt;
&lt;li&gt;AfterDeletePage &lt;/li&gt;
&lt;li&gt;RenderPage &lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="page_comment"&gt;Page Comment&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;BeforeAddPageComment &lt;/li&gt;
&lt;li&gt;AfterAddPageComment &lt;/li&gt;
&lt;li&gt;BeforeUpdatePageComment &lt;/li&gt;
&lt;li&gt;AfterUpdatePageComment &lt;/li&gt;
&lt;li&gt;BeforeDeletePageComment &lt;/li&gt;
&lt;li&gt;AfterDeletePageComment &lt;/li&gt;
&lt;li&gt;RenderPageComment &lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="page_revision"&gt;Page Revision&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;RenderPageRevision &lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://alexcrome.co.uk/aggbug.aspx?PostID=98" width="1" height="1"&gt;</description></item><item><title>Override Files in Community Server</title><link>http://alexcrome.co.uk/community_server/b/community_server/archive/2008/12/29/override-files-in-community-server.aspx</link><pubDate>Mon, 29 Dec 2008 18:15:00 GMT</pubDate><guid isPermaLink="false">14ef0438-becd-400b-84a7-36022fc26c96:99</guid><dc:creator>Alex</dc:creator><slash:comments>1</slash:comments><description>&lt;p&gt;&lt;em&gt;For all examples in this article, I shall only be modifying the configuration of the HTML Scrubber through a communityserver_override.config for the sake of consistency, however do bear in mind that override files can be used to modify any aspect of a communityserver.config or a siteurls.config file.&lt;/em&gt;&lt;/p&gt;

&lt;h3 id="why_should_i_use_override_files"&gt;Why Should I use Override Files?&lt;/h3&gt;
&lt;p&gt;The main benefit of using override files to make changes to the core configuration files is that you are not actually modifying the core configuration files.&amp;nbsp; You are instead making the modifications through a separate configuration file.&amp;nbsp; This means that when you come to upgrading Community Server, the changes you&amp;rsquo;ve made won&amp;rsquo;t be destroyed if the upgrade comes with new&amp;nbsp; versions of the core configuration files.&lt;/p&gt;
&lt;h3 id="the_override_file"&gt;The Override File&lt;/h3&gt;
&lt;p&gt;An override file is just another xml file.&amp;nbsp; The basic structure of an override file goes as follows&lt;/p&gt;
&lt;pre&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;&amp;gt;
&amp;lt;Overrides&amp;gt;
&amp;nbsp; &amp;lt;!-- Overrides go here --&amp;gt;
&amp;lt;/Overrides&amp;gt;&lt;/pre&gt;
&lt;p&gt;The override file should go into the root of your website &amp;ndash; i.e. the same location as the existing communityserver.config file. If you are overriding siteurls.config, it should be called siteurls_override.config.&amp;nbsp; Similar with communityserver.config you&amp;rsquo;d name the file communityserver_override.config.&lt;/p&gt;
&lt;h3 id="overrides"&gt;Overrides&lt;/h3&gt;
&lt;p&gt;An override file contains a collection of overrides.&amp;nbsp; Each override must have two attributes specified on it &amp;ndash; xpath and mode.&lt;/p&gt;
&lt;p&gt;The xpath attribute is the XPath to the node (or attribute) of the configuration file you want to manipulate with the override.&amp;nbsp; A description of XPath goes beyond the scope of this article, but very briefly the XPath is a path to specific nodes in the core configuration file.&amp;nbsp; You will see some example XPaths throughout this article, but for more details on XPath I suggest you have a look at the &lt;a href="http://www.w3schools.com/xpath/default.asp"&gt;W3School&amp;rsquo;s XPath tutorial&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;There are five different modes overrides can use&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Remove &amp;ndash;&lt;/strong&gt; Deletes a node or attribute&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Update &amp;ndash;&lt;/strong&gt; Used to change an entire xml node&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Add &amp;ndash;&lt;/strong&gt; Adds a node (or nodes) either before, after or within the specified node&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Change &amp;ndash;&lt;/strong&gt; Used to change the value of an attribute&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;New &amp;ndash;&lt;/strong&gt; Used to create a new attribute with the specified value&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="remove"&gt;Remove&lt;/h4&gt;
&lt;p&gt;The remove option can be used to remove a whole node or a single attribute from the configuration file.&amp;nbsp; For example, you may decide you don&amp;rsquo;t want to allow your users to specify css classes for the content they generated.&amp;nbsp; To do this you could use the following override to remove class from the list of allowed global attributes.&lt;/p&gt;
&lt;pre&gt;&amp;lt;Override xpath=&amp;quot;/CommunityServer/MarkUp/globalAttributes/class&amp;quot; mode=&amp;quot;remove&amp;quot; /&amp;gt;&lt;/pre&gt;
&lt;p&gt;Similarly you could decide that you don&amp;rsquo;t want users to be able to specify the colour used with font tags.&amp;nbsp; To remove a specific attribute you must specify the name of the attribute to remove&lt;/p&gt;
&lt;pre&gt;&amp;lt;Override xpath=&amp;quot;/CommunityServer/MarkUp/html/font&amp;quot; mode=&amp;quot;remove&amp;quot; name=&amp;quot;color&amp;quot; /&amp;gt;&lt;/pre&gt;
&lt;p&gt;If you used the above two overrides in a communityserver_override.config, here is what the configuration file looks like to Community Server before and after the overrides are applied.&amp;nbsp; (N.B. the before is not a complete snippet from the communityserver.config, any markup irrelevant to showing the changes these overrides make has been removed)&lt;/p&gt;
&lt;table cellpadding="2" cellspacing="0" border="0" style="width:100%;"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width="283" valign="top"&gt;&lt;strong&gt;Before&lt;/strong&gt;&lt;/td&gt;
&lt;td width="245" valign="top"&gt;&lt;strong&gt;After&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="283" valign="top"&gt;
&lt;p&gt;&amp;lt;MarkUp&amp;gt; &lt;br /&gt;&amp;nbsp; &amp;lt;globalAttributes&amp;gt; &lt;br /&gt;&lt;strong&gt;&lt;span style="color:#ff0000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;class enable=&amp;quot;true&amp;quot; /&amp;gt;&lt;/span&gt; &lt;br /&gt;&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!-- Snip --&amp;gt; &lt;br /&gt;&amp;nbsp; &amp;lt;/globalAttributes&amp;gt; &lt;br /&gt;&amp;nbsp; &amp;lt;html&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!-- Snip &amp;ndash;&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;font &lt;span style="color:#ff0000;"&gt;&lt;strong&gt;color=&amp;quot;true&amp;quot;&lt;/strong&gt;&lt;/span&gt; face=&amp;quot;true&amp;quot; size=&amp;quot;true&amp;rdquo; /&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!-- Snip --&amp;gt; &lt;br /&gt;&amp;nbsp; &amp;lt;/html&amp;gt; &lt;br /&gt;&amp;lt;/MarkUp&amp;gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="245" valign="top"&gt;
&lt;p&gt;&amp;lt;MarkUp&amp;gt; &lt;br /&gt;&amp;nbsp; &amp;lt;globalAttributes&amp;gt;&amp;nbsp;&amp;nbsp;&lt;strong&gt;&lt;span style="color:#ff0000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!-- Snip --&amp;gt; &lt;br /&gt;&amp;nbsp; &amp;lt;/globalAttributes&amp;gt; &lt;br /&gt;&amp;nbsp; &amp;lt;html&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!-- Snip &amp;ndash;&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;font&amp;nbsp; face=&amp;quot;true&amp;quot; size=&amp;quot;true&amp;rdquo; /&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!-- Snip --&amp;gt; &lt;br /&gt;&amp;nbsp; &amp;lt;/html&amp;gt; &lt;br /&gt;&amp;lt;/MarkUp&amp;gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4 id="update"&gt;Update&lt;/h4&gt;
&lt;p&gt;The update mode allows you to totally replace a node in the original configuration file.&amp;nbsp; This is particularly useful if you&amp;rsquo;re making so many changes to the original node, that it&amp;rsquo;s just easier to replace the whole node.&amp;nbsp; For example say you wanted to allow users to only use an very small subset of html when posting (say just bold, italic, paragraphs and line breaks).&amp;nbsp; You could use the following override.&lt;/p&gt;
&lt;pre&gt;&amp;lt;Override xpath=&amp;quot;/CommunityServer/MarkUp/html&amp;quot; mode=&amp;quot;update&amp;quot;&amp;gt;&lt;br /&gt; &amp;lt;html&amp;gt;&lt;br /&gt; &amp;lt;strong /&amp;gt;&lt;br /&gt; &amp;lt;em /&amp;gt;&lt;br /&gt; &amp;lt;p /&amp;gt;&lt;br /&gt; &amp;lt;br /&amp;gt;&lt;br /&gt; &amp;lt;/html&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/Override&amp;gt;&lt;/pre&gt;
&lt;table cellpadding="2" cellspacing="0" border="0" style="width:100%;"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width="50%" valign="top"&gt;&lt;strong&gt;Before&lt;/strong&gt;&lt;/td&gt;
&lt;td width="50%" valign="top"&gt;&lt;strong&gt;After&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="50%" valign="top"&gt;
&lt;p&gt;&amp;lt;MarkUp&amp;gt; &lt;br /&gt;&lt;span style="color:#ff0000;"&gt;&amp;nbsp;&lt;strong&gt; &amp;lt;html&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;a charset=&amp;quot;true&amp;quot; href=&amp;quot;true&amp;quot; hreflang=&amp;quot;true&amp;quot; name=&amp;quot;true&amp;quot; rel=&amp;quot;true&amp;quot; rev=&amp;quot;true&amp;quot; target=&amp;quot;true&amp;quot; type=&amp;quot;true&amp;quot; /&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;abbr /&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;acronym /&amp;gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!-- Snip --&amp;gt; &lt;br /&gt;&amp;nbsp; &amp;lt;/html&amp;gt; &lt;/strong&gt;&lt;br /&gt;&lt;/span&gt;&amp;lt;/MarkUp&amp;gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="50%" valign="top"&gt;
&lt;p&gt;&amp;lt;MarkUp&amp;gt; &lt;br /&gt;&amp;nbsp;&lt;/p&gt;
&lt;span style="color:#008000;"&gt;&lt;strong&gt;&amp;nbsp; &amp;lt;html&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;strong /&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;em /&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;p /&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;br /&amp;gt; &lt;br /&gt;&amp;nbsp; &amp;lt;/html&amp;gt;&lt;/strong&gt;&lt;/span&gt;
&lt;p&gt;&amp;lt;/MarkUp&amp;gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4 id="add"&gt;Add&lt;/h4&gt;
&lt;p&gt;The add mode allows you to add additional nodes into the original configuration file.&amp;nbsp; With add overrides, you can specify a where attribute to specify where the overrides should be added.&amp;nbsp; The following values can be used for the where attributes.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;before&lt;/strong&gt; &amp;ndash; This adds the nodes within the override before the node specified in the XPath&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;after&lt;/strong&gt;&amp;ndash; This adds the nodes within the override after the node specified in the XPath&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;start&lt;/strong&gt; &amp;ndash; adds the nodes within the override at the beginning of the node specified in the XPath&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;end&lt;/strong&gt; &amp;ndash; adds the nodes within the override at the end of the node specified in the XPath&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If no value is specified for where, the start behaviour will be used.&lt;/p&gt;
&lt;p&gt;To better illustrate the difference between what different wheres do, take the following overrides&lt;/p&gt;
&lt;pre&gt;&amp;lt;Override xpath=&amp;quot;/CommunityServer/MarkUp/html/&amp;quot; mode=&amp;quot;add&amp;quot; where=&amp;quot;before&amp;quot; &amp;gt;
&amp;nbsp; &amp;lt;Before /&amp;gt;
&amp;lt;/Override&amp;gt;
&amp;lt;Override xpath=&amp;quot;/CommunityServer/MarkUp/html/&amp;quot; mode=&amp;quot;add&amp;quot; where=&amp;quot;after&amp;quot; &amp;gt;
&amp;nbsp; &amp;lt;After /&amp;gt;
&amp;lt;/Override&amp;gt;
&amp;lt;Override xpath=&amp;quot;/CommunityServer/MarkUp/html/&amp;quot; mode=&amp;quot;add&amp;quot; where=&amp;quot;start&amp;quot; &amp;gt;
&amp;nbsp; &amp;lt;Start /&amp;gt;
&amp;lt;/Override&amp;gt;
&amp;lt;Override xpath=&amp;quot;/CommunityServer/MarkUp/html/&amp;quot; mode=&amp;quot;add&amp;quot; where=&amp;quot;end&amp;quot; &amp;gt;
&amp;nbsp; &amp;lt;End /&amp;gt;
&amp;lt;/Override&amp;gt;
&amp;lt;Override xpath=&amp;quot;/CommunityServer/MarkUp/html/&amp;quot; mode=&amp;quot;add&amp;quot; where=&amp;quot;&amp;quot; &amp;gt;
&amp;nbsp; &amp;lt;Unspecified /&amp;gt;
&amp;lt;/Override&amp;gt;
&lt;/pre&gt;
&lt;table cellpadding="2" cellspacing="0" border="0" style="width:100%;"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width="50%" valign="top"&gt;&lt;strong&gt;Before&lt;/strong&gt;&lt;/td&gt;
&lt;td width="50%" valign="top"&gt;&lt;strong&gt;After&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="50%" valign="top"&gt;
&lt;p&gt;&amp;lt;MarkUp&amp;gt; &lt;br /&gt;&amp;nbsp; &amp;lt;Html&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!-- Snip --&amp;gt; &lt;br /&gt;&amp;nbsp; &amp;lt;/Html&amp;gt; &lt;br /&gt;&amp;lt;/MarkUp&amp;gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="50%" valign="top"&gt;
&lt;p&gt;&amp;lt;MarkUp&amp;gt; &lt;br /&gt;&lt;strong&gt;&lt;span style="color:#008000;"&gt;&amp;nbsp; &amp;lt;Before /&amp;gt;&lt;/span&gt; &lt;br /&gt;&lt;/strong&gt;&amp;nbsp; &amp;lt;Html&amp;gt; &lt;br /&gt;&lt;span style="color:#008000;"&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Unspecified /&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Start /&amp;gt;&lt;/strong&gt;&lt;/span&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!-- Snip --&amp;gt; &lt;br /&gt;&lt;span style="color:#008000;"&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;End /&amp;gt;&lt;/strong&gt;&lt;/span&gt; &lt;br /&gt;&amp;nbsp; &amp;lt;/Html&amp;gt; &lt;br /&gt;&lt;span style="color:#008000;"&gt;&amp;nbsp; &amp;lt;After /&amp;gt;&lt;/span&gt; &lt;br /&gt;&amp;lt;/MarkUp&amp;gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4 id="change"&gt;Change&lt;/h4&gt;
&lt;p&gt;The change mode allows you to change the value of a specific attribute on an xml node.&amp;nbsp; When using the change mode, you must specify two additional attributes on the override&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;name &lt;/strong&gt;&amp;ndash; the name of the attribute you want to change&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;value&lt;/strong&gt; &amp;ndash; the new value you want the attribute to have&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For example, the following override can be used to disallow the colour attribute on the being used with the font html element in user generated content.&lt;/p&gt;
&lt;pre&gt;&amp;lt;Override xpath=&amp;quot;/CommunityServer/MarkUp/html/font&amp;quot; mode=&amp;quot;change&amp;quot; name=&amp;quot;color&amp;quot; value=&amp;quot;false&amp;quot; /&amp;gt;&lt;/pre&gt;
&lt;table cellpadding="2" cellspacing="0" border="0" style="width:100%;"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width="50%" valign="top"&gt;&lt;strong&gt;Before&lt;/strong&gt;&lt;/td&gt;
&lt;td width="50%" valign="top"&gt;&lt;strong&gt;After&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="50%" valign="top"&gt;
&lt;p&gt;&amp;lt;MarkUp&amp;gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;lt;html&amp;gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!-- Snip --&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;font color=&lt;span style="color:#ff0000;"&gt;&amp;quot;&lt;strong&gt;true&lt;/strong&gt;&amp;quot;&lt;/span&gt; face=&amp;quot;true&amp;quot; size=&amp;quot;true&amp;rdquo; /&amp;gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!-- Snip --&amp;gt; &lt;br /&gt;&amp;nbsp; &amp;lt;/html&amp;gt; &lt;br /&gt;&amp;lt;/MarkUp&amp;gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="50%" valign="top"&gt;
&lt;p&gt;&amp;lt;MarkUp&amp;gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;lt;html&amp;gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!-- Snip --&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;font color=&lt;span style="color:#008000;"&gt;&amp;quot;&lt;strong&gt;false&lt;/strong&gt;&amp;quot;&lt;/span&gt; face=&amp;quot;true&amp;quot; size=&amp;quot;true&amp;rdquo; /&amp;gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!-- Snip --&amp;gt; &lt;br /&gt;&amp;nbsp; &amp;lt;/html&amp;gt; &lt;br /&gt;&amp;lt;/MarkUp&amp;gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4 id="new"&gt;New&lt;/h4&gt;
&lt;p&gt;The new mode allows you to add a new attribute to an xml node.&amp;nbsp; Like the change mode, you must specify two additional attributes on your override&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;name &lt;/strong&gt;&amp;ndash; the name of the attribute you want to add&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;value&lt;/strong&gt; &amp;ndash; the value you want the attribute to have&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For example, you may want to allow the type attribute to be specified on ordered lists.&amp;nbsp; To do this you could use the following override&lt;/p&gt;
&lt;pre&gt;&amp;lt;Override xpath=&amp;quot;/CommunityServer/MarkUp/html/ol&amp;quot; mode=&amp;quot;new&amp;quot; name=&amp;quot;type&amp;quot; value=&amp;quot;true&amp;quot; /&amp;gt;&lt;/pre&gt;
&lt;table cellpadding="2" cellspacing="0" border="0" style="width:100%;"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width="50%" valign="top"&gt;&lt;strong&gt;Before&lt;/strong&gt;&lt;/td&gt;
&lt;td width="50%" valign="top"&gt;&lt;strong&gt;After&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="50%" valign="top"&gt;
&lt;p&gt;&amp;lt;MarkUp&amp;gt; &lt;br /&gt;&amp;nbsp; &amp;lt;html&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!-- Snip --&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;ol /&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!-- Snip --&amp;gt; &lt;br /&gt;&amp;nbsp; &amp;lt;/html&amp;gt; &lt;br /&gt;&amp;lt;/MarkUp&amp;gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="50%" valign="top"&gt;
&lt;p&gt;&amp;lt;MarkUp&amp;gt; &lt;br /&gt;&amp;nbsp; &amp;lt;html&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!-- Snip --&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;ol &lt;span style="color:#008000;"&gt;&lt;strong&gt;type=&amp;quot;true&amp;quot;&lt;/strong&gt;&lt;/span&gt; /&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!-- Snip --&amp;gt; &lt;br /&gt;&amp;nbsp; &amp;lt;/html&amp;gt; &lt;br /&gt;&amp;lt;/MarkUp&amp;gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;That&amp;rsquo;s override files in a nutshell.&amp;nbsp; For further details and some more examples you can have a look at Chapter 4 of the &lt;a href="http://www.amazon.co.uk/Professional-Community-Server-Themes-Programmer/dp/0470182083/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1230574357&amp;amp;sr=8-1"&gt;Professional Community Server Themes book&lt;/a&gt;.&amp;nbsp; If you have any further questions, either post them to the &lt;a href="http://dev.communityserver.com/forums/"&gt;Community Server Forums&lt;/a&gt;, or in the comments section below.&lt;/p&gt;&lt;img src="http://alexcrome.co.uk/aggbug.aspx?PostID=99" width="1" height="1"&gt;</description></item><item><title>Community Server Question and Answer Functionality</title><link>http://alexcrome.co.uk/community_server/b/community_server/archive/2008/12/23/question-and-answer.aspx</link><pubDate>Tue, 23 Dec 2008 20:05:00 GMT</pubDate><guid isPermaLink="false">14ef0438-becd-400b-84a7-36022fc26c96:102</guid><dc:creator>Alex</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;The Question and Answer functionality in &lt;a href="http://communityserver.com/"&gt;Community Server&lt;/a&gt; (introduced in Community Server 2008.5)&amp;nbsp; is very useful in support scenarios where users come to your community posting questions because it provides a means of tracking whether questions have been answered or not.&lt;/p&gt;
&lt;p&gt;Below is a screenshot of a sample Question and Answer thread.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://askcrome.co.uk/files/media/image/WindowsLiveWriter/CommunityServerQuestionandAnswerFunction_10A3B/clip_image002_2.jpg"&gt;&lt;img height="244" width="206" src="http://askcrome.co.uk/files/media/image/WindowsLiveWriter/CommunityServerQuestionandAnswerFunction_10A3B/clip_image002_thumb.jpg" alt="clip_image002" border="0" title="clip_image002" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3 id="understanding_qampa" &gt;Understanding Q&amp;amp;A&lt;/h3&gt;
&lt;p&gt;A Question and Answer thread contains four types of posts &amp;ndash; the original question, normal responses, suggested answers and verified answers.&lt;/p&gt;
&lt;h4 id="the_original_question" &gt;The original Question&lt;/h4&gt;
&lt;p&gt;&lt;a href="http://askcrome.co.uk/files/media/image/WindowsLiveWriter/CommunityServerQuestionandAnswerFunction_10A3B/clip_image004_2.jpg"&gt;&lt;img height="61" width="244" src="http://askcrome.co.uk/files/media/image/WindowsLiveWriter/CommunityServerQuestionandAnswerFunction_10A3B/clip_image004_thumb.jpg" alt="clip_image004" border="0" title="clip_image004" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The original question appears at the top of every page in the thread. This helps users who visit a page within a thread from an external link (e.g. a search engine) to know what the original problem in the thread was. It also reminds viewers of the original question as threads get over a page in length. &lt;/p&gt;
&lt;h4 id="normal_responses" &gt;Normal Responses&lt;/h4&gt;
&lt;p&gt;&lt;a href="http://askcrome.co.uk/files/media/image/WindowsLiveWriter/CommunityServerQuestionandAnswerFunction_10A3B/clip_image006_2.jpg"&gt;&lt;img height="41" width="244" src="http://askcrome.co.uk/files/media/image/WindowsLiveWriter/CommunityServerQuestionandAnswerFunction_10A3B/clip_image006_thumb.jpg" alt="clip_image006" border="0" title="clip_image006" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Some responses to the question will have no special status. These may be posts trying to diagnose what a problem is before providing a solution, or posts which had been suggested as answers but did not solve the poster&amp;rsquo;s problem.&lt;/p&gt;
&lt;h4 id="suggested_answer" &gt;Suggested Answer&lt;/h4&gt;
&lt;p&gt;&lt;a href="http://askcrome.co.uk/files/media/image/WindowsLiveWriter/CommunityServerQuestionandAnswerFunction_10A3B/clip_image008_2.jpg"&gt;&lt;img height="49" width="244" src="http://askcrome.co.uk/files/media/image/WindowsLiveWriter/CommunityServerQuestionandAnswerFunction_10A3B/clip_image008_thumb.jpg" alt="clip_image008" border="0" title="clip_image008" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A suggested answer is a response which a member thinks will solve the original poster&amp;rsquo;s problem. These answers can then be verified or rejected. Suggested Answers are highlighted in yellow so they stand out.&lt;/p&gt;
&lt;h4 id="verified_answer" &gt;Verified Answer&lt;/h4&gt;
&lt;p&gt;&lt;a href="http://askcrome.co.uk/files/media/image/WindowsLiveWriter/CommunityServerQuestionandAnswerFunction_10A3B/clip_image010_2.jpg"&gt;&lt;img height="73" width="244" src="http://askcrome.co.uk/files/media/image/WindowsLiveWriter/CommunityServerQuestionandAnswerFunction_10A3B/clip_image010_thumb.jpg" alt="clip_image010" border="0" title="clip_image010" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://askcrome.co.uk/files/media/image/WindowsLiveWriter/CommunityServerQuestionandAnswerFunction_10A3B/clip_image012_2.jpg"&gt;&lt;img height="52" width="244" src="http://askcrome.co.uk/files/media/image/WindowsLiveWriter/CommunityServerQuestionandAnswerFunction_10A3B/clip_image012_thumb.jpg" alt="clip_image012" border="0" title="clip_image012" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Verified Answers appear in two separate locations within a Thread.&amp;nbsp; As well as appearing where you&amp;rsquo;d expect them, Verified Answers appear on each and every page (just under the Original Question). This helps users who follow an external link to your community (e.g. from a search engine) quickly see what the solution to the problem is without having to trawl through lots of posts to work out the solution.&amp;nbsp; Verified answers are highlighted in Green to make them stand out from the other responses in a thread. &lt;/p&gt;
&lt;p&gt;Verified Answers can be rejected as answers if the answer was verified by accident, or the solution only worked temporarily. This can be done by the poster of the original question, or by users with the Mark as Answer permission.&lt;/p&gt;
&lt;p&gt;A thread can have more than one verified answers. This is useful in scenarios where two very different solutions have been posted to a problem which both work. Both authors will receive points as a reward for their suggestion, and any other person who comes across the thread can see both solutions and decide on which is most appropriate for their needs.&lt;/p&gt;
&lt;h3 id="using_qampa" &gt;Using Q&amp;amp;A&lt;/h3&gt;
&lt;h4 id="starting_a_qampa_thread" &gt;Starting a Q&amp;amp;A thread&lt;/h4&gt;
&lt;p&gt;A question and answer thread is started in exactly the same way as a normal thread.&amp;nbsp; Just go to the forum you want to post in and press the &amp;ldquo;Create New Post&amp;rdquo; button.&amp;nbsp; You will only see a difference in the experience between creating a new discussion and a new question if the the forum you&amp;rsquo;re posting to allows both Discussion and Question threads.&amp;nbsp; In this case you&amp;rsquo;ll be asked to specify if your post is a Discussion or a Question.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://askcrome.co.uk/files/media/image/WindowsLiveWriter/CommunityServerQuestionandAnswerFunction_10A3B/image_10.png"&gt;&lt;img height="18" width="244" src="http://askcrome.co.uk/files/media/image/WindowsLiveWriter/CommunityServerQuestionandAnswerFunction_10A3B/image_thumb_3.png" alt="image" border="0" title="image" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;If only Question threads are enabled, a user&amp;rsquo;s question will be automatically marked as a question when they post.&lt;/p&gt;
&lt;h4 id="suggesting_an_answer" &gt;Suggesting an Answer&lt;/h4&gt;
&lt;p&gt;There are two ways an answer can be suggested.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Respond to a question by pressing the &lt;a href="http://askcrome.co.uk/files/media/image/WindowsLiveWriter/CommunityServerQuestionandAnswerFunction_10A3B/image_16.png"&gt;&lt;img height="32" width="152" src="http://askcrome.co.uk/files/media/image/WindowsLiveWriter/CommunityServerQuestionandAnswerFunction_10A3B/image_thumb_6.png" alt="image" border="0" title="image" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;margin:0px;border-right-width:0px;" /&gt;&lt;/a&gt;&amp;nbsp; next to the question at the top of the page. &lt;/li&gt;
&lt;li&gt;Clicking the &lt;a href="http://askcrome.co.uk/files/media/image/WindowsLiveWriter/CommunityServerQuestionandAnswerFunction_10A3B/image_18.png"&gt;&lt;img height="19" width="127" src="http://askcrome.co.uk/files/media/image/WindowsLiveWriter/CommunityServerQuestionandAnswerFunction_10A3B/image_thumb_7.png" alt="image" border="0" title="image" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;margin:0px;border-right-width:0px;" /&gt;&lt;/a&gt; button on an existing response to a question (This can be done by anyone apart from the user who posted the question). &lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id="verifying_an_answer" &gt;Verifying an Answer&lt;/h4&gt;
&lt;p&gt;To verify a suggested answer, click the &lt;a href="http://askcrome.co.uk/files/media/image/WindowsLiveWriter/CommunityServerQuestionandAnswerFunction_10A3B/image_14.png"&gt;&lt;img height="19" width="98" src="http://askcrome.co.uk/files/media/image/WindowsLiveWriter/CommunityServerQuestionandAnswerFunction_10A3B/image_thumb_5.png" alt="Verify Answer" border="0" title="Verify Answer" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;margin:0px;border-right-width:0px;" /&gt;&lt;/a&gt; button.&amp;nbsp; This can be done by both the original poster, and users with the &amp;ldquo;Mark as Answer&amp;rdquo; permission.&amp;nbsp; Normally this is used to verify a suggested answer, but it can also be used if a response is posted which solves the problem but was not marked as a suggested answer.&lt;/p&gt;
&lt;p&gt;When an answer is verified, the author of the response will receive points as a reward for helping the original poster.&lt;/p&gt;
&lt;h4 id="rejecting_an_answer" &gt;Rejecting an Answer&lt;/h4&gt;
&lt;p&gt;To reject a verified or suggested answer, press the &lt;a href="http://askcrome.co.uk/files/media/image/WindowsLiveWriter/CommunityServerQuestionandAnswerFunction_10A3B/image_12.png"&gt;&lt;img height="19" width="130" src="http://askcrome.co.uk/files/media/image/WindowsLiveWriter/CommunityServerQuestionandAnswerFunction_10A3B/image_thumb_4.png" alt="Mark as Not Answer" border="0" title="Mark as Not Answer" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;margin:0px;border-right-width:0px;" /&gt;&lt;/a&gt; button&amp;nbsp; to reject the response and demote it to a normal response. Any user who has the &amp;ldquo;Mark as Answer&amp;rdquo;&amp;nbsp; permission, and the original poster will also be able to Reject a suggested answer.&lt;/p&gt;
&lt;p&gt;When an answer is rejected, the author of the response will lose any points they received for suggesting a validated answer..&lt;/p&gt;
&lt;h3 id="monitoring_questions" &gt;Monitoring Questions&lt;/h3&gt;
&lt;p&gt;When viewing threads in a forum, you can see at a glance which posts have been answered, and which have not.&amp;nbsp; Posts which have been answered have a green tick (&lt;img src="http://localhost/cs/Themes/hawaii/images/status_Answered.gif" alt="Verified Answer" border="0" style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;margin:0px;border-right-width:0px;" /&gt;) next to the thread name, posts with suggested answers have a yellow tick (&lt;img src="http://localhost/cs/Themes/hawaii/images/status_SuggestedAnswer.gif" alt="Suggested Answer" border="0" style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;margin:0px;border-right-width:0px;" /&gt;) whilst questions which haven&amp;rsquo;t been answered have a red question mark (&lt;img src="http://localhost/cs/Themes/hawaii/images/status_NotAnswered.gif" alt="Unanswered" border="0" style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;margin:0px;border-right-width:0px;" /&gt;).&amp;nbsp; Discussion threads have no icon next to them.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://askcrome.co.uk/files/media/image/WindowsLiveWriter/CommunityServerQuestionandAnswerFunction_10A3B/image_8.png"&gt;&lt;img height="109" width="244" src="http://askcrome.co.uk/files/media/image/WindowsLiveWriter/CommunityServerQuestionandAnswerFunction_10A3B/image_thumb_2.png" alt="image" border="0" title="image" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The &lt;a href="http://dev.communityserver.com/forums/TopicsNotAnswered.aspx"&gt;Unanswered posts&lt;/a&gt; list has also been updated to include questions without answers, or with suggested answers, in addition to non question and answer posts which have not received any replies.&lt;/p&gt;
&lt;h4 id="reporting_with_harvest" &gt;Reporting with Harvest&lt;/h4&gt;
&lt;p&gt;Whilst this goes slightly beyond the scope of this article, I thought it was worth pointing out that &lt;a href="http://communityserver.com/products/harvest/"&gt;Harvest Reporting Server&lt;/a&gt; provides a number of reports around Question and Answers. &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;a href="http://reports.communityserver.org/DEMO/Report.aspx/2/ActivityForumsAnswersReport"&gt;&lt;img height="190" width="244" src="http://askcrome.co.uk/files/media/image/WindowsLiveWriter/CommunityServerQuestionandAnswerFunction_10A3B/image_6.png" alt="image" border="0" title="image" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" /&gt;&lt;/a&gt;&lt;a href="http://reports.communityserver.org/DEMO/Report.aspx/2/ForumAnswersReport"&gt;&lt;img height="190" width="244" src="http://askcrome.co.uk/files/media/image/WindowsLiveWriter/CommunityServerQuestionandAnswerFunction_10A3B/image_3.png" alt="image" border="0" title="image" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;(If you click on either of the screenshots above you&amp;rsquo;ll be taken to the relevant pages in the Harvest demo to have a look at the Questions and Answer reports Harvest provides..)&lt;/p&gt;
&lt;h3 id="managing_qampa" &gt;Managing Q&amp;amp;A&lt;/h3&gt;
&lt;p&gt;The question and answer functionality is not appropriate for all scenarios so it&amp;rsquo;s possible to turn this functionality on or off both forum wide and on a per forum basis.&lt;/p&gt;
&lt;h4 id="globally_enable__disable_qampa" &gt;Globally Enable / Disable Q&amp;amp;A&lt;/h4&gt;
&lt;p&gt;To globally enable or disable the question and answer functionality , go to Control Panel, open Forum Administration and click on Global Forum Settings (either link from the Forum Administration homepage, or under the Configuration section). Under the General tab find the &amp;ldquo;Enable Thread Status Tracking&amp;rdquo; and change this to Yes or No as required.&lt;/p&gt;
&lt;h4 id="enabling__disabling_qampa_per_forum" &gt;Enabling / Disabling Q&amp;amp;A per forum&lt;/h4&gt;
&lt;p&gt;&lt;em&gt;(N.B. the following options may not appear if Thread Status Tracking is globally disabled. To check if this is enabled, follow the instructions in the &amp;ldquo;Globally Enabled / Disable Q&amp;amp;A&amp;rdquo; section above.)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;To enable question and answer on a per forum basis, open up Forum Administration section of Control Panel then go to the Forums page under Forums and Groups. Find the Forum you want to change and press Edit. You can now chose whether question and answer is enabled under the &amp;ldquo;Allowed Thread Types&amp;rdquo; option.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://askcrome.co.uk/files/media/image/WindowsLiveWriter/CommunityServerQuestionandAnswerFunction_10A3B/clip_image014_2.jpg"&gt;&lt;img height="57" width="487" src="http://askcrome.co.uk/files/media/image/WindowsLiveWriter/CommunityServerQuestionandAnswerFunction_10A3B/clip_image014_thumb.jpg" alt="clip_image014" border="0" title="clip_image014" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;If you want to force all threads to be Questions, you can untick the &amp;ldquo;Discussion&amp;rdquo; option.&lt;/p&gt;
&lt;p&gt;And that was a whistle wind tour of the Community Server Question and Answer functionality.&amp;nbsp; If you have any questions about some of the features you can add a comment below, or create a post at &lt;a href="http://dev.communityserver.com/forums/"&gt;http://dev.communityserver.com/forums/&lt;/a&gt; .&lt;/p&gt;&lt;img src="http://alexcrome.co.uk/aggbug.aspx?PostID=102" width="1" height="1"&gt;</description></item><item><title>Community Server Articles</title><link>http://alexcrome.co.uk/community_server/b/community_server/archive/2008/12/22/articles.aspx</link><pubDate>Mon, 22 Dec 2008 20:45:00 GMT</pubDate><guid isPermaLink="false">14ef0438-becd-400b-84a7-36022fc26c96:103</guid><dc:creator>Alex</dc:creator><slash:comments>2</slash:comments><description>&lt;p&gt;Articles are a little known feature of Community Server which adds some very simple content management facilities to your site. When I say basic, I do mean basic. These articles don&amp;rsquo;t appear in search, nor are they automatically linked to by any part of Community Server (apart from in the Control Panel). To link to articles you need to add the links yourself &amp;ndash; this could be from blog, forum posts etc. Or by &lt;a href="http://docswiki.communityserver.com/wikis/cs20085docs/customizing-the-navigation-bar.aspx"&gt;adding a link to the navigation&lt;/a&gt;. However they do make adding and updating additional content pages on your website, in keeping with the look and feel of your community, very easy. Examples of pages that you might add to your community using Articles are About Us, Terms of Service, Community Rules.&lt;/p&gt;

&lt;h3 id="creating_articles" &gt;Creating Articles&lt;/h3&gt;
&lt;p&gt;To create an article you must be a System Administrator. Open up Control Panel. In the &lt;i&gt;System Administration&lt;/i&gt; box, select &lt;i&gt;Site Administration&lt;/i&gt;. Under the &lt;i&gt;Site Content&lt;/i&gt; tab, select &lt;i&gt;Manage / Create Articles&lt;/i&gt;. To create a new article, press the Create new article button.&lt;/p&gt;
&lt;p&gt;When the Create Article page opens you have three fields to fill in.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Name&lt;/b&gt; &amp;ndash; This is the name you&amp;rsquo;ll see when viewing articles in the Control Panel, and will also be used as the url for the article. The article url will be /content/ARTICLENAME.aspx. Because of this any spaces in the article name will be removed.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Headline&lt;/b&gt; &amp;ndash; The Headline is the title users appear&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Body &lt;/b&gt;&amp;ndash; the main body of your article goes in the HTML Editor&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="http://askcrome.co.uk/files/media/image/WindowsLiveWriter/Articles_1179F/image_4.png"&gt;&lt;img height="178" width="244" src="http://askcrome.co.uk/files/media/image/WindowsLiveWriter/Articles_1179F/image_thumb_1.png" alt="image" border="0" title="image" style="border-right:0px;border-top:0px;display:inline;border-left:0px;border-bottom:0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;When you&amp;rsquo;re ready, press &amp;ldquo;save changes&amp;rdquo; to save your article press save to create your article and you&amp;rsquo;ll be taken to the page containing your article.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://askcrome.co.uk/files/media/image/WindowsLiveWriter/Articles_1179F/image_6.png"&gt;&lt;img height="161" width="244" src="http://askcrome.co.uk/files/media/image/WindowsLiveWriter/Articles_1179F/image_thumb_2.png" alt="image" border="0" title="image" style="border-right:0px;border-top:0px;display:inline;border-left:0px;border-bottom:0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;But hang on, this article doesn&amp;rsquo;t look how I want it to look. Why doesn&amp;rsquo;t it look like the rest of the site and have the content in a white box with a border at the top. You can fix that by adding the appropriate HTML to your article to render the common content box &amp;ndash; see my article on &lt;a href="http://alexcrome.co.uk/blogs/community_server/customising-content-boxes.aspx"&gt;common content boxes&lt;/a&gt; for more details on that. CS not rendering the common content box out of the box is actually quite useful as it means you can chose on the style of the common content box uses, add multiple common content boxes to one article or break free and go with your own style.&lt;/p&gt;
&lt;h3 id="editing_articles" &gt;Editing Articles&lt;/h3&gt;
&lt;p&gt;There are two ways you can edit an article, but both require you to be a system administrator.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Open the article in your browser, and then press the Edit button in the breadcrumb area (just under the Navigation). &lt;br /&gt;&lt;a href="http://askcrome.co.uk/files/media/image/WindowsLiveWriter/Articles_1179F/image_8.png"&gt;&lt;img height="51" width="456" src="http://askcrome.co.uk/files/media/image/WindowsLiveWriter/Articles_1179F/image_thumb_3.png" alt="image" border="0" title="image" style="border-right:0px;border-top:0px;display:inline;border-left:0px;border-bottom:0px;" /&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Open up Control Panel. In the &lt;i&gt;System Administration&lt;/i&gt; box, select &lt;i&gt;Site Administration&lt;/i&gt;. Under the &lt;i&gt;Site Content&lt;/i&gt; tab, select &lt;i&gt;Manage / Create Articles&lt;/i&gt;. Find the article in the list you want to edit&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Once you&amp;rsquo;ve opened up the edit page for an article, you can edit the article in exactly the same way you did when creating a new article.&lt;/p&gt;
&lt;h3 id="deleting_articles" &gt;Deleting Articles&lt;/h3&gt;
&lt;p&gt;To delete an article, follow the steps above to edit an article, but instead of editing the article and saving it, press the &amp;lsquo;clear&amp;rsquo; button.&lt;/p&gt;&lt;img src="http://alexcrome.co.uk/aggbug.aspx?PostID=103" width="1" height="1"&gt;</description></item><item><title>Customising Content Boxes</title><link>http://alexcrome.co.uk/community_server/b/community_server/archive/2008/12/22/customising-content-boxes.aspx</link><pubDate>Mon, 22 Dec 2008 00:01:00 GMT</pubDate><guid isPermaLink="false">14ef0438-becd-400b-84a7-36022fc26c96:106</guid><dc:creator>Alex</dc:creator><slash:comments>2</slash:comments><description>&lt;p&gt;Common content boxes are used throughout the Hawaii theme. They are most visible in the Sidebars of Hawaii pages but they are also used in defining the main content of the page.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;There are four areas available in a Common Content Box, which may not all be present for a particular content box&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Title / Header&lt;/li&gt;
&lt;li&gt;Header Form&lt;/li&gt;
&lt;li&gt;Content&lt;/li&gt;
&lt;li&gt;Footer&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;What each region refers to in a Common Content Box should be obvious from the above image of a common content box.&lt;/p&gt;
&lt;p&gt;In HTML, a common content box is defined as follows&lt;/p&gt;
&lt;pre&gt;
&amp;lt;div class=&amp;quot;CommonContentBox&amp;quot;&amp;gt;
&amp;lt;h4 class=&amp;quot;CommonContentBoxHeader&amp;quot;&amp;gt;
TITLE
&amp;lt;/h4&amp;gt;
&amp;lt;div class=&amp;quot;CommonContentBoxHeaderForm&amp;quot;&amp;gt;
Header
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;CommonContentBoxContent&amp;quot;&amp;gt;
Content
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;CommonContentBoxFooter&amp;quot;&amp;gt;
Footer
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&lt;/pre&gt;
&lt;p&gt;N.B. the CommonContentBoxHeader doesn&amp;rsquo;t have to use an &amp;lt;h4 /&amp;gt; element, it can use h1, h2, ... h6, or a div (and possibly others).&lt;/p&gt;
&lt;h3&gt;The Look of a Common Content Box&lt;/h3&gt;
&lt;p&gt;There are three additional styles of Content Box you can use which you can get by including a secondary CSS Class with your Common Content Box.&lt;/p&gt;
&lt;p&gt;N.B. the look on your site may vary from those shown below as the colours of these content boxes can be configured in the Hawaii Theme Configuration.&lt;/p&gt;
&lt;h4&gt;Announcement&lt;/h4&gt;
&lt;pre&gt;
&amp;lt;div class=&amp;quot;CommonContentBox &lt;strong&gt;Highlighted&lt;/strong&gt;&amp;quot;&amp;gt; &lt;/pre&gt;
&lt;p&gt;&lt;a href="http://askcrome.co.uk/files/media/image/WindowsLiveWriter/CustomisingtheContentBox_10/clip_image004%5B6%5D.jpg"&gt;&lt;img title="clip_image004[6]" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="149" alt="clip_image004[6]" width="244" border="0" src="http://askcrome.co.uk/files/media/image/WindowsLiveWriter/CustomisingtheContentBox_10/clip_image004%5B6%5D_thumb.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;Highlighted&lt;/h4&gt;
&lt;pre&gt;
&amp;lt;div class=&amp;quot;CommonContentBox &lt;b&gt;Highlighted2&lt;/b&gt;&amp;quot;&amp;gt;&lt;/pre&gt;
&lt;p&gt;&lt;a href="http://askcrome.co.uk/files/media/image/WindowsLiveWriter/CustomisingtheContentBox_10/clip_image006%5B6%5D.jpg"&gt;&lt;img title="clip_image006[6]" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="147" alt="clip_image006[6]" width="244" border="0" src="http://askcrome.co.uk/files/media/image/WindowsLiveWriter/CustomisingtheContentBox_10/clip_image006%5B6%5D_thumb.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;Activity&lt;/h4&gt;
&lt;pre&gt;
&amp;lt;div class=&amp;quot;CommonContentBox &lt;b&gt;TitleHighlighted&lt;/b&gt;&amp;quot;&amp;gt; &lt;/pre&gt;
&lt;p&gt;&lt;a href="http://askcrome.co.uk/files/media/image/WindowsLiveWriter/CustomisingtheContentBox_10/clip_image008%5B6%5D.jpg"&gt;&lt;img title="clip_image008[6]" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="149" alt="clip_image008[6]" width="244" border="0" src="http://askcrome.co.uk/files/media/image/WindowsLiveWriter/CustomisingtheContentBox_10/clip_image008%5B6%5D_thumb.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Lists&lt;/h3&gt;
&lt;p&gt;To use a list within a Common Content box, you should add the following HTML to the Content of your Common Content Box&lt;/p&gt;
&lt;pre&gt;
&amp;lt;ul class=&amp;quot;CommonContentBoxList&amp;quot;&amp;gt; 
&amp;lt;li&amp;gt;First Item&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;Second Item&amp;lt;/li&amp;gt;
...
&amp;lt;li&amp;gt;Nth Item&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;&lt;/pre&gt;
&lt;p&gt;That will give you a list in keeping with common content box lists used elsewhere in the Hawaii theme.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://askcrome.co.uk/files/media/image/WindowsLiveWriter/CustomisingtheContentBox_10/clip_image010%5B6%5D.jpg"&gt;&lt;img title="clip_image010[6]" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="133" alt="clip_image010[6]" width="244" border="0" src="http://askcrome.co.uk/files/media/image/WindowsLiveWriter/CustomisingtheContentBox_10/clip_image010%5B6%5D_thumb.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://alexcrome.co.uk/aggbug.aspx?PostID=106" width="1" height="1"&gt;</description></item><item><title>New Site Theme</title><link>http://alexcrome.co.uk/community_server/b/community_server/archive/2008/12/21/new-site-theme.aspx</link><pubDate>Sun, 21 Dec 2008 22:50:02 GMT</pubDate><guid isPermaLink="false">14ef0438-becd-400b-84a7-36022fc26c96:186</guid><dc:creator>Alex</dc:creator><slash:comments>1</slash:comments><description>&lt;p&gt;I’ve decided I’m a little bored of the previous theme my site was using and so I’ve updated to a new theme.&amp;#160; I’m using a slight modification of the PointSpace – Blue theme converted to Graffiti by Rich Mercer (available at &lt;a title="http://richmercer.com/graffiti-themes" href="http://richmercer.com/graffiti-themes/"&gt;http://richmercer.com/graffiti-themes/&lt;/a&gt; ).&amp;#160; I shall be making some more modifications to the theme over the next few days and will post my updated version of the theme when I’m complete.&lt;/p&gt; &lt;p&gt;Anyway, I’m hoping the new theme brings new life to my blog.&lt;/p&gt;&lt;img src="http://alexcrome.co.uk/aggbug.aspx?PostID=186" width="1" height="1"&gt;</description></item><item><title>Resizing the Content Editor</title><link>http://alexcrome.co.uk/community_server/b/community_server/archive/2008/12/19/resizing-the-content-editor.aspx</link><pubDate>Fri, 19 Dec 2008 23:31:00 GMT</pubDate><guid isPermaLink="false">14ef0438-becd-400b-84a7-36022fc26c96:167</guid><dc:creator>Alex</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;It&amp;#39;s been a little quiet here recently so let&amp;#39;s put that right.&lt;/p&gt;
&lt;p&gt;Did you know that you could resize the content editor used when posting to Community Server?&amp;nbsp; To do so, just click the arrow like icon in the bottom right of the editor and drag it up or down to adjust the height of the editor&lt;/p&gt;
&lt;p&gt;This is very useful when you&amp;#39;re writing a long response and get bored of having to continually scroll up and down if you want to look back at something you wrote earlier in the post.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://test.alexcrome.co.uk/files/media/image/Resize%20Content%20Editor.jpg" border="0" style="max-width:550px;" alt="" /&gt;&lt;/p&gt;&lt;img src="http://alexcrome.co.uk/aggbug.aspx?PostID=167" width="1" height="1"&gt;</description></item><item><title>AlexCrome.CS 2008</title><link>http://alexcrome.co.uk/community_server/b/community_server/archive/2008/10/10/alexcrome-cs-2008.aspx</link><pubDate>Fri, 10 Oct 2008 22:47:00 GMT</pubDate><guid isPermaLink="false">14ef0438-becd-400b-84a7-36022fc26c96:170</guid><dc:creator>Alex</dc:creator><slash:comments>4</slash:comments><description>&lt;p&gt;Today I&amp;#39;m finally releasing the CS2008.5 version of my addon package.&amp;nbsp; Not all the addons from my previous package have survived but that&amp;#39;s no loss as they&amp;#39;re now baked into the core of CS2008.5.&lt;/p&gt;
&lt;p&gt;Included in this release are the folowing&amp;nbsp;addons: (If the name&amp;#39;s not a hyperlink, I haven&amp;#39;t documented it yet)&lt;/p&gt;
&lt;h3&gt;Addons&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://alexcrome.co.uk/alexcrome-cs-2008/documentation/using-the-manage-addons-page/"&gt;Configure Addons Control Panel Page&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://alexcrome.co.uk/alexcrome-cs-2008/documentation/sort-threads-by-group-forum-sort-order-query-implementation/"&gt;Improved Filtering method for displaying Active Topics&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://alexcrome.co.uk/alexcrome-cs-2008/documentation/referalpointsaddon/"&gt;Referal Points Addon&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://alexcrome.co.uk/alexcrome-cs-2008/documentation/mapped-path-file-system-file-storage-provider/"&gt;Mapped Path File System File Storage Provider&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;CSModules&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Mark Threads Read On User Create&lt;/li&gt;
&lt;li&gt;Notify Administrator On User Create&lt;/li&gt;
&lt;li&gt;&lt;a href="http://alexcrome.co.uk/alexcrome-cs-2008/documentation/refresh-cache-on-post-comment-csmodule/"&gt;Refresh Post Cache On Comment&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Search Engine Ping&lt;/li&gt;
&lt;li&gt;Set Anonymous Roles&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Controls&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://alexcrome.co.uk/alexcrome-cs-2008/documentation/quick-reply-form/"&gt;Quick Reply Form&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://alexcrome.co.uk/alexcrome-cs-2008/documentation/copy-wiki-page-to-blog-control/"&gt;CopyWikiPageToBlog Control &lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To download the package, please see the &lt;a href="http://alexcrome.co.uk/alexcrome-cs-2008/documentation/installing-alexcrome-cs-2008/"&gt;Installation Instructions&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://alexcrome.co.uk/aggbug.aspx?PostID=170" width="1" height="1"&gt;</description></item><item><title>AlexCrome.CS 2008 Is Here!</title><link>http://alexcrome.co.uk/community_server/b/community_server/archive/2008/10/10/alexcrome-cs-2008-is-here.aspx</link><pubDate>Fri, 10 Oct 2008 21:58:00 GMT</pubDate><guid isPermaLink="false">14ef0438-becd-400b-84a7-36022fc26c96:107</guid><dc:creator>Alex</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Finaly after working on it for months I feel ready to release this package.&amp;nbsp; I am still working on documenting this release so do be patient with me whilst I do that. Included in this release are (If it&amp;#39;s not a hyperlink, I haven&amp;#39;t documented it yet).&amp;nbsp; To download the package, please see the &lt;a href="http://test.alexcrome.co.uk/alexcrome-cs-2008/documentation/installing-alexcrome-cs-2008/"&gt;Installation Instructions&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I shall be blogging more about particular aspects of this package over the coming weeks.&amp;nbsp; In particular I plan to blog about Configurable Addons, and how they can be used to prevent having to modify the CS Control Panel whilst providing a nice way of configuring your addons.&lt;/p&gt;&lt;img src="http://alexcrome.co.uk/aggbug.aspx?PostID=107" width="1" height="1"&gt;</description></item><item><title>AlexCrome.CS 2008 Is Coming...</title><link>http://alexcrome.co.uk/community_server/b/community_server/archive/2008/10/05/alexcrome-cs-2008-is-coming.aspx</link><pubDate>Sun, 05 Oct 2008 18:35:00 GMT</pubDate><guid isPermaLink="false">14ef0438-becd-400b-84a7-36022fc26c96:108</guid><dc:creator>Alex</dc:creator><slash:comments>2</slash:comments><description>&lt;p&gt;The title says it all.&amp;nbsp; I&amp;rsquo;m very nearly finished, just got to put the finishing touches on the package which I should be able to do sometime this week (or at least I hope so).&lt;/p&gt;
&lt;p&gt;You can expect a number of old addons to be included&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Quick Reply control&lt;/li&gt;
&lt;li&gt;MarkAllPostsRead control&lt;/li&gt;
&lt;li&gt;NotifyAdministratorOnUserCreate CSModule&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;(I have removed the RegistrationPM and UserHasUnreadPrivateMessagecondition as these are now included out of the box in CS.)&lt;/p&gt;
&lt;p&gt;You can also expect some additional addons to be included&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;RefreshBlogPostCacheOnComment CSModule (updates cache immediately when a comment (blog or media gallery) is posted).&lt;/li&gt;
&lt;li&gt;SearchEnginePing CSModule (Pings more than just Google)&lt;/li&gt;
&lt;li&gt;SetAnonymousUserRoles CSModule (fixes anonymous roles problem allowing you to display navigation&lt;/li&gt;
&lt;li&gt;MappedPathFileSystemFileStorageProvider (change the filestorage basepath based on the machine name of the server)&lt;/li&gt;
&lt;li&gt;Referal Points addon (reward users with points for inviting new users to your community)&lt;/li&gt;
&lt;li&gt;CopyWikiPageToBlog control (copy a page from a wiki to a blog, leaving the blog post accredited to the author of the wiki page).&lt;/li&gt;
&lt;li&gt;A control (and sample page) to allow for improved display of Active topics &amp;ndash; live example available at &lt;a href="http://nintendowiikly.com/forums/TopicsActive/?ForumID=-1&amp;amp;Sort=SortOrder&amp;amp;PageIndex=1" title="http://nintendowiikly.com/forums/TopicsActive/?ForumID=-1&amp;amp;Sort=SortOrder&amp;amp;PageIndex=1"&gt;http://nintendowiikly.com/forums/TopicsActive/?ForumID=-1&amp;amp;Sort=SortOrder&amp;amp;PageIndex=1&lt;/a&gt; .&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I&amp;rsquo;m also including a control panel page to configure addons through the Control Panel.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://askcrome.co.uk/files/media/image/WindowsLiveWriter/AlexCrome.CS2008IsComing_11111/image_2.png"&gt;&lt;img height="484" width="472" src="http://askcrome.co.uk/files/media/image/WindowsLiveWriter/AlexCrome.CS2008IsComing_11111/image_thumb.png" alt="image" border="0" title="image" style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Click the Configure button next to an addon and a popup window opens allowing you to configure the addon.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;&lt;a href="http://askcrome.co.uk/files/media/image/WindowsLiveWriter/AlexCrome.CS2008IsComing_11111/image_4.png"&gt;&lt;img height="484" width="521" src="http://askcrome.co.uk/files/media/image/WindowsLiveWriter/AlexCrome.CS2008IsComing_11111/image_thumb_1.png" alt="image" border="0" title="image" style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;This page is not required, and I&amp;rsquo;ll talk more about how this works once I&amp;rsquo;ve released the package.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m still undecided on whether I should include my Warnings Addon or not.&amp;nbsp; I&amp;rsquo;m not sure it&amp;rsquo;s of high enough quality to release yet, but that depends on how I feel when I come to finishing off the package and packaging it up.&lt;/p&gt;&lt;img src="http://alexcrome.co.uk/aggbug.aspx?PostID=108" width="1" height="1"&gt;</description></item><item><title>Login as a member of your community</title><link>http://alexcrome.co.uk/community_server/b/community_server/archive/2008/09/29/login-as-a-member-of-your-community.aspx</link><pubDate>Mon, 29 Sep 2008 18:08:00 GMT</pubDate><guid isPermaLink="false">14ef0438-becd-400b-84a7-36022fc26c96:111</guid><dc:creator>Alex</dc:creator><slash:comments>6</slash:comments><description>&lt;p&gt;Don&amp;rsquo;t you just love it when you get a conversation or email from a member of your community saying &amp;ldquo;I can&amp;rsquo;t access the website&amp;rdquo;.&amp;nbsp; You ask them a few questions, and you&amp;rsquo;re convinced it&amp;rsquo;s a problem just affecting their user account, so somehow need to login as them.&amp;nbsp; In Community Server 2008 or below, you&amp;rsquo;d have had to either changed the User&amp;rsquo;s password for them, and then give them a new password, or ask them to give you their password, neither of which is a particularly desirable outcome.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://askcrome.co.uk/files/media/image/WindowsLiveWriter/Loginasamemberofyourcommunity_F5A1/image_4.png"&gt;&lt;img height="244" width="235" src="http://askcrome.co.uk/files/media/image/WindowsLiveWriter/Loginasamemberofyourcommunity_F5A1/image_thumb_1.png" align="right" alt="image" border="0" title="image" style="display:inline;margin-left:0px;margin-right:0px;border:0px;" /&gt;&lt;/a&gt;CS2008.5 however allows an administrator (System Administrator or Membership Administrator ) to impersonate a user, and act as if they are that user.&amp;nbsp; To impersonate another user, go to Control Panel &amp;gt; System Administration &amp;gt; Membership Administration.&amp;nbsp; Search for the user you wish to impersonate, and press edit.&amp;nbsp; On the admin tab of the edit user page, click impersonate user.&lt;/p&gt;
&lt;p&gt;You&amp;rsquo;ll then be redirected to your website&amp;rsquo;s homepage, and you&amp;rsquo;ll notice the username in the welcome area of the page has changed to that of the user you&amp;rsquo;re impersonating.&amp;nbsp; You&amp;rsquo;ll also see your own username in yellow to show that you&amp;rsquo;re impersonating another user. &lt;/p&gt;
&lt;p&gt;&lt;a href="http://askcrome.co.uk/files/media/image/WindowsLiveWriter/Loginasamemberofyourcommunity_F5A1/image_6.png"&gt;&lt;img height="47" width="244" src="http://askcrome.co.uk/files/media/image/WindowsLiveWriter/Loginasamemberofyourcommunity_F5A1/image_thumb_2.png" alt="image" border="0" title="image" style="display:inline;border-width:0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;To return to your administrator account, click sign out and you&amp;rsquo;ll be signed out of your member&amp;rsquo;s account.&lt;/p&gt;&lt;img src="http://alexcrome.co.uk/aggbug.aspx?PostID=111" width="1" height="1"&gt;</description></item><item><title>Classic Forum Home Page</title><link>http://alexcrome.co.uk/community_server/b/community_server/archive/2008/09/28/classic-forum-home-page.aspx</link><pubDate>Sun, 28 Sep 2008 14:00:00 GMT</pubDate><guid isPermaLink="false">14ef0438-becd-400b-84a7-36022fc26c96:141</guid><dc:creator>Alex</dc:creator><slash:comments>14</slash:comments><description>&lt;p&gt;&lt;a href="http://askcrome.co.uk/files/media/image/WindowsLiveWriter/ClassicForumHomePage_80A/image_2.png"&gt;&lt;img height="244" width="236" src="http://alexcrome.co.uk/files/media/image/WindowsLiveWriter/ClassicForumHomePage_80A/image_thumb.png" align="right" alt="image" border="0" title="image" style="display:inline;margin-left:0px;margin-right:0px;border:0;float:right;" /&gt;&lt;/a&gt; Whilst I do prefer the Hawaii forum view to the more typical forum views from past versions of CS, it does take a bit of getting used to, and I don&amp;rsquo;t dare to impost it on the users on my personal CS site &lt;span style="text-decoration:line-through;"&gt;(Nintendo Wiikly)&lt;/span&gt; for fear of a revolt &amp;ndash; one lost user for me would be a loss of about 10% of my active user base :( &amp;ndash; I decided to return to the old style of forum view.&lt;/p&gt;
&lt;p&gt;To do this, I copied the grouplist.aspx page from the old calypso theme, and updated it to work with CS2008 (and then again for CS2008.5).&amp;nbsp; You can see the page I&amp;rsquo;m using (for CS2008.5) in the &lt;a href="http://alexcrome.co.uk/forums/"&gt;forums&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;There are a few other niceties of this page over the default &amp;ndash; it displays the group description when viewing the forum list for a specific forum group, and the description and name are editible inline.&amp;nbsp; The page also allows you to personalise the list of forums &amp;amp; groups you see so you see more of the content which is relevant to you.&lt;/p&gt;
&lt;p&gt;You can download the files to change your forum homepage&amp;nbsp;below&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://alexcrome.co.uk/media/p/24.aspx"&gt;CS2008&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://alexcrome.co.uk/media/p/23.aspx"&gt;CS2008.5&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Instructions on installing the updated page are included in the readme.txt file.&lt;/p&gt;
&lt;p&gt;If you find any errors in the markup, or something that was left out of the package, add a comment and I&amp;rsquo;ll fix the error for others who come to use the page.&lt;/p&gt;&lt;img src="http://alexcrome.co.uk/aggbug.aspx?PostID=141" width="1" height="1"&gt;</description></item></channel></rss>