.NET CMS based bonanza

t all began when I decided it was time to do a radical update of my company web site.  The old site was a simple ASP.NET based site, in the beginning, several years ago, it was hosted on a shared hosting service with the somewhat doubtful name: discountasp.net (well it worked and it was affordable :)).

Later on we got our own dedicated server with the Canadian iWeb and it was just transfered to that (by the way, I can strongly recommed these guys – servers simply just works – and quite affordable if you don’t want to go into the cloud!).   The original site had no CMS capabilities and was just raw ASP.NET pages with little or no page logic.

Originally the plan was to use our own CMS part of our NeoCompleo product, but due to constant development on this and the urgent need of a new company site – I took the decision to create a new site using one of the free CMS .NET based systems on the market.   I have to say, I’m not a designer – I’m not a webguy – I’m a Microsoft .NET developer, so yes I know how to create software (including web solutions) but I’m certainly no graphics wizard – or insane pixel-css-fanatic.

Umbraco-My-Heart

I’d tried Umbraco a couple of times, but it never really made me … how should I put it … do a James Brown scream of joy.   I managed several times to install Umbraco packages, that simply put down the whole system.  Ending up uninstalling it and wasting several of hours – and at the same time not experienced anything else but a heart-breaking experience.  Not wanting to spent several hours on Umbraco again, I looked for other systems.  It had to be .NET based, so I could easily extend it with new functionality and apply the design I wanted (not being a designer it had to be easy).

PHPish?

Well, to be completly honest, I also tried the PHP route just to see what it offered:   Joomla and Drupal – but certainly I wouldn’t want to hack around in PHP – and why would I even think of running a PHP based CMS when running on a Microsoft IIS.  WordPress was a also a no-go.

So the route was clear:  it had to be a Microsoft based CMS system, preferably .NET based, free of charge and extendable.

DotNetNuke’m

Years ago I had played around with DotNetNuke, not being to crazy about it (in my mind it also sounds more like the game Duke Nukem).  But I took a look at their site.   They’re offering a free community edition and it is .NET based.  Yihau, here we go – but then I quickly discovered that they also offered a Professional edition … of course.  So you get a cribbled version but can get a Professional edition with “High performance caching” (remembering that the performance wasn’t too good when I tried it last time) for a bargain of $2.998/year.

Ok, that was a no-go.

Orchward

There must be other .NET based alternatives, so I discovered the Orchard CMS.  It did indeed seem very intuitive but in some areas also limiting. Indeed a candidate as it was free.   But after playing around it seemed a little strange and limiting in the page design, so not feeling too comfortable about this choice, I looked further around.

nojoPortal

By accident I stumbled on the mojoPortal CMS.  This is a very easy .NET based CMS system, that just worked out of the box.  It had all the features I was looking for and ready templates, a decent number of skins.   I played around with the system and made the choice – I had a new site up and running in a couple of days.
It did the job, but making the styles/skinning do what I wanted – required me to do a remote connection to my server and editing the numerous CSS files – not being able to do style changes within the system.  Further more I couldn’t customize the search functionality and even though I managed to create a slightly new skin, I at the same time managed to destroy the skin of the management part.

Composite C1

I had actually settled for the system and its weaknesses until a friend of mine mentioned the danish Composite C1 CMS.  I knew it by name – and one of my old colleagues had been involved with the company.  I’d previously ruled it out in my search of a CMS, because in my hurry I’d mistakenly categorized it as being commercial.   So when my friend suggested it, we both had to check out their license again.  Sure, it had been a commercial product but recently Composite changed their strategy to go Open Source.  Open Source with a minor catch – a few modules are commercial and you therefore have to pay for them.   These modules are:

Event calendar ($100):  I had no immediate use of this

Extranet ($1600):  Protecting pages, by exposing pages only to users logged into the system – a nice feature, however not directly a need for my company site.  But for other projects this would probably be a must.  The price is in the high end – but if you are in need of such functionality, you should probably be able to spare the $1600 on that.

Versioning ($2500): This modules makes it possible to handle versioning of pages.  In my case, I could easily live with one version – that is actually two versions, a non-published version and a published version.  So no immediate need for that.

Newsletter ($1000): Enabling you to create mailinglists and sending out newsletters.  We’re not doing that – and if we were, we’d probably not do it through a CMS anyway.

  • All other modules are free, including:
  • Blog
  • News
  • Forms
  • Localization support
  • Page comments
  • Add this / Facebook support
  • Quick Poll
  • Search functionality
  • Youtube
  • and lots more …

So I decided to take it for a spin, just by adding a test site and installing it from the gallery (you can also do it from WebMatrix).  So here’s a little Composite C1 review.  Note:  I’m not affiliated with Composite nor sponsered in any way, so my opinion described here, describes my genuine feelings about the system.

Waouw, what an intuitive system.  Maybe due to the fact, that I’d been through all the other systems before – but it looked so much like Umbraco.  However, the user interface was so much easier to understand and everything I tried just worked.

