I am currently building my second site using what I have found to be the single best free CMS product available – Concrete5.
To quote from the Concrete5 website:
CMS Made for Marketing – Built for Geeks.
This slogan rings so true – the first website I built in Concrete5 is maintained by someone with limited technical know-how, and management of their content has been a breeze. The current website I’m building around Concrete5 is maintained by designers at a design agency – and they’re having absolutely no problem finding their way around the fantastically simple to use management interface.
The Content Manager
From the content manager’s point of view, Concrete5 is simple to use. Almost all website maintenance is performed on what is essentially a live looking version of the site with the addition of a toolbar across the top section:

Once the “Edit Page” button is clicked the main content of the site remains, laid out the way it will be for the final view with a few subtle changes.
A context sensitive menu is activated and all editable blocks of the page are highlighted to allow addition of what is known as a “content block” to that specific area.
A wide collection of pre-defined blocks are included catering for Content (edited using a WYSIWG editor), Image, Menu/Navigation, Flash, Video with an extensive list.
Adding to this list is incredibly easy for any developer with a little knowledge of Object Oriented PHP development, but more on that in the next section.
The last feature worthy of note for content editors is the revision control facility provided by Concrete5, where all edits can be fully previewed and then saved, including a descriptive comment to be associated with that particular revision of the page.
A full dashboard is also available for more advanced management of the site, including statistics, full site structure (moving, adding and deleting pages), the media library along with user, plugin and theme management.

Concrete5 uses a consistent approach and very clean design across the management user interface making it an absolute pleasure to use.
The Web Developer
Concrete5 in my opinion has some of the cleanest PHP code I’ve seen in any open source project. The entire thing is very well designed, uses Object Oriented PHP and is split up so that the core of the system is self contained and any additional plugins, themes and modules can all live outside of the core area.
The area most developers will initially start work with is the theme area. The default themes are clean and designed for very easy extension. They are simple but effective div based layouts and nice simple and easy to understand CSS code.
Adding a new “editable” area to a theme is as simple as a block of PHP within your HTML that looks like:
<div id=”sidebar”>
<?php
$as = new Area(‘Sidebar’);
$as->display($c);
?>
</div>
That simple block of code in one place only handles the rendering of the content on the end user site and the edit functionality on the administration side – making all theming as simple as possible.
Extending Concrete5
The simplest form of extending Concrete5 is with “Page Types”. A Page type handles a particular format/layout of a page, for instance the site I am currently working on has three layout types. ”3-column”, “2-column” and “full” representing 1, 2 or 3 column layouts. Each of these are defined within the dashboard and a single template PHP script for each is required to handle the actual layout.
More advanced extension is possible, with a huge gallery of available extensions already contributed by the community including a simple integrated e-Commerce solution.
On my previous project I developed a plug-in to handle automatic inclusion of Vimeo content along with a LightBox video plug-in used for the video content that was hosted in-house.
Conclusion
I suggest taking a look at http://www.concrete5.org and explore the screencasts and regular videos/tutorials and wealth of information available on the forums there.
I really hope you consider Concrete5 for your next project that requires a serious, yet simple and extendible Content Management System.
Note: I am not involved in the core development of Concrete5, however I am available for consulting and development on any Concrete5 project. Please contact me if you would like to discuss your requirements or receive a quote.