 <?xml-stylesheet type="text/css" href="https://i7media.com/Data/style/rss1.css" ?> <?xml-stylesheet type="text/xsl" href="https://i7media.com/Data/style/rss1.xsl" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd">
  <channel>
    <title>Blog</title>
    <link>https://i7media.com/blog</link>
    <description />
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>mojoPortal Blog Module</generator>
    <language>en-US</language>
    <ttl>120</ttl>
    <atom:link href="https://i7media.com/Blog/RSS.aspx?p=50~99~5" rel="self" type="application/rss+xml" />
    <itunes:owner />
    <itunes:explicit>no</itunes:explicit>
    <item>
      <title>Software Architecture Patterns: A Time and Place for Everything</title>
      <description><![CDATA[<p>Software architectural patterns are one of the more polarizing and controversial topics in the development world.</p>

<p>"Here's all the patterns that every project needs!"</p>

<p>"All patterns are bad and you should feel bad if you use them!"</p>

<p>In this post I will talk about what Architectural Patterns are, when they matter, when to use them and when not to.</p>

<p>I will list out a few patterns in a way that I hope will share understanding rather than dogmatic positions that are often held by tech influencers on social media.</p>

<h2>What Are Architectural Patterns?</h2>

<p>An architectural pattern is a solution to a specific problem that arises in the design of a project. They come in the form of separating concerns, grouping functionality, abstracting implementation details, and dictating conventions for the team to use.</p>

<p>Patterns can be as simple as breaking features into predictable functions, or to complex layers that handle a multitude of use cases.</p>

<h2>When Should One Use Patterns?</h2>

<p>When you find your code being hard to navigate, disorganized, difficult&nbsp;to maintain, or having&nbsp;trouble&nbsp;on-boarding new developers, using patterns can make some sense of the chaos.</p>

<p>If you find that your project has a problem, sometimes a pattern will resolve your problem. If your project doesn't have the problem that the pattern addresses, or if you don't understand what problem the pattern address, don't use the pattern.</p>

<p>It's as simple as that.</p>

<p>After 16 years of experience with many CMSs (Content Management Systems), I have found that they benefit greatly from Architectural Patterns, or that the lack of patterns can hinder growth and modernization over the years.</p>

<p>Of all the CMSs I have experience with, mojoPortal is the one I know most about, is dearest to my heart, and the CMS that I will use to showcase&nbsp;my position on&nbsp;patterns.</p>

<h2>"I Don't Feel Like I Need Patterns"</h2>

<p>This is a good indicator that you don't need patterns. If you are a solo developer, are in a small team, or it's just a side project, there might not be a need for you to even consider a pattern.</p>

<p>If you have a project that later in its lifetime you feel like you would benefit from a pattern, refactoring is always an option.</p>

<h2>What are Common Patterns and the Problems They Solve?</h2>

<p>There are so many that I couldn't possibly list them, but I'll list a few I've had experience with, and some that I believe to have value in the CMS realm.</p>

<h3>Layered (N-Tier) Architecture</h3>

<p class="image-center"><img alt="" height="333" src="https://i7media.com/Data/blogs/software-architectural-patterns/application-layers.png" width="600" /></p>

<p>If you're familiar with mojoPortal, it mostly implements this pattern.</p>

<p>The idea behind this pattern is to separate functionality concerns into these project layers:</p>

<p>The <strong>Data Access Layer</strong> holds all implementation code for storing and manipulating data. It becomes the only API for the application to interface with your data, be it from a file, a database engine, or another system.</p>

<p>The <strong>Business Layer</strong> is the only layer that references the Data Access Layer. It holds domain entities (classes that represent tables in a database for instance) and the logic to bring the data together in code representations of the application features.</p>

<p>The <strong>Presentation (Web) Layer</strong> is the only layer that references the Business Layer. This layer is for "presenting" the features in the application. It could be a Windows Application or a Web Application, but the main thing it does is give a user interface to the code features from the Business layer.</p>

<p>The reason I said mojoPortal "mostly" implemented this pattern is because while the project is split into the proper layers, a lot of the business logic wound up in the Web (Presentation) Layer. This has made it very difficult to attempt to migrate away from the Web Forms framework it was built on to a more modern and capable framework.</p>

<p>The pros of this pattern are everything is grouped in a logical fashion and you know where everything belongs.</p>

<p>The cons of this pattern are that every layer is tightly coupled to the previous layer. This can be difficult later down the road when replacing dependencies or dealing with providers for services throughout the application. This leads into the next pattern.</p>

<h3>Clean Architecture</h3>

<p class="image-center"><img alt="" height="547" src="https://i7media.com/Data/blogs/software-architectural-patterns/clean-architecture.png" width="550" /></p>

<p>The purpose of this pattern is much like the previous pattern, but with some tweaks and the implementation of another pattern to facilitate changes to make up for the previous pattern's downfalls.</p>

<p>Much like the Layered Architecture pattern, the application is separated into several projects.</p>

<p>It differs on some key points.</p>

<ol>
	<li>All interaction between layers is done through the use of&nbsp;contract interfaces.<br />
	What this means is unlike layered architecture, instead of directly referencing the implementation of a service, you reference the interface the service implements. This allows for easily swapping out the implementation if needed.</li>
	<li>The layer references are moved around a bit. Rather than each project pointing to the previous project, the projects are placed in an encircling shape, all pointing inward or towards each other in their layer.</li>
</ol>

<p>The Layers are as such:</p>

<p>The <strong>Domain Layer</strong> is the ultimate authority of the entire application. It contains all the domain concerns and contracts for the application with no references to any internal or external dependencies. All other layers can use this layer. This layer is often coupled with the Domain Driven Design pattern, but it's not required.</p>

<p>The <strong>Application Layer</strong> contains the business logic of the application and the contract interfaces that are to be implemented in the Infrastructure layer. Often times this is where the CQRS and/or Vertical Slice patterns are used, but it's not required.</p>

<p>The <strong>Infrastructure Layer</strong> is where all implementations for the contracted services in the Application are kept. All external dependencies/libraries are abstracted here, allowing for easy replacement from one library to another if needed. An example would be if your project started by supporting SQL Server but later a migration to PostgreSQL was in order, the only assembly that would need to be edited or replaced would be the Infrastructure assembly.</p>

<p>Sometimes the Infrastructure Layer will break out only the database concerns into its own Persistence Layer(s), keeping the database specific code in it's own layer(s), but this is not required.</p>

<p>The <strong>Presentation Layer</strong> brings everything together through the use of the Inversion of Control Pattern. This allows each layer to register services in the IoC container using the interface contracts and keeping the implementation details hidden from the application. The IoC container handles the dependencies for all services that are registered to it, allowing the system to keep track of lifecycles and dispose of objects so that the implementation reference is kept in one location.</p>

<p>A cool thing about Clean Architecture is that one could have multiple Presentation Layers but share all the core functionality from the Application Layer. Do you need a multi-page website but want to administrate it through a mobile app? The answer could be two Presentation Layers, an MVC/Razor Pages layer for the website, and a Web API layer in conjunction with the mobile app for administration.</p>

<p>The pros of this pattern are that it's incredibly versatile while enforcing strict separation of concerns and external dependencies allowing for a very long-lived application.</p>

<p>The cons of this pattern are that it's moderately complicated, where boilerplate could become monotonous if the application doesn't need to use the pattern.</p>

<p>mojoPortal would have benefited a lot from this pattern being implemented properly, as migrating&nbsp;to .NET (Core) from .NET Framework would have consisted of replacing the Infrastructure layer using the same Application Layer contracts, and rebuilding the Presentation Layer in a .NET (Core) UI framework. The majority of the application wouldn't change.</p>

<p>More Reading:</p>

<ul>
	<li><a href="https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html">The Clean Architecture - The Clean Code Blog [Uncle Bob]</a></li>
	<li><a href="https://medium.com/@rudrakshnanavaty/clean-architecture-7c1b3b4cb181">Clean Architecture - Medium</a></li>
	<li><a href="https://en.wikipedia.org/wiki/Domain-driven_design">Domain-driven Design - Wikipedia</a></li>
</ul>

<h4>The Repository and Unit of Work Patterns</h4>

<p>The Repository pattern is an excellent pattern for data access. The Unit of Work pattern compliments the Repository pattern by allowing for bundles transactions for data integrity.</p>

<p>The Repository pattern's goal is to abstract repeated logic for data manipulation and querying. It allows you to have a single "GetById" method that works for all tables with the code being written once. It keeps your code DRY and makes it easy to do things like adding global query filters for features like soft deletion.</p>

<p>The Unit of Work pattern creates a "unit of work" for each action you take when mutating data. If you need to save a blog post, but it needs a new category that does not exist, the UoW will prevent bad data from being saved if creating the category fails by not saving the blog post. It's an interface for database transactions, if you're familiar with how those work.</p>

<p>Some people raise issue to the Repository (and Unit of Work) pattern when using Entity Framework, as Entity Framework implements its own versions of those patterns. This is&nbsp;completely understandable for application that will realistically never wish to change the library that connects to the database. However, from experience, I would rather have everything in my application have its own contracts to facilitate that possibility of change.</p>

<p>mojoPortal's Data Access layers all use ADO.NET, and their contracts are the implementations, which has made changing to something like Entity Framework for easy migrations and multiple database providers very hard. If the Repository pattern was between the layers, replacement would be a much more feasible.</p>

<p>More Reading:</p>

<ul>
	<li><a href="https://deviq.com/design-patterns/repository-pattern">Repository Pattern - DevIQ</a></li>
	<li><a href="https://learn.microsoft.com/en-us/aspnet/mvc/overview/older-versions/getting-started-with-ef-5-using-mvc-4/implementing-the-repository-and-unit-of-work-patterns-in-an-asp-net-mvc-application">Implementing the Repository and Unit of Work Patterns in an ASP.NET MVC Application - Microsoft</a></li>
</ul>

<h4>The Query Specification Pattern</h4>

<p>The Query Specification pattern is another pattern used in tandem with the repository pattern. It allows us to create domain level specifications that we can use in the Application Layer without having to expose an implementation's API.</p>

<p>For instance, we can create a "GetBookWithAuthors" specification that just takes a Book ID, and pass the specification to the Repository's "FirstOrDefaultAsync" method that&nbsp;will be sure that&nbsp;the underlying data access code will return the appropriate Book with Authors for that book.</p>

<p>More Reading:</p>

<ul>
	<li><a href="https://medium.com/@cizu64/the-query-specification-pattern-in-ddd-net-core-25f1ec580f32">The Specification Pattern in DDD .NET Core - Medium</a></li>
	<li><a href="https://deviq.com/design-patterns/specification-pattern">Specification Pattern - DevIQ</a></li>
</ul>

<h4>Plugin Architecture Pattern</h4>

<p>The Plugin Architecture Pattern&nbsp;is a pattern that facilitates the ability to add or change functionality of the application with the use of third party bundled code. Most CMSs support this pattern, mojoPortal has its own way of handling modules (plugins) that achieve the same goal.</p>

<p>It's quite simple, the main application provides a set of APIs (the Plugin Interface) that a plugin developer can implement in their plugin, and then register their code with the Plugin Manager, which is responsible for loading and running the Plugin code.</p>

<p>More Reading:</p>

<ul>
	<li><a href="https://learn.microsoft.com/en-us/dotnet/core/tutorials/creating-app-with-plugin-support">Create a .NET Core application with plugins - Microsoft</a></li>
	<li><a href="https://blog.nashtechglobal.com/plugin-architecture-pattern-overview-net/">Plugin Architecture Pattern Overview (.NET) - Nash Tech</a></li>
</ul>

<h3>Bringing it all Together</h3>

<p>By using the Clean Architectural pattern, we have a good foundation to allow us to plug and play any&nbsp;implementations through the use of contract interfaces and Dependency Injection. In the event that the database code needs to be swapped out, a third party library needs to be replaced due to a security vulnerability, or having the ability to provide different implementations for selection through the application's settings, this will help facilitate these use cases.</p>

<p>Using the Repository, Unit of Work, and Query Specification&nbsp;patterns we can prevent repeating code for querying data&nbsp;and we abstract away data query implementation, and it allows us to support or swap database providers at runtime.</p>

<p>The Plugin pattern allows for us to expand the application in any way that is needed. Be it adding new features (Blog, Forums, Event Calendar, CRM, etc.)&nbsp;or modifying an existing feature (swapping out authentication methods, listening for events to modify data, etc.) it makes the application as flexible as possible.</p>

<h3>Conclusion</h3>

<p>These are what I believe are the foundational building blocks for&nbsp;a CMS like the next version of mojoPortal could use, and who knows? I might be doing just that. 😉</p>

<p>Does that mean that all applications should use Clean Architecture or the Repository patterns?&nbsp;Clearly not.</p>

<p>Patterns are like shoes, if they fit and do the job that you have a need for, use them, otherwise don't.&nbsp;Just don't make the mistake that if your application doesn't need&nbsp;patterns that&nbsp;no one needs&nbsp;patterns, as many people on the internet so readily declare.</p>
<br /><a href='https://i7media.com/blog/software-architecture-patterns-a-time-and-place-for-everything'>Elijah Fowler</a>&nbsp;&nbsp;<a href='https://i7media.com/blog/software-architecture-patterns-a-time-and-place-for-everything'>...</a>]]></description>
      <link>https://i7media.com/blog/software-architecture-patterns-a-time-and-place-for-everything</link>
      <author>elijah@i7media.net (Elijah Fowler)</author>
      <comments>https://i7media.com/blog/software-architecture-patterns-a-time-and-place-for-everything</comments>
      <guid isPermaLink="true">https://i7media.com/blog/software-architecture-patterns-a-time-and-place-for-everything</guid>
      <pubDate>Tue, 24 Feb 2026 17:24:00 GMT</pubDate>
    </item>
    <item>
      <title>i7MEDIA purchases mojoPortal</title>
      <description><![CDATA[<script>
$(document).ready(function() {
					     $('[data-b64]').each(function() {
					          var b64 = $(this).data('b64')
					               oValue = window.atob(b64);
					          $(this).attr('href', 'mailto:' + oValue).html(oValue);
					     });
					});
</script>
<h5 class="AlignCenter"><strong>Media wishing to learn more about this event, please send all questions to <a data-b64="aGlAaTdtZWRpYS5uZXQ=">&nbsp;</a></strong></h5>

<p><strong>FOR IMMEDIATE PUBLIC RELEASE:</strong></p>

<p><strong>i7MEDIA has purchased mojoPortal and all of its commercial modules</strong></p>

<p><strong>Kearney, Mo (Feb 6,&nbsp; 2017)</strong> - It is an exciting day for the mojoPortal project! i7MEDIA, a longtime supporter of the mojoPortal project, has completed the purchase of the open source project and the commercial modules available on the mojoPortal website from Source Tree Solutions.</p>

<p>Joe Davis, i7MEDIA President, has been strong supporter of mojoPortal since 2008. Joe built his business around this versatile and user-friendly content management system. i7MEDIA, is dedicated to furthering the development of mojoPortal and its tools.</p>

<p>Rest assured mojoPortal will remain an open source project and there are no plans to change that. However, I7MEDIA has plans for expanding mojoPortal to help it stay relevant and provide the very best .NET CMS platform on the market today.&nbsp;</p>

<p>Joe Audette, of Source Tree Solutions, is very enthusiastic about the new life of mojoPortal:</p>

<blockquote>Joe Davis and i7MEDIA have always been the most qualified consultants for mojoPortal other than myself, and I've always had great confidence in referring customers and projects to them over the years.&nbsp; Joe Davis has been a good friend and has been my go to guy when I needed to refer a customer or project that I did not have the capacity for. Whether you need design help, hosting, or custom feature development, i7MEDIA is the team you want with years of experience. mojoPortal was my baby for over a decade, and I am very glad to know my baby is in good hands! Long live mojoPortal! <cite>Joe Audette, mojoPortal Founder</cite></blockquote>

<p>mojoPortal has always been easy for users to add and manage their content. Over the past few years, though, it has fallen behind other systems which have taken more modern approaches to management and more fully utilized the capabilities of modern browsers. i7MEDIA has developed add-on features for mojoPortal which make content management easier and they are working on packaging these features for the masses to use.</p>

<p>Development of add-ons for mojoPortal isn't necessarily hard but there is a bit of a learning curve and quite a few steps one must take to prepare a working development environment. The focus will be on cutting down on the number of steps and making the process easier overall. They will also explore possible MVC and WebApi implementations of some features, especially administration features like the File Manager.&nbsp;</p>

<p>It has always been possible to create beautiful sites with mojoPortal but the built-in skins were not good examples. i7MEDIA is working on providing newer skins to help showcase the power or mojoPotral. &nbsp;i7MEDIA is committed to making sure that mojoPortal is seen as a designer-friendly CMS.&nbsp;</p>

<p>A new version of mojoPortal is scheduled for release in the next couple of weeks with several small fixes, a few clean bootstrap-based skins and a brand-new file manager to replace both of the current file managers and the link and image picker used in the WYSIWYG editors. That's right, one file manager that does it all.&nbsp;</p>

<p>For the latest news, check out mojoPortal’s <a href="https://www.facebook.com/mojoPortal-146363180114/">Facebook</a> and <a href="https://twitter.com/mojoportal">Twitter</a> feeds.</p>
<br /><a href='https://i7media.com/i7media-purchases-mojoportal'>Joe Davis</a>&nbsp;&nbsp;<a href='https://i7media.com/i7media-purchases-mojoportal'>...</a>]]></description>
      <link>https://i7media.com/i7media-purchases-mojoportal</link>
      <author>joe@i7media.net (Joe Davis)</author>
      <comments>https://i7media.com/i7media-purchases-mojoportal</comments>
      <guid isPermaLink="true">https://i7media.com/i7media-purchases-mojoportal</guid>
      <pubDate>Mon, 06 Feb 2017 14:56:00 GMT</pubDate>
    </item>
    <item>
      <title>Long Term Support for mojoPortal</title>
      <description><![CDATA[<p class="alert alert-info"><strong>Update: </strong>i7MEDIA is now the owner of mojoPortal and is committed to its future success. <a href="https://i7media.net/i7media-purchases-mojoportal">Read more</a>…</p>

<p>As you may know, Joe Audette, founder and chief developer of mojoPortal, has announced that he will no longer be developing mojoPortal.</p>

<p>In the 7+ years I have known Joe and worked with mojoPortal, i7MEDIA has become the most trusted and experienced mojoPortal consultancy in the world. We have happy clients on every continent except Antarctica ranging in size from small start-ups to major international corporations and organizations. We've built and helped others build hundreds of mojoPortal sites. Most of our projects involving mojoPortal are still operational and we're adding more even as I'm writing this post.</p>

<p>Technology moves fast and that's a good thing, but sometimes it can move at a pace which can cause businesses to lose money if they're not careful. Whether a small company spends a few thousand dollars to build a nice website and customer portal or a large one spends several thousand dollars, scrapping what they have and building new just because there's a new technology (or even not new but more popular) doesn't make business sense.</p>

<p>We have a lot of clients who are using perfectly good and reliable WebForms systems like mojoPortal. We take a great deal of pride in the support we provide to our clients so we will be supporting and even providing enhancements to mojoPortal until we don't have any clients needing it anymore. After speaking with several of our clients over the past couple of months I can tell you, definitively, that we'll be supporting mojoPortal for quite a long while and that's fine by me and my team of mojoPortal experts.</p>

<p>So, if you're using mojoPortal already and you are looking for support, we will help you. If you're considering using mojoPortal because of its rich feature set, we will help you. <a href="https://i7media.com/hire-us">Contact us today so we can help you</a>!</p>
<br /><a href='https://i7media.com/long-term-support-for-mojoportal'>Joe Davis</a>&nbsp;&nbsp;<a href='https://i7media.com/long-term-support-for-mojoportal'>...</a>]]></description>
      <link>https://i7media.com/long-term-support-for-mojoportal</link>
      <author>joe@i7media.net (Joe Davis)</author>
      <comments>https://i7media.com/long-term-support-for-mojoportal</comments>
      <guid isPermaLink="true">https://i7media.com/long-term-support-for-mojoportal</guid>
      <pubDate>Fri, 20 Nov 2015 15:12:00 GMT</pubDate>
    </item>
    <item>
      <title>Ultimate mojoPortal Upgrade Guide</title>
      <description><![CDATA[<p>Due to its structure, upgrading mojoPortal is quite simple. The short story is you backup your site and database, download the new version, copy the files to your server, open the setup page and you're done. There are a few areas where one might start over thinking the process and make it harder than it really is so we decided we would write this guide to help quell the desire to make it difficult.</p>

<div class="alert alert-warning"><strong>THE GREAT BIG WARNING:</strong> If you do not backup your website and its database you are asking for trouble. While we have never had an upgrade break a site, it could happen and having a backup is the only way to insure yourself against it.</div>

<h3>The Canon</h3>

<p>The process for upgrading mojoPortal is no different if you are upgrading from a really old version or a relatively new version. mojoPortal doesn't have "minor" updates or "major" upgrades. The terms update and upgrade can be used interchangeably when referring to mojoPortal. Version numbers don't mean much, version 2.4.0.0 didn't necessarily contain any more new features or bug fixes than 2.3.7.2. The version numbers increase by 0.0.0.1 each time a database change or a set of database changes is needed. There are never "upgrade" or "update" packages released by mojoPortal. All releases packages&nbsp;contain a full installation which if&nbsp;copied to an existing site will upgrade the site.&nbsp;<strong>If you do not backup your site and database before upgrading, you are not being responsible.</strong></p>

<h3>Process Overview</h3>

<ol>
	<li>Take the Site Offline</li>
	<li>Backup the Site Files and Database</li>
	<li>Prepare the web.config File</li>
	<li>Copy New Files to the Site</li>
	<li>Bring the Site Online</li>
	<li>Run the Setup Page</li>
	<li>Make Skin Changes if Needed</li>
</ol>

<h3>Take the Site Offline</h3>

<p>You want to do this prior to backing up the site because once the site is offline, no one can make any changes to it. If you were to backup the site before taking it offline, someone could make a change which is not backed up.</p>

<p>To take the site offline, add an "App_Offline.htm" file to the root of the site. <em>The root of the site is the same location where the web.config file resides.</em> <a href="https://i7media.net/SharedFiles/Download.aspx?pageid=6&amp;mid=9&amp;fileid=402" rel="nofollow">You can download an example App_Offline.htm here</a>.</p>

<h3>Backing up</h3>

<p>There are many, many ways to backup files and databases. We will cover two methods for backing up files and two methods for backing up databases (one for MSSQL and one for MySQL).</p>

<h4>Backing up Files When You Have Access to the Server's Desktop</h4>

<p>Use this method if you have access to the servers desktop. If you don't have access to the servers desktop, use the FTP method.</p>

<p>In general, you will want to browse to the location of your site files. If you do not know what this is, you should contact your server admin or, if you are familiar with IIS, check the physical path for the site in IIS. Once you have located the site files, select all of them and create a zip file of them. We use <a href="http://7-zip.org/">7-Zip</a> but you can use whatever you like.</p>

<h4>Backing up Files with FTP</h4>

<p>Download a <strong>good</strong> FTP client which provides verbose logging and an easy way to retry operations which may have failed. We use <a href="https://filezilla-project.org/">FileZilla</a> and recommend it above any other FTP client.</p>

<p>Open your FTP client and connect to your server. Download <strong>all</strong> of the files in your site to a directory on your computer. Check the FTP Client's log for any failures and re-download any files which did not download properly.</p>

<h4>Backing up MSSQL Database in SQL Server Management Studio</h4>

<p>Use this method if you have access to the database using SQL Server Management Studio (SSMS). Some hosting providers provide this access but the more security minded hosting providers (like i7MEDIA) do not. If you cannot access the database with SSMS, use your hosting providers control panel tools to back up your database. If you are an i7MEDIA customer, follow the instructions in our "<a href="http://i7media.net/clients/knowledgebase/145/Backing-up-and-Restoring-SQL-Server-Databases.html">Backing up and Restoring SQL Server Databases</a>" knowledge base article.</p>

<h4>Create the Backup</h4>

<ol>
	<li>Open SSMS and connect to the database server hosting the database.</li>
	<li>Right-click the database in the Object Explorer of SSMS and then select Tasks &gt; Back Up. For further instructions, read the "<a href="http://technet.microsoft.com/en-us/library/ms187510.aspx#SSMSProcedure">Create a Full Database Backup</a>" article on the MSDN website.</li>
</ol>

<h4>Backing up MySQL Database using MySQL Workbench</h4>

<p>Use this method if you have access to the database using MySQL Workbench. Some hosting providers provide this access but the more security minded hosting providers (like i7MEDIA) do not. If you cannot access the database with MySQL Workbench, use your hosting providers control panel tools to back up your database. Many hosting providers do provide access to a tool called <a href="http://www.phpmyadmin.net">PHPMyAdmin</a> which you can use to back up your database as well. If you are an i7MEDIA customer, follow the instructions in our "<a href="http://i7media.net/clients/knowledgebase/172/Backing-up-and-Restoring-MySQL-Databases.html">Backing up and Restoring MySQL Server Databases</a>" knowledgebase article.</p>

<h4>Create the Backup</h4>

<ol>
	<li>Open MySQL Workbench and connect to the database server hosting the database.</li>
	<li>Select "Data Export" under "Management" in the Navigator.</li>
	<li>Select the database in the "Object Selection" panel.</li>
	<li>Select your desired options in the Options section and click the "Start&nbsp;Export" button. Note: <strong>do not </strong>select the "Skip table data" option because you will not end up with any of your site data if you do select this option.</li>
</ol>

<h3>Prepare the web.config File</h3>

<p><strong>You should use the web.config file which comes with the mojoPortal release.</strong> This cannot be stressed enough because trying to compare every line of your old web.config file and the new one will take a long time and you may miss something.&nbsp;Nearly all of the settings you might change should be done in the user.config file anyway so you shouldn't have many changes to the web.config file in the first place. A few exceptions to this rule are listed below:</p>

<dl>
	<dt><strong>machineKey</strong></dt>
	<dd>The machineKey is used for encryption and decryption of authentication cookie data and view-state data. In mojoPortal it is also used for encryption and decryption of stored passwords if the Password Storage option is set to "Encrypted." You should copy this from your previous web.config file to the new web.config file. Read our "<a href="http://i7media.net/separating-sections-from-the-mojoportal-webconfig-file">Separating Sections From the mojoPortal web.config File</a>" article if you have a lot of sites and don't want to modify the new web.config for each of them.</dd>
	<dt><strong>Keys Related to Large File Uploads</strong></dt>
	<dd>The httpRuntime and requestFiltering elements in the web.config help with the support of large file uploads. If you have made changes to these elements, you will need to copy those changes to the new web.config file. Read the <a href="https://www.mojoportal.com/supporting-large-file-uploads.aspx">Supporting Large File Uploads</a> article in the mojoPortal documentation for more information on this topic.</dd>
	<dt><strong>Keys Related to Error Pages</strong></dt>
	<dd>The configuration of custom and http error pages for a website hosted in IIS is saved in the web.config file. If you have changed these settings from the default values, you'll need to copy them over to the new web.config file. The customErrors element contains the settings for handling .net related errors and the httpErrors element contains the settings for handling http errors (e.g., 404). Tip: take a look at our article "<a href="http://i7media.net/prettifying-the-mojoportal-error-page">Pretifying the mojoPortal Error Page</a>" for information on how to modify the .net error page.</dd>
</dl>

<p>If you have several items which cannot go in the user.config file, you should keep them saved in some kind of notes file with the site. For best security, save your notes file with a .config extension to prevent it from being download via the web.</p>

<p>Note: this is an upgrade, not a new install so you <strong>should not</strong> copy create a new user.config file.</p>

<h3>Copy New Files to the Site</h3>

<p>If you have access to the servers desktop you can simply copy the files from the release (with changes made to the web.config) to the location of your site files in the order listed below. When prompted to with the option&nbsp;merge existing folders or not, select "yes." When prompted to "Copy and Replace" for existing files or "Don't copy,"&nbsp;check the "Do this for all conflicts" checkbox and then click the "Copy and Replace" option.</p>

<p>If you are accessing the site with FTP, again be sure you are using a good FTP client. Using the FTP client, upload all of the files in the order listed below. When prompted to overwrite existing files, choose whichever option overwrites the existing files.</p>

<h4>Order to Copy or Upload New Files/Folders</h4>

<ol>
	<li>Setup folder</li>
	<li>ClientScript&nbsp;folder</li>
	<li>Data folder</li>
	<li>All other files and folders</li>
</ol>

<h3>Bring the Site Online</h3>

<p>The site was taken offline by adding the App_Offline.htm file to the root of the site. To bring the site back online, all you need to do is rename or move the file. We generally customize our App_Offline.htm files with customer logos so we simply rename the file to App_Offline.config instead of moving it elsewhere.</p>

<h3>Run the Setup Page</h3>

<p>The setup page runs all of the database scripts for all of the features which have database changes. It also processes all of the feature configuration files which control what settings you see on the settings page for module instances.</p>

<p>To run the setup page, open a web browser and go to http://www.yourwebsite.url/Setup/Default.aspx. Once all of the scripts run, you will see a summary at the bottom of the page along with a link to the site.</p>

<p>If you see any errors, you will need to address them. Generally, you shouldn't see any errors but we have compiled a short list of the most common errors.</p>

<dl>
	<dt><strong>Setup is disabled. To continue, please set DisableSetup to false in Web.config.</strong></dt>
	<dd>This is showing up because the DisableSetup key in the web.config or user.config file has been set to true. If you were logged in to the site prior to upgrading, you will not see this error. To get around this, open the user.config file and change the setting to false. Next, open the web.config file and add a space to the bottom of the file. Finally, reload the setup page.</dd>
	<dt><strong>The system cannot connect to the MSSQL database. Please check your connection string.</strong></dt>
	<dd>The Connection String key in the user.config file is not correct. This error is always accompanied by more detailed information to help you troubleshoot the problem. If the database server can be accessed, it will state something to the effect of "...error occurred while establishing a connection..." If the database name, username or password is incorrect, it will state something to the effect of "the login failed."</dd>
</dl>

<h3>Make Skin Changes if Needed</h3>

<p>The skins in the mojoPortal release packages are not copied over the skins used by sites (located in \Data\Sites\[sitenum]\skins). The skins located \Data\Skins are updated or appended with the updated or new files from the release package. If you are using a skin which came with mojoPortal and have not modified it, you can copy it from \Data\Skins to \Data\Sites\[sitenum]\skins.</p>

<p>If you are using a custom skin or you have modified a packaged skin, you should check the "<a href="https://www.mojoportal.com/important-skin-changes">Important Skin Changes</a>" article in the mojoPortal Documentation for details on any changes you need to make to your skin to support the new release. You will want to check the details of every version between your old version and the new version you are installing. This is rather easy as the changes are listed in descending order in the article and there aren't very many.</p>

<h3>Summary</h3>

<p>See, it's rather simple. You don't need to worry about database scripts, different methods for minor or major versions, lots of file merging or anything like that. Really, all you need to do is create a backup and copy over the new files.</p>

<p>If you run into problems, check out the <a href="https://www.mojoportal.com/forums">mojoPortal Forums</a>. Do a search for your issue before posting because someone else may have already reported the problem and resolution has been provided by the community.</p>

<h3>Want someone else to do it?</h3>

<p>If you would rather have someone else handle upgrades for you, check out our <a href="http://i7media.net/mojoportal-upgrade-service">Upgrade Service</a>.</p>

<h3>Want to learn more about mojoPortal?</h3>

<p>If you enjoyed this guide and would like to learn more about mojoPortal, check out our <a href="http://i7media.net/mojoportal-training">Training Classes</a>.</p>
<br /><a href='https://i7media.com/ultimate-mojoportal-upgrade-guide'>Joe Davis</a>&nbsp;&nbsp;<a href='https://i7media.com/ultimate-mojoportal-upgrade-guide'>...</a>]]></description>
      <link>https://i7media.com/ultimate-mojoportal-upgrade-guide</link>
      <author>joe@i7media.net (Joe Davis)</author>
      <comments>https://i7media.com/ultimate-mojoportal-upgrade-guide</comments>
      <guid isPermaLink="true">https://i7media.com/ultimate-mojoportal-upgrade-guide</guid>
      <pubDate>Fri, 06 Dec 2013 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>SwiftBlue v1 Released</title>
      <description><![CDATA[<p><strong>Announcing the release of SwiftBlue v1</strong></p>

<p>SwiftBlue is the first in a series of template skins developed by i7MEDIA for <a href="http://www.mojoportal.com">mojoPortal</a>. It was designed as a contribution to the mojoPortal community and the <a href="http://html5mojo.codeplex.com/" target="_blank">html5mojo project</a>. SwiftBlue has been created with semantics-friendly HTML5 Markup.</p>

<p>Check out the <a href="http://swiftblue.mojoskins.com/" target="_blank" title="Visit SwiftBlue">live demo website</a> to see what your mojoPortal website could look like today!</p>

<figure style="text-align: center; padding-top: 5px; border-top-color: rgb(211, 211, 211); border-bottom-color: rgb(211, 211, 211); border-top-width: 1px; border-bottom-width: 1px; border-top-style: solid; border-bottom-style: solid;"><a href="http://swiftblue.mojoskins.com/" target="_blank" title="Visit SwiftBlue"><img alt="" src="https://i7media.com/Data/Sites/1/userfiles/35/swiftblue-screenshot.png" style="width: 550px; height: 278px;" /></a>

<figcaption style="font-style: italic; margin-top: 5px; margin-bottom: 5px;"><a href="http://swiftblue.mojoskins.com/" target="_blank" title="Visit SwiftBlue">SwiftBlue</a> is an HTML5 mojoPortal skin which was designed by <a href="http://www.i7media.net" title="Visit i7MEDIA">i7MEDIA</a>.</figcaption>
</figure>

<p><strong>Features</strong></p>

<p>As with all i7MEDIA Skins, SwiftBlue has detailed style for every feature found in mojoPortal, most notably for the Event Calendar, Event Calendar Pro, Blog, Forums, Feed manager, and jPlayer Media Players.</p>

<p>Other features include:</p>

<ul>
	<li style="margin-bottom: 5px;">Support for a number of content templates is included in SwiftBlue. Using these templates makes it easy to make your data appear on the page in a nice professional format. It doesn't cover everything, but it will help you with the basics so you can spend more time perfecting your content and less time worrying about basic layout.</li>
	<li style="margin-bottom: 5px;">SwiftBlue is HTML5 friendly. Not sure what this means? We explain more on the <a href="http://swiftblue.mojoskins.com/" target="_blank" title="Visit SwiftBlue">live demo site</a>.</li>
	<li style="margin-bottom: 5px;">Custom styled dedicated Sign in and Register pages, this way potential users don't have to sort through the regular page content to find what they need to interact with the site.</li>
	<li>A fancy User Bar based on Twitter Bootstrap. The bar includes a lot of features, links to mojoPortal, member profiles, and the ability for administrators to toggle the settings and edit links - this way you can see your site the way your users do. But mostly it's just beautiful.</li>
</ul>

<p><strong>Support</strong></p>

<p>The SwiftBlue help center is built to ensure that your time working with SwiftBlue is successful.<br />
The skin help center covers topics like:</p>

<ul>
	<li>Installation of SwiftBlue</li>
	<li>A basic introduction to CSS Classes and how they effect you in mojoPortal</li>
	<li>An explanation of how to use the SwiftBlue Content Templates</li>
	<li>A FAQ to answer common questions about SwiftBlue</li>
</ul>

<p>And if that's not enough, we've set up an easy way for you to request help or report a bug. Check out the <a href="http://swiftblue.mojoskins.com/skin-help.aspx" target="_blank">SwiftBlue Skin-Help center</a> now.</p>

<p style="padding-top: 5px; border-top-color: rgb(211, 211, 211); border-top-width: 1px; border-top-style: solid;">SwiftBlue is just another way you can make your mojoPortal site shine with a little help from i7MEDIA.<br />
Interested? Check out the <a href="http://swiftblue.mojoskins.com/" target="_blank" title="Visit SwiftBlue">SwiftBlue live demo site</a></p>
<br /><a href='https://i7media.com/swiftblue-v1-released'>Joe Davis</a>&nbsp;&nbsp;<a href='https://i7media.com/swiftblue-v1-released'>...</a>]]></description>
      <link>https://i7media.com/swiftblue-v1-released</link>
      <author>joe@i7media.net (Joe Davis)</author>
      <comments>https://i7media.com/swiftblue-v1-released</comments>
      <guid isPermaLink="true">https://i7media.com/swiftblue-v1-released</guid>
      <pubDate>Wed, 15 Aug 2012 14:26:00 GMT</pubDate>
    </item>
    <item>
      <title>Hide Module Settings and Edit Links</title>
      <description><![CDATA[<p>One of the things that most of our users like the most about mojoPortal is the easy access they have to module settings and edit screens. Sometimes, people ask if they can hide these links (or icons if the skin uses those) while remaining logged into the site.</p>

<p>Well, here's an extremely easy way to hide the links without sacrificing the usability of mojoPortal. This solution is completely skin based so it doesn't require any additions to the mojoPortal core.</p>

<p>First, we add the following to our skin script (see "<a href="https://i7media.net/optimize-your-mojoportal-skin-scripts">Optimize Your mojoPortal Skin Scripts</a>" for more info):</p>

<pre class="language-javascript linenums" data-rel="scripts.js">
<code>function HideEditLinks() {
	$(".modulelinks").hide();
	$(".ModuleEditLink").hide();
}

function ShowEditLinks() {
	$(".modulelinks").show();
	$(".ModuleEditLink").show();
}

$(document).ready(function() {
	var editLinksState = Get_Cookie('editLinksState');
	if (editLinksState != null) {
		if (editLinksState == 'hidden') {
			HideEditLinks();
		}
		if (editLinksState == 'visible') {
			ShowEditLinks();
		}
	}

	$("a#togglemodulelinks").click(function() {
		editLinksState = Get_Cookie('editLinksState');
		if (editLinksState == null || editLinksState == 'visible') {
			HideEditLinks();
			Set_Cookie('editLinksState', 'hidden')
		} else if (editLinksState == 'hidden') {
			ShowEditLinks();
			Set_Cookie('editLinksState', 'visible')
		}
	});
});</code></pre>

<p>Second, we add the following inside the AutoHidePanel in the layout.master:</p>

<pre class="language-markup">
<code>&lt;a href="#" rel="nofollow" id="togglemodulelinks"&gt;Toggle Edit Links&lt;/a&gt;</code></pre>

<p>The code above simply hides the links if they're shown and displays them if they're hidden.</p>

<p>Placement of the "Toggle Edit Links" link can be done with CSS but it should definitely be inside of the <code>AutoHidePanel</code>. The <code>AutoHidePanel</code> will ensure that the link isn't shown unless one of the Admin Toolbar items is shown. You could add another <code>AutoHidePanel</code> to the layout.master but there's no point in increasing page load if you don't have to.</p>

<p>Happy mojo-ing!</p>
<br /><a href='https://i7media.com/hide-module-settings-and-edit-links'>Joe Davis</a>&nbsp;&nbsp;<a href='https://i7media.com/hide-module-settings-and-edit-links'>...</a>]]></description>
      <link>https://i7media.com/hide-module-settings-and-edit-links</link>
      <author>joe@i7media.net (Joe Davis)</author>
      <comments>https://i7media.com/hide-module-settings-and-edit-links</comments>
      <guid isPermaLink="true">https://i7media.com/hide-module-settings-and-edit-links</guid>
      <pubDate>Mon, 11 Jun 2012 03:03:00 GMT</pubDate>
    </item>
    <item>
      <title>Link mojoPortal Welcome Message to User's Profile</title>
      <description><![CDATA[<p>The mojoPortal Welcome Message control can be configured to link to the logged-in user's profile. This is useful if you want to have a message like "Signed In As: USER NAME" and have USER NAME link to the user's profile settings.</p>

<h4>Here's the code for it:</h4>

<pre class="language-aspnet linenums" data-rel="HTML">
<code>&lt;portal:WelcomeMessage id="WelcomeMessage" runat="server"
	CssClass="greetinglink"
	RenderAsListItem="true"
	OverrideFormat="Welcome, &lt;a id='lnkMyAccount' href='https://i7media.com/Secure/UserProfile.aspx' title='Manage your User Account'&gt;{0}&lt;/a&gt;" /&gt;</code></pre>

<p>The <code class="language-markup">{0}</code> is where the user name will be placed.</p>

<p>And that's that. Happy mojo-ing!</p>
<br /><a href='https://i7media.com/link-mojoportal-welcome-message-to-users-profile'>Joe Davis</a>&nbsp;&nbsp;<a href='https://i7media.com/link-mojoportal-welcome-message-to-users-profile'>...</a>]]></description>
      <link>https://i7media.com/link-mojoportal-welcome-message-to-users-profile</link>
      <author>joe@i7media.net (Joe Davis)</author>
      <comments>https://i7media.com/link-mojoportal-welcome-message-to-users-profile</comments>
      <guid isPermaLink="true">https://i7media.com/link-mojoportal-welcome-message-to-users-profile</guid>
      <pubDate>Tue, 05 Jun 2012 02:01:00 GMT</pubDate>
    </item>
    <item>
      <title>Optimize your mojoPortal Skin Scripts</title>
      <description><![CDATA[<p>Almost every single skin we develop uses a couple JavaScript scripts, but even the addition of one script can slow the speed of a website. We use a fairly simple process to combine as many of our scripts into one file and then using a neat mojoPortal control, we add that script the combined site script. The combined site script contains most of the scripts mojoPortal uses for things like site cookies, ASP.NET&nbsp;CSS friendly adapters, etc… This process will result in fewer files being delivered to the browser, thus improving performance (somewhat).</p>

<h3>Create the Skin Script and call it from the <code>layout.master</code></h3>

<ol>
	<li>Create a new js file in your skin directory, I usually name it skinscript.js.</li>
	<li>Add your javascript to the new file. Don't use <code class="language-markup">&lt;script&gt;</code> tags, you don't need them in javascript files.</li>
	<li>Add the following&nbsp;to your&nbsp;<code>layout.master</code>. I usually add this right after the&nbsp;<code class="language-markup" style="word-spacing: 0px;">&lt;asp:ScriptManager</code>&nbsp;control.
	<pre class="language-aspnet">
<code>&lt;portal:SkinFolderScript ID="sfs1" runat="server" ScriptFileName="skinscript.js" AddToCombinedScript="true" /&gt;</code></pre>
	</li>
</ol>

<h3>Copy all the scripts from your layout.master to the Skin Script</h3>

<p>This is the part that can be a little bit tricky because not all scripts are going to work properly when combined with other scripts. If you copy the scripts to your new file one at a time and test the result, you'll find those pesky ones that will not cooperate. Just leave them in the layout.master, or if you're feeling froggy, rewrite them so they can be combined.</p>

<h4>A note about SuperFish</h4>

<p>Most of our skins use a SuperFish menu but the scripts for the SuperFishmenu come in two parts. One is the static script that is in the ClientScript&nbsp;directory which contains all of the SuperFish&nbsp;magic. The other is an initialization script that is loaded in the <code>layout.master</code> of the skin. Typically, these are loaded by adding the <code>layout.master</code> a <code class="language-markup">&lt;portal:SiteScript</code> control to load the main SuperFish script and then a <code class="language-markup">&lt;script&gt;</code> element with a bit of jQuery to initialize the SuperFish menu. We decided to use the jQuery <code class="language-javascript">.getScript()</code> method to load the main script from our Skin Script. Using this method allows us to initialize the SuperFish menu only if the main script is loaded properly.</p>

<h3>A Sample Skin Script</h3>

<p>The script below is what we use for starting our skin scripts. It includes the JavaScript for the Administration Toolbar Menu, SuperFish Menu and a neat bit of jQuery that will give the "Add File" button in the Shared Files module a hover state. The script is written out long-form so you can easily see what it does. I suggest that you minify the script before using it in production.</p>

<pre class="language-javascript linenums" data-rel="scripts.js">
<code>//  ========== 
//  = This file stores all of the scripts that would normally be placed inside the layout.master
//  = Use the following syntax for referencing this script from the layout.master.
//  = <portal:skinfolderscript addtocombinedscript="true" id="sfs1" runat="server" scriptfilename="skinscript.js">
//  ==========

/*Standard JavaScript */

function HideMenuToolbar() {
	$("#toolbar").fadeOut();
	$("#toolbarbut").fadeIn("slow");
}

function ShowMenuToolbar() {
	$("#toolbar").fadeIn();
	$("#toolbarbut").fadeOut("slow");
}


/* jQuery Scripts */
$(document).ready(function() {

	/* Admin Toolbar */
	$("span.downarr a").click(function() {
		HideMenuToolbar();
		Set_Cookie('openstate', 'closed')
	});
	$("span.showbar a").click(function() {
		ShowMenuToolbar();
		Set_Cookie('openstate', 'open')
	});
	$("span.downarr a, span.showbar a").click(function() {
		return false;
	});
	var openState = Get_Cookie('openstate');
	if (openState != null) {
		if (openState == 'closed') {
			HideMenuToolbar();
		}
		if (openState == 'open') {
			ShowMenuToolbar();
		}
	}

	/* Superfish Menu */
	/* Get Superfish mojoPortal Script */
	$.getScript("/ClientScript/jqmojo/mojosuperfish.js", function() {
		$("ul.sf-menu").supersubs({
			minWidth: 1,
			maxWidth: 27,
			extraWidth: .2
		}).superfish({
			pathClass: 'current',
			pathLevels: 0,
			delay: 500,
			animation: {
				opacity: 'show',
				height: 'show'
			},
			speed: 200,
			dropShadows: false,
			autoArrows: true
		});
	});
	/* This will make the Shared Files "Add File" button have a hover state */
	$("div.uploadpanel &gt; div &gt; input + div + div").hover(
		function() {
			$("div.uploadpanel div .jqbutton").addClass("ui-state-hover")
		},
		function() {
			$("div.uploadpanel div .jqbutton").removeClass("ui-state-hover")
		});
});</portal:skinfolderscript></code></pre>

<h3>Further Reading</h3>

<p>If you're serious about optimizing the speed of your mojoPortal site, I highly suggest you read the "<a href="http://www.mojoportal.com/improving-your-yslow-or-page-speed-score">Improving Your YSlow or Page Speed Score</a>" article in the mojoPortal Documentation.</p>

<p>Happy mojo-ing!</p>
<br /><a href='https://i7media.com/optimize-your-mojoportal-skin-scripts'>Joe Davis</a>&nbsp;&nbsp;<a href='https://i7media.com/optimize-your-mojoportal-skin-scripts'>...</a>]]></description>
      <link>https://i7media.com/optimize-your-mojoportal-skin-scripts</link>
      <author>joe@i7media.net (Joe Davis)</author>
      <comments>https://i7media.com/optimize-your-mojoportal-skin-scripts</comments>
      <guid isPermaLink="true">https://i7media.com/optimize-your-mojoportal-skin-scripts</guid>
      <pubDate>Tue, 31 Jan 2012 16:37:00 GMT</pubDate>
    </item>
    <item>
      <title>Form Wizard Pro Templates</title>
      <description><![CDATA[<div class="alert alert-info"><strong>Update 1/10/2012:</strong> Updated the download with a US State list question. All 50 states plus the District of Columbia are included.</div>

<p>Form Wizard Pro (FWP) is a great tool for creating ad-hoc style forms on the fly in mojoPortal. One feature that makes FWP so great is the ability to import and export Form Definitions and individual Questions.</p>

<h3>Exporting a Question</h3>

<p><img alt="Export Question Screenshot" class="floatleftimage image-left" src="data:image/png;base64,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" /></p>

<p>Exporting a Question is very simple, just click the "Export Question" link next to the question in the "Edit Form" screen. The file will be named like "FWP-Instance-NameYYYYMMDDHHMMSS-q.config." This includes the name of the FWP instance, the exact date and time you clicked the export link, and a "-q" to let you know this file is a Question, not an entire form. You can of course change the name of the file without causing any problems for importing the question later.</p>

<h3>Exporting a Form</h3>

<p><img alt="Exporting a Form Screenshot" class="floatleftimage" src="data:image/png;base64,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" /></p>

<p>Exporting an entire Form is also very simple, just click the "Export Form Definition" button at the bottom of the "Edit Form" screen. The file will be named like "FWP-Instance-NameYYYMMDDHHMMSS.config." This includes the name of the FWP instance and the exact date and time you clicked the export button. Again, changing the name doesn't harm anything.</p>

<h3>Importing a Question or Form</h3>

<p><img alt="Importing a question or form screenshot" class="floatleftimage" src="data:image/png;base64,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" /></p>

<p>Importing a Question is very straightforward. Simply click the "Browse" button and select a Question definition file from your computer and then click the "Import Question" button. You'll see the question added to the "Edit Form" screen.</p>

<p>You can import a Form Definition the same way you import a Question, except that you will want to select a Form definition file and click the "Import Form Definition" button. One very important thing to keep in mind is that importing a Form will erase all of the questions you already have on your form. Any data that has been submitted to the form will still be intact but the questions corresponding to the data will be gone so the data will be "orphaned" so you may not know what all of the responses mean.</p>

<h3>Some Form Definitions For You</h3>

<p><a class="btn btn-primary bt-lg" href="https://i7media.net/SharedFiles/Download.aspx?pageid=6&amp;mid=9&amp;fileid=91" title="Download Some Sample Form Definitions">Download</a></p>

<p>Happy mojo-ing!</p>
<br /><a href='https://i7media.com/form-wizard-pro-templates'>Joe Davis</a>&nbsp;&nbsp;<a href='https://i7media.com/form-wizard-pro-templates'>...</a>]]></description>
      <link>https://i7media.com/form-wizard-pro-templates</link>
      <author>joe@i7media.net (Joe Davis)</author>
      <comments>https://i7media.com/form-wizard-pro-templates</comments>
      <guid isPermaLink="true">https://i7media.com/form-wizard-pro-templates</guid>
      <pubDate>Tue, 10 Jan 2012 14:46:00 GMT</pubDate>
    </item>
    <item>
      <title>Using the LoginView in mojoPortal</title>
      <description><![CDATA[<p>Often times clients will want to display certain text for logged in users vs anonymous users. While this is possible using the settings on individual content modules, it is sometimes necessary to add this functionality to elements in the <code>layout.master</code>.</p>

<p>For introductory information on the <code class="language-markup">LoginView</code> control, please review the <a href="http://msdn.microsoft.com/en-us/library/ms178338.aspx">MSDN Documentation</a> for it.</p>

<p>An example scenario is: The client wants to display a Login control on every page and when the user is logged in, some links should be present in place of the login control. A title should be present above the control with the text "Please Sign In: " for Anonymous Users and the text "Welcome Back" for Authenticated Users.</p>

<p>For this scenario, the solution would be to place a LoginView control in the <code>layout.master</code> with the <code class="language-markup">mp:Login</code> control and "Returning Visitors ..." title inside the <code class="language-markup">AnonymousTemplate</code>. The links and the "Welcome Back" title will be placed in the <code class="language-markup">LoggedInTemplate</code>. You may recognize that the <code class="language-markup">Portal:WelcomeMessage</code> control uses the <code class="language-markup">OverrideFormat</code> property as discussed in our <a href="http://i7media.net/customizing-mojoportals-welcome-message-for-logged-in-users">Customizing mojoPortal's Welcome Message for Logged In Users</a> article.</p>

<pre class="language-aspnet linenums" data-rel="Anonymous Template">
<code><span class="tag">&lt;<span class="title">asp:LoginView</span><span class="attribute"> id=<span class="value">"lv1"</span></span><span class="attribute"> runat=<span class="value">"server"</span></span>&gt;</span>
	<span class="tag">&lt;<span class="title">AnonymousTemplate</span>&gt;</span>
		<span class="tag">&lt;<span class="title">h2</span><span class="attribute"> class=<span class="value">"moduletitle"</span></span>&gt;Please Sign In:</span><span class="tag">&lt;/<span class="title">h2</span>&gt;</span>
		<span class="tag">&lt;<span class="title">mp:Login</span><span class="attribute"> ID=<span class="value">"login1"</span></span><span class="attribute"> runat=<span class="value">"server"</span></span><span class="attribute"> SetRedirectUrl=<span class="value">"false"</span></span> /&gt;</span>
	<span class="tag">&lt;/<span class="title">AnonymousTemplate</span>&gt;</span>
	<span class="tag">&lt;<span class="title">LoggedInTemplate</span>&gt;</span>
		<span class="tag">&lt;<span class="title">h2</span><span class="attribute"> class=<span class="value">"moduletitle"</span></span>&gt;</span>
			<span class="tag">&lt;<span class="title">portal:WelcomeMessage</span><span class="attribute"> id=<span class="value">"WelcomeMessage1"</span></span><span class="attribute"> runat=<span class="value">"server"</span></span> 
			<span class="attribute">	RenderAsListItem=<span class="value">"false"</span></span> 
			<span class="attribute">	OverrideFormat=<span class="value">"Welcome Back {0}"</span></span> 
			<span class="attribute">	CssClass=<span class="value">" "</span></span>
			/&gt;</span>
		<span class="tag">&lt;/<span class="title">h2</span>&gt;</span>
		<span class="tag">&lt;<span class="title">ul</span>&gt;</span>
			<span class="tag">&lt;<span class="title">li</span>&gt;</span><span class="tag">&lt;<span class="title">asp:HyperLink</span><span class="attribute"> id=<span class="value">"lnk1"</span></span><span class="attribute"> runat=<span class="value">"server"</span></span><span class="attribute"> NavigateUrl=<span class="value">"~/members-only-articles.aspx"</span></span><span class="attribute"> Text=<span class="value">"Articles"</span></span>/&gt;</span><span class="tag">&lt;/<span class="title">li</span>&gt;</span>
			<span class="tag">&lt;<span class="title">li</span>&gt;</span><span class="tag">&lt;<span class="title">asp:HyperLink</span><span class="attribute"> id=<span class="value">"lnk2"</span></span><span class="attribute"> runat=<span class="value">"server"</span></span><span class="attribute"> NavigateUrl=<span class="value">"~/members-only-downloads.aspx"</span></span><span class="attribute"> Text=<span class="value">"Downloads"</span></span>/&gt;</span><span class="tag">&lt;/<span class="title">li</span>&gt;</span>
			<span class="tag">&lt;<span class="title">li</span>&gt;</span><span class="tag">&lt;<span class="title">asp:HyperLink</span><span class="attribute"> id=<span class="value">"lnk3"</span></span><span class="attribute"> runat=<span class="value">"server"</span></span><span class="attribute"> NavigateUrl=<span class="value">"~/members-only-forums.aspx"</span></span><span class="attribute"> Text=<span class="value">"Forums"</span></span>/&gt;</span><span class="tag">&lt;/<span class="title">li</span>&gt;</span>
			<span class="tag">&lt;<span class="title">portal:LogoutLink</span><span class="attribute"> id=<span class="value">"LogoutLink1"</span></span><span class="attribute"> runat=<span class="value">"server"</span></span><span class="attribute"> RenderAsListItem=<span class="value">"true"</span></span><span class="attribute"> ListItemCSS=<span class="value">" "</span></span><span class="attribute"> CssClass=<span class="value">" "</span></span>/&gt;</span>
		<span class="tag">&lt;/<span class="title">ul</span>&gt;</span>
	<span class="tag">&lt;/<span class="title">LoggedInTemplate</span>&gt;</span>
<span class="tag">&lt;/<span class="title">asp:LoginView</span>&gt;</span></code></pre>

<p>The result can be something like this:</p>

<p><strong>Anonymous</strong></p>

<p><img alt="Anonymous LoginView" src="https://i7media.com/Data/Sites/1/blogdata/loginview-anonymous.png" style="border-width: 2px; border-style: solid; width: 415px; height: 339px;" /></p>

<p>&nbsp;</p>

<p><strong>Authenticated</strong></p>

<p><img alt="Authenticated LoginView" src="https://i7media.com/Data/Sites/1/blogdata/loginview-authenticated.png" style="border-width: 2px; border-style: solid; width: 415px; height: 339px;" /></p>

<p>&nbsp;</p>

<p>Happy mojo-ing!</p>

<p>&nbsp;</p>
<br /><a href='https://i7media.com/using-the-loginview-in-mojoportal'>Joe Davis</a>&nbsp;&nbsp;<a href='https://i7media.com/using-the-loginview-in-mojoportal'>...</a>]]></description>
      <link>https://i7media.com/using-the-loginview-in-mojoportal</link>
      <author>joe@i7media.net (Joe Davis)</author>
      <comments>https://i7media.com/using-the-loginview-in-mojoportal</comments>
      <guid isPermaLink="true">https://i7media.com/using-the-loginview-in-mojoportal</guid>
      <pubDate>Mon, 08 Aug 2011 21:57:00 GMT</pubDate>
    </item>
    <item>
      <title>Customizing mojoPortal's Welcome Message for Logged In Users</title>
      <description><![CDATA[<p>Have you ever wanted to change the <a href="http://www.mojoportal.com">mojoPortal</a>&nbsp;WelcomeMessage text to display something besides "Signed In As: Joe Davis"?</p>

<p>​Well, if you have mojoPortal 2.3.6.1 or higher, it is quite easy. You can override it in your skin's <code>layout.master</code> file by setting a property on <code class="language-markup">&lt;portal:WelcomeMessage</code> like this:</p>

<p><code class="language-markup">OverrideFormat="My name is {0}"</code>, or if you only want the user name then you could put <code class="language-markup">OverrideFormat</code><code class="language-markup">="{0}"</code></p>

<p>The <code class="language-markup">{0}</code> is replaced by the user's display name.</p>

<p>I prefer <code class="language-markup">OverrideFormat="Welcome Back, {0}"</code> which displays "Welcome Back, Joe Davis" very nicely.</p>

<p>Hope this helps you out. If it did, please spread the word through Twitter or Facebook!</p>

<p>Happy mojo-ing,<br />
Joe Davis</p>
<br /><a href='https://i7media.com/customizing-mojoportals-welcome-message-for-logged-in-users'>Joe Davis</a>&nbsp;&nbsp;<a href='https://i7media.com/customizing-mojoportals-welcome-message-for-logged-in-users'>...</a>]]></description>
      <link>https://i7media.com/customizing-mojoportals-welcome-message-for-logged-in-users</link>
      <author>joe@i7media.net (Joe Davis)</author>
      <comments>https://i7media.com/customizing-mojoportals-welcome-message-for-logged-in-users</comments>
      <guid isPermaLink="true">https://i7media.com/customizing-mojoportals-welcome-message-for-logged-in-users</guid>
      <pubDate>Sat, 06 Aug 2011 17:13:00 GMT</pubDate>
    </item>
    <item>
      <title>mojoPortal: Skinning the Search Input Box</title>
      <description><![CDATA[<p>Ever wondered how to style the mojoPortal Search Input Box? I wrote a how-to on the subject late last week. I hope it helps! <a href="http://www.mojoportal.com/styling-the-search-input-box.aspx" title="http://www.mojoportal.com/styling-the-search-input-box.aspx">http://www.mojoportal.com/styling-the-search-input-box.aspx</a>.</p>

<p>Are there any other topics you would like to see in the documentation? If so, <a href="http://i7media.net/contact">send us an email</a> and we will do our best to take care of it for you.</p>
<br /><a href='https://i7media.com/mojoportal-skinning-the-search-input-box'>Joe Davis</a>&nbsp;&nbsp;<a href='https://i7media.com/mojoportal-skinning-the-search-input-box'>...</a>]]></description>
      <link>https://i7media.com/mojoportal-skinning-the-search-input-box</link>
      <author>joe@i7media.net (Joe Davis)</author>
      <comments>https://i7media.com/mojoportal-skinning-the-search-input-box</comments>
      <guid isPermaLink="true">https://i7media.com/mojoportal-skinning-the-search-input-box</guid>
      <pubDate>Tue, 24 Aug 2010 00:12:00 GMT</pubDate>
    </item>
    <item>
      <title>Using GreyBox and LightBox with mojoPortal</title>
      <description><![CDATA[<div class="txterror warning"><strong>Update March 30, 2011:</strong> As of version 2.3.6.4, mojoPortal changed from GreyBox to Colorbox, these instructions are no longer relevant.</div>

<h3>Using GreyBox</h3>

<p>mojoPortal comes bundled with <a href="http://orangoo.com/labs/GreyBox/">Greybox</a> which is a great in-site pop-up utility that can be used for displaying images and even other webpages in an in-site pop-up. It is used in the image galleries, help system, skin <span><span>previewer</span></span>, and a lot of other areas of <span><span>mojoPortal</span></span></p>

<p>You might be interested to know that you can use GreyBox in your mojoPortal site without utilizing the ImageGallery or other features of mojoPortal that use it. Simply add the <code class="language-markup">rel="gb_image[]"</code> or <code class="language-markup">rel="gb_page[]"</code> property to any link and the the link target will open in a GreyBox pop-up window.</p>

<p>For example, clicking the thumbnail below will open the full-size image in a GreyBox window:</p>

<pre class="language-markup">
<code>&lt;a href="https://i7media.com/Data/Sites/1/blogdata/lightbox-dsc06798-full.jpg" rel="gb_image[]" title="4th &amp;amp; Broadway, San Diego, CA (C) Joe Davis"&gt;
	&lt;img alt="" src="https://i7media.com/Data/Sites/1/blogdata/lightbox-dsc06798-thumb.jpg" width="133" height="100" /&gt;
&lt;/a&gt;</code></pre>

<p><a href="https://i7media.com/Data/Sites/1/blogdata/lightbox-dsc06798-full.jpg" rel="gb_image[]" title="4th &amp; Broadway, San Diego, CA (C) Joe Davis"><img alt="4th &amp; Broadway, San Diego, CA (C) Joe Davis" height="100" src="https://i7media.com/Data/Sites/1/blogdata/lightbox-dsc06798-thumb.jpg" width="133" /></a></p>

<p>The link below will open the mojoPortal website in a fullscreen GreyBox window:</p>

<pre class="language-markup">
<code>&lt;a href="http://www.mojoportal.com" rel="gb_page_fs[]" title="mojoPortal, The World's Greatest .NET CMS"&gt;Open mojoPortal in GreyBox&lt;/a&gt;</code></pre>

<p><a href="http://www.mojoportal.com" rel="gb_page_fs[]" title="mojoPortal, The World's Greatest .NET CMS">Open mojoPortal in GreyBox</a></p>

<p>There are a lot of other neat things you can do with GreyBox that you may not be aware of so I recommend checking out the <a href="http://orangoo.com/labs/GreyBox/">GreyBox</a> website for more helpful hints.</p>

<p>&nbsp;</p>

<h3>Using LightBox with MojoPortal</h3>

<p>Some people like other utilities like <a href="http://leandrovieira.com/projects/jquery/lightbox/">LightBox</a> (the jQuery version), for example. I will demonstrate to you how to use LightBox alongside GreyBox with mojoPortal.</p>

<h4>The Setup</h4>

<ol class="fancy">
	<li><span>The first step to using LightBox is to download the jQuery-LightBox release from <a href="http://leandrovieira.com/projects/jquery/lightbox/">http://leandrovieira.com/projects/jquery/lightbox/</a>. Once you have downloaded the release, extract it to your local hard drive.</span></li>
	<li>Using your favorite FTP client (mine is <a href="http://filezilla-project.org/">FileZilla</a>):
	<ol style="list-style-type: lower-alpha">
		<li style="margin-left: 0px"><span>Create a new directory under \ClientScript named lightbox and upload jquery.lightbox-0.5.min.js, jquery.lightbox-0.5.css and the images directory included in the zip to this new directory.</span></li>
		<li style="margin-left: 0px"><span>Browse to the directory containing your site's skin (\data\sites\[SiteNumber]\skins\NameOfSkin and download the layout.master file.</span></li>
	</ol>
	</li>
	<li><span>Using your favorite HTML editor (mine is <a href="http://notepad-plus-plus.org/">Notepad++</a>):</span>
	<ol style="list-style: none outside none">
		<li style="margin-left: 0px">Add the following lines to the layout.master directly after the <code class="language-markup">&lt;asp:ScriptManager</code> control
		<pre class="language-markup" data-rel="layout.master">
<code>&lt;link href="https://i7media.com/ClientScript/lightbox/jquery.lightbox-0.5.css" type="text/css" rel="stylesheet" /&gt;
&lt;script type="text/javascript" src="https://i7media.com/ClientScript/lightbox/jquery.lightbox-0.5.pack.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript"&gt;
	$(document).ready(function(){
		$('a.lightbox').lightBox({
			imageLoading:	'/ClientScript/lightbox/images/lightbox-ico-loading.gif',
			imageBtnClose:	'/ClientScript/lightbox/images/lightbox-btn-close.gif',
			imageBtnPrev:	'/ClientScript/lightbox/images/lightbox-btn-prev.gif',
			imageBtnNext:	'/ClientScript/lightbox/images/lightbox-btn-next.gif'
		});
	});
&lt;/script&gt;</code></pre>
		</li>
	</ol>
	</li>
	<li>Back in your FTP client, upload the modified layout.master file.</li>
</ol>

<h4>Using LightBox</h4>

<p><span>Now to use LightBox, all you need to do is add <em>lightbox</em> as a class on any link that you want to open in a LightBox pop-up. For Example:</span></p>

<pre class="language-markup">
<code>&lt;a href="images/image-1.jpg" class="lightbox" title="my caption"&gt;
	&lt;img src="images/image-1-thumb.jpg"&gt;
&lt;/a&gt;</code></pre>

<p>You can see more examples on the <a href="http://leandrovieira.com/projects/jquery/lightbox/">LightBox</a> website.</p>

<h4>See It In Action</h4>

<p><a class="lightbox" href="https://i7media.com/Data/Sites/1/blogdata/lightbox-dsc06798-full.jpg" rel="lightbox" title="4th &amp; Broadway, San Diego, CA (C) Joe Davis"><img alt="" src="https://i7media.com/Data/Sites/1/blogdata/lightbox-dsc06798-thumb.jpg" style="width: 133px; height: 100px" /></a></p>

<h4>Some Friendly Words of Caution</h4>

<p>Including additional javascript files in your site will make it run slower. The difference in speed may be negligible when adding just one script but don't get carried away.</p>

<p>Also, you may have noticed that I put the CSS and Images in the ClientScript\lightbox directory. I did this because I couldn't get the LightBox to work properly with those items in the \Data\Style directory like they should be. Also, I couldn't get the script to work with the CSS being loaded from the CSSHandler so I had to put a reference to the CSS file in the layout.master. This should not be done without thoroughly testing your site and making every attempt to put the CSS file where it belongs, in the CSSHandler's style.config.</p>

<h4>Conclusion</h4>

<p>In the end, I prefer GreyBox primarily because it is already built-in to mojoPortal and it does more than LightBox. If you find that you want to use something along with GreyBox, you can adapt this post to whatever tool you decide to use. It should help get you on your way.</p>

<p>Happy mojo-ing!</p>
<br /><a href='https://i7media.com/using-greybox-and-lightbox-with-mojoportal'>Joe Davis</a>&nbsp;&nbsp;<a href='https://i7media.com/using-greybox-and-lightbox-with-mojoportal'>...</a>]]></description>
      <link>https://i7media.com/using-greybox-and-lightbox-with-mojoportal</link>
      <author>joe@i7media.net (Joe Davis)</author>
      <comments>https://i7media.com/using-greybox-and-lightbox-with-mojoportal</comments>
      <guid isPermaLink="true">https://i7media.com/using-greybox-and-lightbox-with-mojoportal</guid>
      <pubDate>Wed, 28 Jul 2010 20:41:00 GMT</pubDate>
    </item>
    <item>
      <title>Lifetime Licensing on mojoPortal Pro Products</title>
      <description><![CDATA[<p>I noticed recently that Joe Audette has changed the licensing on the "Pro" products offered on the mojoPortal website to be lifetime licenses. Previously, the licenses allowed updates for 1 year but Joe never really enforced that.</p>

<p>This is really nice for the community as we don't have to worry about renewing our licenses and purchasing upgrades. Pay for it once and forget it. Sounds pretty darn good to me.</p>
<br /><a href='https://i7media.com/lifetime-licensing-on-mojoportal-pro-products'>Joe Davis</a>&nbsp;&nbsp;<a href='https://i7media.com/lifetime-licensing-on-mojoportal-pro-products'>...</a>]]></description>
      <link>https://i7media.com/lifetime-licensing-on-mojoportal-pro-products</link>
      <author>joe@i7media.net (Joe Davis)</author>
      <comments>https://i7media.com/lifetime-licensing-on-mojoportal-pro-products</comments>
      <guid isPermaLink="true">https://i7media.com/lifetime-licensing-on-mojoportal-pro-products</guid>
      <pubDate>Fri, 09 Jul 2010 21:24:00 GMT</pubDate>
    </item>
    <item>
      <title>mojoPortal Page Titles</title>
      <description><![CDATA[<div class="txterror info"><strong>Update:</strong> Joe Audette has decided to implement this in the next version of mojoPortal, due in a couple of weeks. He is updating the &lt;portal:PageTitle control with this functionality.</div>

<p>I have from time to time needed to show a page's title within the content as a heading. The controls that come with mojoPortal don't really allow for this but I have come up with a handy little control that will show the Page Title on the page and allow you to choose how the text is rendered.</p>

<p>To get started, create two files; PageTitle.ascx and PageTitle.ascx.cs. Place both of these files in the &lt;siteroot&gt;\Controls\Custom directory (Note: You will have to create the "custom" directory). The code for the files is as follows:</p>

<pre class="language-aspnet" data-rel="PageTitle.ascx">
<code>&lt;%@ Control Language="C#" AutoEventWireup="true" CodeFile="PageTitle.ascx.cs" ClassName="PageTitle.ascx" Inherits="Controls_PageTitle" %&gt;
&lt;asp:literal ID="litPageTitle" runat="server" /&gt;</code></pre>

<pre class="language-csharp linenums" data-rel="PageTitle.ascx.cs">
<code>using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using mojoPortal.Web;
using mojoPortal.Web.UI;
using mojoPortal.Web.Framework;
using mojoPortal.Business;
using mojoPortal.Business.WebHelpers;

public partial class Controls_PageTitle : System.Web.UI.UserControl
{
	protected void Page_Load(object sender, EventArgs e)
	{
		PopulateControls();
	}

	private void PopulateControls()
	{
		PageSettings currentPage = CacheHelper.GetCurrentPage();
		if(currentPage == null){ return; }
		if(currentPage.PageTitle == "")
			litPageTitle.Text = currentPage.PageName;
			else
				litPageTitle.Text = currentPage.PageTitle;
	}
}</code></pre>

<p>To use the control, place the following in your layout.master directly after <code class="language-markup">&lt;%@ Master</code>...</p>

<pre class="language-aspnet">
<code>&lt;%@ Register Src="~/Controls/custom/PageTitle.ascx" TagName="PageTitle" TagPrefix="cc1" %&gt;</code></pre>

<p>Now place the following where you want the Page Title to appear in the layout.master.</p>

<pre class="language-aspnet">
<code>&lt;cc1:PageTitle id="PageTitle1" runat="server" /&gt;</code></pre>

<p><strike>Come back soon to see a full description of how this all works.</strike><br />
I have decided not to describe the full functionality of this control as it is fairly self-explanatory and because Joe Audette has implemented this functionality into mojoPortal. You can use the <code class="language-markup">&lt;portal:PageTitle</code> control after the next release.</p>

<p>Happy mojo-ing.</p>
<br /><a href='https://i7media.com/mojoportal-page-titles'>Joe Davis</a>&nbsp;&nbsp;<a href='https://i7media.com/mojoportal-page-titles'>...</a>]]></description>
      <link>https://i7media.com/mojoportal-page-titles</link>
      <author>joe@i7media.net (Joe Davis)</author>
      <comments>https://i7media.com/mojoportal-page-titles</comments>
      <guid isPermaLink="true">https://i7media.com/mojoportal-page-titles</guid>
      <pubDate>Tue, 18 May 2010 23:12:00 GMT</pubDate>
    </item>
    <item>
      <title>Skinning the mojoPortal Admin Toolbar</title>
      <description><![CDATA[<p>When Joe Audette released mojoPortal 2.3.3.4 he wrote an article called "<a href="http://www.mojoportal.com/creating-an-admin-toolbar.aspx">Creating An Admin Toolbar</a>" in the <a href="http://www.mojoportal.com/creatingskins.aspx">mojoPortal Skinning Documentation</a>. The toolbar uses jQuery to easily show and hide itself and is skinned entirely by using CSS.&nbsp;</p>

<p>If you follow Joe's directions or you are using a skin that came with 2.3.3.4 with the toolbar enabled, you will have a toolbar that looks like this:</p>

<p><img alt="Admin Toolbar" src="http://www.mojoportal.com/Data/Sites/1/media/mojoadmintoolbar.gif" style="width: 640px; height: 36px" /></p>

<p>While this serves a perfectly good function, there are a few things about it I don't like. It is gray and there are no icons depicting the links. I happen to like icons and bright colors so, I came up with this:</p>

<p><img alt="admin toolbar" src="https://i7media.com/Data/Sites/1/blogdata/AdminToolbar.JPG" style="width: 640px; height: 31px" /></p>

<p>Skinning the toolbar was very easy because it is all controlled by CSS. This article is meant to help you understand how to skin the toolbar but if you like what I've done, you can just download it <a href="https://i7media.com/SharedFiles/Download.aspx?pageid=6&amp;fileid=26&amp;mid=9">here</a>.</p>

<h4>Create a copy of the jqtoolbar UI resources</h4>

<p>The CSS and images for the toolbar are located in the \Data\style\jqtoolbar directory. The CSS is in the style.css file so I created a copy of this file and named it style-7.css.</p>

<h4>Set site skin to use new CSS file</h4>

<p>For the skin to use the new css file (style-7.css), I had to change the line below in my style.config file located inside of my skin directory (\data\sites\1\skins\myskin). Notice I am referencing style-i7.css and not style.css.</p>

<pre class="language-markup">
<code>&lt;file cssvpath="/Data/style/jqtoolbar/style-i7.css" imagebasevpath="/Data/style/jqtoolbar/"&gt;none&lt;/file&gt;</code></pre>

<h4>Change the background color of the toolbar</h4>

<p>To change the color of the toolbar, I simply changed the background-image CSS rule on the div#toolbar and div#toolbarbut selectors to a background-color rule and set the color to #FFFF99.</p>

<h4>Add icons to the links</h4>

<p>To add the icons, I added an attribute to each of the controls for the links in the layout.master. To keep the markup valid, I used the <em>rel</em> attribute. I set the value of the rel attribute to a descriptor of the link itself (e.g.: rel="admin" for the admin link). I then used this new attribute to apply a different background image to each link.</p>

<p>It is important to note that this approach will not work with IE6 as it doesn't understand how to select an element based on it's attributes. The next release of mojo will allow you to use the CssClass attribute on the controls so that you can style them more easily. The value of the CssClass attribute will be added to the classes for the link.</p>

<h5 class="visuallyhidden">Link Controls in Layout.master file</h5>

<pre class="language-aspnet linenums" data-rel="Link Controls in Layout.master file">
<code>&lt;portal:AdminMenuLink id="lnkAdminMenu" runat="server" rel="admin"/&gt;
&lt;portal:FileManagerLink id="lnkFileManager" runat="server" rel="filemgr"/&gt;
&lt;portal:NewPageLink id="lnkNewPage" runat="server" rel="addpage" /&gt;
&lt;portal:PageEditFeaturesLink id="lnkPageContent" runat="server" rel="pageedit"/&gt;
&lt;portal:PageEditSettingsLink id="lnkPageSettings" runat="server" rel="pagesettings"/&gt;</code></pre>

<h5 class="visuallyhidden">CSS for icons</h5>

<pre class="language-css linenums" data-rel="CSS for icons">
<code>div#toolbar a[rel=admin]{
	background: transparent url('administration.png') no-repeat scroll left center;
	padding-left: 32px;
}

div#toolbar a[rel=addpage]{
	background: transparent url('newpage.png') no-repeat scroll left center;
	padding-left: 32px;}

div#toolbar a[rel=filemgr]{
	background: transparent url('filemgr.png') no-repeat scroll left center;
	padding-left: 32px;
}