The installation was quite smooth, but what mystified me at first, was that it didn’t ask me of any connection to a database?!  All other systems demanded, either to install a SQL CE / SQL Server or connect to a remote SQL server (ahem, and those using MySQL … I won’t even mention :)), whereas Composte C1 just installed.

The secret here is, that the pages in Composite are stored in XML files – no need for fetching pages through a database.  This gotta give some performance and then there’s no need for advanced caching mechanisms as e.g. in DotNetNuke’m.

XSLT / ASP.NET MasterPages or Razor

During the installation you have to choose whatever path that suits your needs (or competences).  This is either XSLT, ASP.NET MasterPages or Razor based site.   I’m not masochistic so I’ve naturally not selected XSLT.  I’ve had too much experience in the ASP.NET masterpages field so I’ve chosen to go the Razor way, that enables you to do CMS the MVC (Model-View-Controller) based way.   Using the Razor syntax you can very easy insert functionality directly into your pages.

The Userfriendly Interface

It is very rare that you come about to use a web application, that is so close to desktop applications as Composite C1 is.  It does indeed feel like you’re using a non-web application.   When you open a page for edit, you simply get a new tab window displaying the page (there’s got to be some advanced MDI things going on here, I can’t imagine myself wanting to develop such functionality without any kind of third party suite e.g.  DevExpress/Infragistics/Telerik).  You can seemlessly change through the opened pages, making it very easy/fast to move content between pages.

The user interface is based on a left part consisting of navigation bar (as you might know it from Microsoft Outlook or the numerous of component suites).  In the navigation bar you choose the area in which you want to work.

In the screenshot above, you see the site layout in the navigation panel to the left.  The right part is one of the pages I’ve opened for editing.  The editor is not as full featured as you could wish for – it is not like Telerik’s RAD editor.  But I quickly found out, that this is not quite as important as the fact – that it actually validates the content before saving it.  So if you e.g. switch to source mode (where you can do your HTML editing), you will not be able to do illegal HTML formatting, as you’re able to in all the other systems I’ve tried.  This is definately a big ++.

Uploading images is a breeze (in the Media part of the navigation bar).   You can even upload multiple images (though they have to be zipped).   Composite, you could look at the multiple file upload as in the different ASP.NET component suites from e.g. Telerik/Devexpress that features easier multiple file upload.  I tend to upload files seperatly, rather than bothering to go to the file explorer to zip the files.  But hey, I can live with that.

A nice thing when insert images, is that you can of course group your images into folders and sub-folders – yes, if you like you can go absolutely crazy with folder-structures.  The great thing is, that the probability of having to insert multiple images into a page from the same folder is usually very high.  Composite C1 automatically defaults (opens recursively) to the last open folder, so you don’t have to dig three-four miles down into your folder-hierachy.

Customizing the styles – skins where are you?

If you’re expecting a skin-paradise, you should probably choose WordPress or alike.  During the installation you’ll get a few choices on a quick layout.  This might seem a little disappointing at first, but I’d rather have something I can understand (I’m not having a CSS-fetish) and extend.  So the standard layout is based on app. 5-6 css files that can easily be editied in the system – yes, in this system!  You don’t have to go remote-desktopping or uploading css files.

Extra functionality – installing modules

Going for the Systems section you can install one of the many free modules (and also trial versions of the commercial ones mentioned above).
Modules are presented in packages, that are easily installed e.g. if you want a drop-down menu style navigation (as on www.trigemini.dk):

it’s just a matter of selecting the module and installing it.   In the default installation there isn’t that many pre-installed modules – so if you’re going to create a couple of sites you’d wish that you could select multiple packages to install at the same time.

 

Creating functions – C# functions!

These modules are based on XSLT and or C# functions.  What is really nice, is that you can create your own functions in C# – right within the CMS system, without ever going to the server to copy assemblies.   E.g. I know I’m not ever going to remember to update how old I am (listed in my “Bio” page).  So it would be nice, if that value was automatically calculated.  Here you can quickly create a function from the “Functions” in the navigation bar.

Here I’ve simply created a static class with a single static method named “Age”, that will take a DateTime specifying a date and return the number of years since that date.   Could most probably have been done nicer/smarter, but this was a very quick test.

If functionality is dependent on external assemblies, you can just add assembly references from the “Assembly References” tab – and also note the syntax highlighting editor (a micro-mini-Visual-Studio).

Ok, so now the function is declared.  But you also need to specify how the parameters are transfered to the function, when the function is added to a page.   This is done on the “Input Parameters” tab:

Here you specify the name, the actual label when presented for the “user” (in that case myself :)) and additional help text.  Further more you can here choose which kind of editor that is going to be used (“Parameter presentation” section).  So in my example it makes good sense to use a DateSelector for the DateTime parameter.

Adding the function is rather simple.   You just go the page where you want the function to be called and set the cursor at the desired location.  From the toolbar you select “Insert” and choose “Function…”:

Then you will be presented with a dialog where you select the function, after you’ve chosen the desired function another dialog appears where you specify the necessary input arguments:

The left part of the dialog showing a list of the necessary input parameters (and optional parameters if any).   In the right side of the dialog you change the values of the selection parameter.   You then click OK, and the function is inserted into the page:

This box appears wherever you insert a function and you can also see parameter values without having to switch to source view.  Very funny, because this is extremely close to how I’ve implemented functions in my own CMS system (though I didn’t show the parameter values).   To edit the value you simply double click the box and you return to the previous dialog (mentioned above).

Composite knows how to deal with AppDomains

One thing I really like (and appreciate) is that you can change almost anything without going to the server.  The “System” part is actually also a kind of file explorer to the whole CMS system, where you are able to upload/delete and even edit files.   Ok, so you upload something to the “Bin” folder – and the system will most probably crash … right?   No, Composite C1 continues to work – so I believe they know how to correctly use AppDomains – a rare thing to see … kudos Composite!

Localization is a breeze

Performing localization was a must for me.  Indeed Composite C1 does a good job here – of course you don’t get anything translated, you’ll have to do that yourself (except if you’d choose to install a module, that will enable your end users to translate the pages using Microsoft Translate).

You simply go to the “System” section in the navigation bar and by adding a languge (simple right click and choosing add language on context menu), you’ll be presented with a dialog where you can select the languages of your site.

You then just switch the language you are currently working on, in the lower right corner of the window:

All non-translated pages are indicated with a special icon, so it is easy to see what you need to translate.   Each page is a copy of the original page, so it’s just to go for it and translate.

Aaaaaouuu … I feel good lalalalalahlah… lah …

Humming James Brown, while transfering my initial new site from mojoPortal (now nojoPortal), doing localization – I quickly decided to revive my personal blog (this one you’re reading :)).  In its early life, it was a WordPress based blog – good system … but too PHP-ish for me.  So continuing with James Brown I quickly created this blog, as a new Composite C1 site with the Blog module.  This is also pretty easy.

Just install the Blog module and In the “Data” section you can add the different tags for your blog entries.   Create a page to be the blog page (showing the latest entries) and acting as the main page.   Below this page you’ll get a folder “Blog entries” where you by right-clicking just choose “Add Blog Entry” and continue by writing the blog entry.   Each entry will automatically be filled in folder corresponding to the year/month of the entry.

You even have the ability of inserting functions in your blog entries as they are identical to normal pages.   E.g. using the SyntaxHightlighter module, you will be able to present source code listings in your blog, using syntax highlighting in just a matter of very few clicks.

“Come on … you got to have experienced at least something bad!”

The only real initial problem I’ve had with Composite C1 was during the first installations.   I got some errors but I quickly discovered, that it was related to access rights on the installation folder.  Giving the Network Service account full permission solved all problems and made everything work just smoothly.

Ok, a couple of times I’ve experienced that Internet Explorer hangs in the administration (using IE9).  I’ve not tested using Firefox or Chrome – so until otherwise proven I’ve settled with the fact that this is a problem in IE9 and not with Composite.

A few times I’ve also experienced that the MDI comes out of sync.  E.g. you click save on a page, and the “Publish” button should become visible … but it doesn’t.   Or you’ve changed a page and saved it, the icon indicating the page is dirty should disappear … but it doesn’t.  However I’ve only seen this twice during the couple of weeks I’ve been using the system and both times I solved this by using the built-in refresh functionality.

Conclusion

If I had the time, I’d probably chosen Umbraco – because of its 100% Open Source model.  But then again, it doesn’t seem easy to find documentation (and yes, Composite could also do better in that department).   The pros for Umbraco is the high number of developers and it also does better in speed in the backend, where Composite C1 sometimes can seem a little slow.  But they also have to manage the MDI like user interface, that Umbraco doesn’t have.

I’ve also chosen the Extranet commercial module (trial), but didn’t make it work 100%.   The concept seems nice, but I’ll hesistate investing in it as I couldn’t make it work as easily as the all the other parts of the system – and probably develope something similar myself.   I’d originally hoped I could’ve been using Composite C1 for my e-learning courses but because of the Extranet problems + pricing I’ll probably develop the new version without a CMS system.   Again to be fair, I tried the same functionality in Umbraco, and it most certainly wasn’t better in that department.   I guess you just have a put a little more time into it, if you want such kind of functionality in either of these systems.

Composite C1 looks a lot like Umbraco, so the question is – who looked at who when they implemented it?  I really don’t care, I just want something that works, that’s stable and intuitive.  Here Composite clearly wins.   To be fair, I’ve tried Umbraco a couple of times after I’ve chosen Composite C1 – and yes, then Umbraco already seems easier to grasp … but it’ll probably still be my second choice … for the time being.

Ok, so I’ve developed a CRM (Customer Relationship Management) / HRM (Human Resource Management) system during the last years. This also has a builtin CMS part. On numerous occations I’ve asked myself, should I continue this way – or should I instead incorporate it in a more well-established CMS system. Well, competing on the CMS functionality – and especially after experiencing the Composite C1 UI, I’m having these thoughts again. Do what you can do best … why should I compete with functionality in a system that has more +10 years of experience only with CMS … so maybe in the future you’ll see the product of my company incorporated in a CMS system .