March 9, 2010

Concrete5 is an open source PHP-based content management system. The look and feel of the application is very nice. It makes use of lightboxes to display forms and the administration section is very stylish.

For a developer, the learning curve is a tad steeper than I would have liked. The first problem is documentation. Concrete5 has the same problem as many other open source applications I have used. Development on the application and bug fixing seems to take priority over documentation. There is a section on the C5 site that lists all the classes, properties and methods of the application, but it lacks detail. Arguments and return values are often not included or explained very well. I spent a lot of time searching and posting to the forums. Community response was pretty good, though.

On top of that, the entire application uses OO and MVC. Even though I’m a .Net developer, my PHP style has always been top down, function based programming. I don’t really like how OO is done in PHP currently. So, it took a bit of getting used to especially since I don’t have an advanced IDE for PHP. No intellisense for me. Bummer!

The first key to mastering C5 is understanding how the templates work. I was actually really impressed. There are just some nuggets of PHP to put in the HTML. There’s even a video on the website that shows you how to convert any layout to a C5 template. Very cool! (I still don’t quite get Page Types, though.)

Then, I had to play with some of the blocks. The blocks that generate links for the main menu and links to other pages actually work pretty slick. Creating pages and setting page permissions also didn’t take long too figure out. So far, so good.

Now, how do I bolt on something new? That’s where Single Pages can come in. Create a single page under the site map section of the Admin panel. Then, you can create a file in the single_pages directory with the same name. This file gets included into the template automatically by C5. User permissions and everything all take effect. That made it really easy for me to get started with my project without having to wire up a bunch of stuff. I even got to write the addon in my preferred style (I wasn’t stuck doing OO and MVC for my piece).

My project was a document management system. I leveraged the existing groups and users to control access to files that were stored on the filesystem. Admins could upload and assign access. Users could sign in and see docs assigned to their group and specifically to them. I was even able to modify the user admin section of C5 to handle attributes for my app without too much trouble. The only thing I had to watch out for was my SQL statements. I had to make sure I was referencing my addon database explicitly enough so the system wouldn’t try to run queries against C5’s content database.,

As a content management system and as a development platform, Concrete5 gets one thumbs up from me. (It would have received two if the docs were better.)