div#toolbar a[rel=pageedit]{
	background: transparent url('editpage.png') no-repeat scroll left center;
	padding-left: 32px;
}

div#toolbar a[rel=pagesettings]{
	background: transparent url('pagesettings.png') no-repeat scroll left center;
	padding-left: 32px;
}</code></pre>

<p>The icons are from the <a href="http://www.everaldo.com/crystal/">Crystal Project</a> but you can use any you like.</p>

<h4>Hiding the menu by default</h4>

<p>Personally, I do not want the toolbar to be displayed all the time. I would rather have a link which opens the toolbar when I need it. To accomplish this, I moved the <strong>display:none;</strong> rule from the <em>div#toolbarbut</em> selector to the <em>div#toolbar</em> selector.</p>

<h4>Conclusion</h4>

<p>I hope this gives you a head-start on skinning the new admin toolbar. Keep in mind that all of this was accomplished easily with CSS.</p>

<p>Happy mojo-ing!</p>

<p><a alt="download" class="download-button-mojo" href="https://i7media.com/SharedFiles/Download.aspx?pageid=6&amp;fileid=25&amp;mid=9" title="Download This Admin Toolbar Skin">&nbsp;</a></p>
<br /><a href='https://i7media.com/skinning-the-mojoportal-admin-toolbar'>Joe Davis</a>&nbsp;&nbsp;<a href='https://i7media.com/skinning-the-mojoportal-admin-toolbar'>...</a>]]></description>
      <link>https://i7media.com/skinning-the-mojoportal-admin-toolbar</link>
      <author>joe@i7media.net (Joe Davis)</author>
      <comments>https://i7media.com/skinning-the-mojoportal-admin-toolbar</comments>
      <guid isPermaLink="true">https://i7media.com/skinning-the-mojoportal-admin-toolbar</guid>
      <pubDate>Thu, 21 Jan 2010 19:30:00 GMT</pubDate>
    </item>
    <item>
      <title>Oh, The Things to Come</title>
      <description><![CDATA[<p>I was browsing through the SVN update log for mojoPortal this afternoon and I am very excited about some of the things Joe Audette is working on for the upcoming release.</p>

<p>I started browsing around the demo site (<a href="http://demo.mojoportal.com">http://demo.mojoportal.com</a>) so I could see some of the new changes in action. The list below are just the ones I found interesting, there are a lot more changes coming in the next release.</p>

<ol class="fancy">
	<li><span>A new File Manager has been added and the old one has been re-factored. The new File Manager is very nice and is a big improvement over the old one. It uses Javascript whereas the old one doesn't so Audette decided to keep the old File Manager and allow users to switch back and forth between the old and the new. Usability is very big to mojoPortal and as a matter of fact, mojoPortal can be used entirely without Javascript if one chooses to do so. There is also a new link&nbsp;with the Administration and Edit Page links&nbsp;which opens the&nbsp;File Manager in a graybox. This allows for easy access&nbsp;to the File Manager at all times.<br />
	<img alt="" height="424" src="https://i7media.com/Data/Sites/1/blogdata/upcoming2334_filemanager.jpg" width="550" /></span></li>
	<li><span>Adding users to Roles via the Role Administration admin page is a lot easier thanks to a new selector dialog. Previously, users not in a role were listed in a single drop-down list which made it very difficult to use when a site had a lot of users.<br />
	<img alt="" height="122" src="https://i7media.com/Data/Sites/1/blogdata/upcoming2334_addusertorole.jpg" width="550" /></span></li>
	<li><span><span><span><span><span><span><span><span><span><span><span><span><span><span><span><span>mojoPortal</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span> uses a CSSHandler to combine &amp; minimize CSS files. This process makes caching easier and allows sites to load faster. The url to CSSHandler has been http://somedomain.com/data/sites/[sitenumber]/skins/[skinname]/CSSHandler.ashx. This required the&nbsp;Data directory or at least the skin directory to be executable which is not ideal.&nbsp;The CSSHandler URL has been&nbsp;moved to the&nbsp;root of applicaiton in the next release. Problem solved.</span></li>
	<li><span>A new SQL Query tool will allow developers to easily see and modify data in the database from the website. This tool must be enabled by a site administrator in the web.config prior to it being available for use. It will allow developers to save queries which can be used to populate date in a custom module for quick and dirty data access.<br />
	<img alt="" height="438" src="https://i7media.com/Data/Sites/1/blogdata/upcoming2334_querytool.jpg" width="550" /></span></li>
	<li><span>The main administration links (admin, add page, edit page, page settings) used to be just that, links. If a site designer like yours truly wanted to display the links in a drawer or some other type of cool UI, custom code would have to be developed to create the links manually. This next version will include support for controls for each link which means it will be possible to declare them directly in the layout.master and they will show/hide automatically according to internal logic. See number 6 for what this really means.</span></li>
	<li><span>The <a href="http://plugins.jquery.com/project/mbextruder">jQuery Extruder</a>&nbsp;plugin has been included with mojoPortal which allows for an example of using a widget with the admin links.<br />
	<a href="https://i7media.com/Data/Sites/1/blogdata/upcoming2334_admindrawer-closed.jpg"><img alt="" height="102" src="https://i7media.com/Data/Sites/1/blogdata/upcoming2334_admindrawer-closed.jpg" width="224" /></a>&nbsp;<a href="https://i7media.com/Data/Sites/1/blogdata/upcoming2334_admindrawer-open.jpg"><img alt="" height="108" src="https://i7media.com/Data/Sites/1/blogdata/upcoming2334_admindrawer-open.jpg" width="225" /></a></span></li>
	<li><span>The blog is getting some attention this go 'round. Community feedback suggested a preview draft option, paging, option to display only blog titles in the main blog page, and a few other improvements. All of them, that I noticed anyway, made it into the core! Check out the <a href="http://demo.mojoportal.com">demo</a>, to get a better idea of what has changed with the blog.</span></li>
	<li><span>The Search facility will now provide a link to download items in ShareFiles modules. Previously, just a link to the Shared Files module was provided.</span></li>
</ol>

<p>Rather impressive what Joe Audette can get done in just a few weeks, isn't it?</p>

<p>What improvements or features are you waiting to see implemented? <a href="http://www.mojoportal.com/buy-joe-a-coffee-product.aspx">Why not buy Joe Audette a Coffee to show him your appreciation?</a>&nbsp;</p>
<br /><a href='https://i7media.com/oh-the-things-to-come'>Joe Davis</a>&nbsp;&nbsp;<a href='https://i7media.com/oh-the-things-to-come'>...</a>]]></description>
      <link>https://i7media.com/oh-the-things-to-come</link>
      <author>joe@i7media.net (Joe Davis)</author>
      <comments>https://i7media.com/oh-the-things-to-come</comments>
      <guid isPermaLink="true">https://i7media.com/oh-the-things-to-come</guid>
      <pubDate>Fri, 08 Jan 2010 20:56:00 GMT</pubDate>
    </item>
    <item>
      <title>Adding You Are Here Message to mojoPortal Breadcrumbs</title>
      <description><![CDATA[<p>mojoPortal provides a nifty little BreadCrumb control which will show the path to the current page. We have used the control in several of our sites and from time to time, our customer ask us to put the "You Are Here"&nbsp;or some other text in front of the breadcrumbs.</p>

<p><img alt="Screenshot of You Are Here breadcrumbs" src="https://i7media.com/Data/Sites/1/blogdata/youarehere.jpg" style="margin: 5px; width: 365px; height: 74px;" /></p>

<p>So that's simple, right? Well, yes and no.&nbsp;The BreadCrumb control doesn't&nbsp;have the&nbsp;ability to add&nbsp;a message to the&nbsp;crumbs so we have to add the text in the layout.master of our skin. Okay, that's simple too but the&nbsp;difficulty comes with making the message invisible when the page settings have breadcrumbs turned off or there aren't any to display.</p>

<p><img alt="" src="https://i7media.com/Data/Sites/1/blogdata/youarehere_nologic.jpg" style="margin: 5px; width: 345px; height: 73px;" /></p>

<p>The solution is to create a User Control with all of the logic needed to display the Breadcrumb Message when needed.</p>

<h3>The User Control</h3>

<p>For simplicity of this article, we will create our user control in a folder named <em>CustomControls</em> which we placed inside the Controls folder (\Controls).</p>

<h4>The YouAreHere.ascx file</h4>

<pre class="linenums language-aspnet" data-rel="YouAreHere.ascx">
<code>&lt;%@ Control Language="C#" AutoEventWireup="true" CodeFile="YouAreHere.ascx.cs"
	ClassName="YouAreHere.ascx" Inherits="Controls_YouAreHere" %&gt;
&lt;asp:literal ID="lblYouAreHere" Text="You Are Here:" runat="server" Visible="false" /&gt;</code></pre>

<p>Not much magic here, just importing the necessary namespaces and creating our Label which will end up being the Message text. Notice the Label has the Text argument assigned and it is set to "You Are Here:". We will discuss this further later in the article.</p>

<h4>The YouAreHere.ascx.cs file (code behind)</h4>

<pre class="linenums language-csharp" data-rel="YouAreHere.ascx.cs">
<code>using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

using mojoPortal.Web;
using mojoPortal.Web.UI;
using mojoPortal.Web.Framework;
using mojoPortal.Business;
using mojoPortal.Business.WebHelpers;


public partial class Controls_YouAreHere : System.Web.UI.UserControl
{
	private string sMessage;

	public string Message
	{
		get { return sMessage; }
		set { sMessage = value; }
	}

	protected void Page_Load(object sender, EventArgs e)
	{
		if (sMessage != null)
		{
			lblYouAreHere.Text = sMessage;
		}

		PageSettings currentPage = CacheHelper.GetCurrentPage();
		if (currentPage == null) { return; }
		if ((currentPage.ShowBreadcrumbs) || (currentPage.ShowChildPageBreadcrumbs))
		{
			lblYouAreHere.Visible = true;
		}
	}
}</code></pre>

<h4>Using the User Control (layout.Master file)</h4>

<pre class="language-aspnet">
<code>&lt;%@ Register Src="~/Controls/CustomControls/YouAreHere.ascx" TagName="YouAreHere" TagPrefix="i7" %&gt;</code></pre>

<pre class="language-aspnet">
<code>&lt;i7:YouAreHere id="YouAreHere1" Message="How You Got Here:" runat="server" /&gt;</code></pre>

<p>The first line should be placed after the <code class="language-markup">&lt;%@Register</code>... line. It registers the User Control on the page.</p>

<p>The second line should be placed directly before the <code class="language-markup">&lt;portal:Breadcrumbs</code>... line. This is the User Control Tag which will show the Message. Optionally, you can set a custom message using the <em>Message</em> argument.</p>

<p><img alt="" src="https://i7media.com/Data/Sites/1/blogdata/youarehere_custommessage.jpg" style="margin: 5px; width: 375px; height: 72px;" /></p>

<p><a alt="download" class="download-button-mojo" href="https://i7media.com/SharedFiles/Download.aspx?pageid=6&amp;fileid=26&amp;mid=9" title="Download the You Are Here control">&nbsp;</a></p>

<p class="txterror info"><strong>Note:</strong> i7MEDIA assumes no liability or responsibility for the use of this code. We do however want to help you if you need it so don't hesitate to <a href="https://i7media.com/contact">ask us</a>.</p>

<p>Happy mojo-ing!</p>
<br /><a href='https://i7media.com/adding-you-are-here-message-to-mojoportal-breadcrumbs'>Joe Davis</a>&nbsp;&nbsp;<a href='https://i7media.com/adding-you-are-here-message-to-mojoportal-breadcrumbs'>...</a>]]></description>
      <link>https://i7media.com/adding-you-are-here-message-to-mojoportal-breadcrumbs</link>
      <author>joe@i7media.net (Joe Davis)</author>
      <comments>https://i7media.com/adding-you-are-here-message-to-mojoportal-breadcrumbs</comments>
      <guid isPermaLink="true">https://i7media.com/adding-you-are-here-message-to-mojoportal-breadcrumbs</guid>
      <pubDate>Wed, 30 Dec 2009 20:20:00 GMT</pubDate>
    </item>
    <item>
      <title>mojoPortal content features inside UI Widget</title>
      <description><![CDATA[<p>With the release of mojoPortal 2.3.0.4 came the addition of Content Templates for FCKeditor and the examples included with mojoPortal for using the Content Templates were widgets like jQuery Accordian and Tabs. I like the Accordian and Tab widgets quite a bit because they allow me to easily include a very professional looking UI elements with very little work. Examples of the jQuery Accordian and Tabs are below:</p>

<p><a href="http://josephmdavis.com/image.axd?picture=jquery-accordion-clip.png"><img alt="jquery-accordion-clip" height="234" src="https://i7media.com/Data/Sites/1/blogdata/jquery-accordion-clip.png" style="border: 0px none ; display: inline;" title="jquery-accordion-clip" width="292" /></a><img alt="screenshot of jquery tabs" height="127" src="https://i7media.com/Data/Sites/1/blogdata/jquery-tabs-clip.png" width="255" /></p>

<p>The first idea I had for using the widgets was to include a couple different contact forms on one page, each with its own tab. So I set out creating the 3 different Contact Form instances that I needed. I was doing this for my church so I had one for the Pastor, Christian Ed. Director and the Secretary. I then created an HTML Content instance on the Contact Us page and added the Tabs UI widget to the HTML content. Now this is when I ran into a problem; there isn't any way to reference a mojoPortal module from within another module, so I had no way to put the Contact Form instances inside the UI widget.</p>

<p>I looked throught the documentation on the mojoPortal site but couldn't find anything that I thought would lead me in the right direction so I posted a question in the forum asking for help. Joe Audette, mojoPortal's founder and chief developer, responded with a very elegant solution. All I needed to do was create a my own module that included the Tab widget with the Contact Form instances wrapped up inside. Being the great guy he is, Joe provided me with the necessary code to make this work. The process is very simple:</p>

<ol>
	<li>Create a text file named whateveryoulike.ascx</li>
	<li>Paste this code into the text file:
	<pre class="language-aspnet linenums" data-rel="whateveryoulike.ascx">
<code>&lt;%@ Control Language="C#" ClassName="MultiModuleInTabsModule.ascx" Inherits="mojoPortal.Web.SiteModuleControl" %&gt;
&lt;%@ register assembly="AjaxControlToolkit" namespace="AjaxControlToolkit" tagprefix="portal" %&gt;
&lt;%@ Import Namespace="mojoPortal.Business" %&gt;
&lt;%@ Import Namespace="mojoPortal.Business.WebHelpers" %&gt;
&lt;%@ Import Namespace="mojoPortal.Web.Framework" %&gt;
&lt;%@ Import Namespace="mojoPortal.Web.Controls" %&gt;
&lt;%@ Import Namespace="mojoPortal.Web.Editor" %&gt;
&lt;%@ Import Namespace="mojoPortal.Net" %&gt;

&lt;script runat="server"&gt;
	protected void Page_Load(object sender, EventArgs e)
	{
	}
&lt;/script&gt;

&lt;div class="mojo-tabs"&gt;
	&lt;ul&gt;
		&lt;li&gt;&lt;a href="#tab1"&gt;Tab 1&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;&lt;a href="#tab2"&gt;Tab 2&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;&lt;a href="#tab3"&gt;Tab 3&lt;/a&gt;&lt;/li&gt;
	&lt;/ul&gt;
	&lt;div id="tab1"&gt;
		&lt;asp:Panel ID="pnlModuleWrapper1" runat="server"&gt;
			&lt;portal:ModuleWrapper ID="ModuleWrapper1" runat="server" ConfigureModuleID="15" /&gt;
		&lt;/asp:Panel&gt;
	&lt;/div&gt;
	&lt;div id="tab2"&gt;
		&lt;asp:Panel ID="pnlModuleWrapper2" runat="server"&gt;
			&lt;portal:ModuleWrapper ID="ModuleWrapper2" runat="server" ConfigureModuleID="16" /&gt;
		&lt;/asp:Panel&gt;
	&lt;/div&gt;
	&lt;div id="tab3"&gt;
		&lt;asp:Panel ID="pnlModuleWrapper3" runat="server"&gt;   
			&lt;portal:ModuleWrapper ID="ModuleWrapper3" runat="server" ConfigureModuleID="17" /&gt;
		&lt;/asp:Panel&gt;
	&lt;/div&gt;
&lt;/div&gt;</code></pre>
	</li>
	<li>Find the ModuleID for each Contact Form instance and modify the ModuleWrapper controls in the code above to match the correct ModuleIDs.
	<div class="alert alert-info"><strong>Note:</strong> To find the correct ModuleIDs all you need to do is hover over the Edit or Settings link for the Contact Form instances and then look in your browser's status bar. The ModuleID will show as mid=SomeNumber.</div>
	</li>
	<li>Save the file you created in the first step to the "~\data\sites\[sitenumber]\Modules" directory. (Note: you can save the file to any directory in the mojoPortal application but I think it is best that you save it to a directory under your actual site in the Data directory because this will prevent it from being overwritten or accidentally deleted during upgrades.</li>
	<li>Install your newly created module via the Administration &gt; Advanced Tools &gt; Feature Installation/Configuration screen inside of your mojoPortal site.
	<ol>
		<li>This is rather straight forward. All you have to do is give your Module a name, and input the correct path in the <em>Control Source</em> field. You may want to create your own GUID to make sure that it is unique.</li>
	</ol>
	</li>
	<li>Now you can add your new module to any page you like just as you would add any other module to a page.</li>
</ol>

<p>Here’s a screenshot of the end result:</p>

<p><img alt="screenshot of content module inside jquery tabs" height="273" src="https://i7media.com/Data/Sites/1/blogdata/contactforminsidetabs.png" width="300" /></p>

<p>Happy mojo-ing!</p>
<br /><a href='https://i7media.com/mojoportal-content-features-inside-ui-widget'>Joe Davis</a>&nbsp;&nbsp;<a href='https://i7media.com/mojoportal-content-features-inside-ui-widget'>...</a>]]></description>
      <link>https://i7media.com/mojoportal-content-features-inside-ui-widget</link>
      <author>joe@i7media.net (Joe Davis)</author>
      <comments>https://i7media.com/mojoportal-content-features-inside-ui-widget</comments>
      <guid isPermaLink="true">https://i7media.com/mojoportal-content-features-inside-ui-widget</guid>
      <pubDate>Mon, 23 Nov 2009 17:28:00 GMT</pubDate>
    </item>
    <item>
      <title>SlideShow Crazy!</title>
      <description><![CDATA[<p>The latest release of mojoPortal (v 2.3.1.7) added functionality to use a SilverLight&nbsp;SlideShow with the mojoPortal image gallery and a new feature for a slide show based on your Flickr account. Both of these features are very cool and I was excited to see them added to&nbsp;the mojoPortal core but when Joe Audette told me of another SlideShow feature he is adding to mojoPortal, I was jumping up and down and now I can't wait for the next release!</p>

<p>Joe is adding the ability to the HTML Feature of mojoPortal to display any element in a Slide Show. All the user has to do is type out their text, separating each "slide" with DIV or P elements and mojoPortal handles the rest! You can mix text with images within your SlideShow!</p>

<p>Here is a short video on it so you can see what I mean:</p>

<p><object classid="clsid:6bf52a52-394a-11d3-b153-00c04f79faa6" codebase="http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701" height="500" style="width: 500px; height: 500px;" width="500"><param name="url" value="https://i7media.net/Data/Sites/1/00-i7MEDIA/mpslideshow.wmv" /><param name="src" value="https://i7media.net/Data/Sites/1/00-i7MEDIA/mpslideshow.wmv" /><embed height="500" src="https://i7media.net/Data/Sites/1/00-i7MEDIA/mpslideshow.wmv" style="width: 500px; height: 500px;" type="application/x-mplayer2" url="https://i7media.net/Data/Sites/1/00-i7MEDIA/mpslideshow.wmv" width="500"></embed></object></p>

<p>Try doing something like this with the built-in functionality of DNN!!! I can tell you now that you can't!!! This is a prime example of why mojoPortal is so far ahead of everyone else in the OpenSource .NET CMS game. One of the most important purposes of a CMS is supposed to be to allow users without a lot of web knowledge the ability to quickly and efficiently update/manage a website. This simple but very elegant feature will help those users keep their website up to date with a Web 2.0 feel.</p>

<p>I can't wait for the next release of mojo!!!!</p>
<br /><a href='https://i7media.com/slideshow-crazy'>Joe Davis</a>&nbsp;&nbsp;<a href='https://i7media.com/slideshow-crazy'>...</a>]]></description>
      <link>https://i7media.com/slideshow-crazy</link>
      <author>joe@i7media.net (Joe Davis)</author>
      <comments>https://i7media.com/slideshow-crazy</comments>
      <guid isPermaLink="true">https://i7media.com/slideshow-crazy</guid>
      <pubDate>Mon, 14 Sep 2009 20:34:00 GMT</pubDate>
    </item>
  </channel>
</rss>