Concrete5 CMS Provides Basic Templates, Powerful API

By Jeff Cogswell  |  Posted 2009-06-01

Concrete5 CMS Provides Basic Templates, Powerful API

Over the years, I've spent a great deal of time working with various CMS packages on multiple levels--as a basic user, as a developer trying to extend them and as an administrator doing installation and configuration. I've seen just what a pain they can be. And so I was immediately intrigued when I saw these statements on the "About" page for an open-source CMS package called Concrete5:

--"Building and maintaining a site in Drupal or Joomla is far too complex and intimidating for a regular person.

--"Sure it's great you can get started quickly, but if you want to do anything more than blog, Wordpress is like using a hammer to drive screws.

--"With Concrete5, you get the best of both worlds. Anyone can start making their own Website in seconds, and the editing experience is easier than using a blog; just click on what you want to change. Developers still get a flexible and robust framework for building sophisticated Web applications. Web geeks can build anything they might with Drupal or Joomla."

Does the formerly commercial Concrete5 live up to hype? eWEEK Labs put the CMS through its paces to find out and to determine whether its ready for enterprise use.

Sample Sites

When fighting (er, I mean working) with a new CMS (content management system), one of the best ways to get a basic feel for its capabilities is by checking out other sites built in it. To be fair, this isn't going to show you everything. (Perhaps the developers included several components that aren't really being used much.) But it's a start.

Most of the well-known CMS sites include a "showcase" section, and is no exception. One of Concrete5's showcase sites is for a design agency, and one features photography.

The two sites are drastically different, which is a good sign for a strong CMS system. One is primarily an advertisement site, featuring mainly static pages; the other is a dynamic site showing recently created content.

A good CMS system should be able to create custom, static pages that are nice-looking and fit into the overall look of your site, as well as dynamic pages containing content requested by the users of your site. For example, when you visit an page, our CMS does what nearly all other news sites do: It notes what article you are requesting, takes our template and inserts the article along with additional appropriate material (ads, links to related content and so on).

To see a slide show of Concrete5, click here. 

The real power in any CMS is its ability to handle dynamic pages like those you find on eWEEK. The reason I say this is a lot of non-CMS software can be used to develop static pages. Dishing out content dynamically, however, requires a good bit of server-side functionality.

Unfortunately, there are some really simplistic server-side systems calling themselves CMSes that do dish out dynamic content. But sites built from such software generally look the same: Basically, they look like cheap blogs with a giant header, a blog item on the left and a list of links on the right. But as you can imagine, our needs here at eWEEK are significant: We're dealing with hundreds of thousands of articles, thousands of images, many ads-the works. Can Concrete5 CMS handle something as big as eWEEK?


You can install the open-source Concrete5 for free yourself on your own servers, or you can pay $15 per month to host your site on Concrete's servers. (The organization also provides premium services such as custom hosting and other professional services for additional cost.)

I installed the software myself. It requires PHP and MySQL. Because of those requirements, I installed it under an Apache HTTP Server. (I didn't test whether it would run under Microsoft IIS with PHP and MySQL installed, but it should work just fine.)

Installation couldn't be easier. The first screen asks you for the usual information: a name for your site; the name of your MySQL server and login; and so on. Like a lot of good software today, Concrete5 evaluates your current configuration and informs you if you're missing anything.

Once installation was complete, I had a basic site with some basic pages built in by default.



By default, Concrete5 comes with a couple of very basic templates (or what Concrete5 calls themes): Plain Yogurt and Green Salad. These are nice-looking but very basic templates that strongly resemble your typical run-of-the-mill Wordpress site. But they're enough to get you going if that's all you're looking for.

Initially, a new Concrete5 site comes with several pre-built pages (such as an About page and a Contact page) that can function either as starting points for other pages or at least examples.

I was able to quickly get up to speed on customizing a site with Concrete5. What's kind of cool is the software includes a pretty nice WYSIWYG editor that lets you edit existing pages on the fly. (They call this "in-context" editing.) If you're not logged in, you just see the page as any visitor to your Website would. But if you're logged in, the page has an additional toolbar across the top, which lets you access administrative features, including the WYSIWYG editor. Then you can simply edit the page, fixing or changing the text.

The only catch is you're limited to the fixed overall layout as determined by the template. But even then, you can modify various parts of a page, adding and changing text and various items known as Blocks. Blocks are basically components such as sections of HTML, a survey or a YouTube video. Concrete5 comes with about 20 different types of Blocks that you can drop onto your page, and, if you're a PHP developer, you can pretty easily create more.

But that brings me to a major question: Do you need to be a PHP developer to create a site with Concrete5?

The answer is both yes and no. If you're not a PHP developer, you can still create a site. But you'll be limited to the basic layouts that the templates offer.

You can add Blocks to pre-existing column definitions, such as a two-column layout with a narrow column on the left and a wide column on the right. But if you want to fully customize a site, you'll need to either find somebody who has created a template with the layout (or can create one for you) or write PHP code yourself.

That said, the amount of PHP needed to customize Concrete5 is actually minimal. A company using Concrete5 would want to either find a nicely designed theme that fits their needs or hire somebody to create one for them. But from there, the programmer wouldn't be needed--a business person would have an easy time adding new content to the site without the need for the PHP programmer's help, thanks to the simple WYSIWYG editor and the ease with which you can create new pages.

But the PHP programming aspect is actually where Concrete5 really shines. The API is full-featured, robust and extremely easy to use. Looking at the PHP code for existing Blocks, for example, I can see they're very straightforward. You don't need to bend over backward to get the code to do what you want.

But the big thing competitors have that Concrete5 doesn't yet is a massive following with huge numbers of free and premium templates. In the CMS world, templates rule. A good, unique template is what makes a site shine, and template availablity and quality is a major criterion when a company is selecting a CMS. Concrete5 does have its fair share of templates (Google found a lot for me), but not as many as systems such as WordPress.

I predict that this will change over time. Concrete5's size of user-provided templates will grow, in part thanks to its nice API for PHP programmers. As a result, the number of Concrete5 installations will grow as well.

Page Creation

Creating new pages is easy (and no PHP knowledge is required). Once you're logged in and you have the toolbar across the top of your pages, you simply click Add Page.

You create a new page by specifying its name, its alias name (for simple or "vanity" URLs) and some metadata information-but not the actual content yet. Then you click Create, and you're brought to the full WYSIWYG editor, showing your page just as it will look in the end with the columns and images based on the template (but without any text yet). This is where you add your text and other Blocks. It's a pretty clever approach.

Then you click on an area and the Add New Block form opens. You choose the type of Block you want, based on what's available in the system (such as HTML, Form and Flash Content). You can also add from the Concrete5 Marketplace, where you'll be connected to the main Concrete5 site, letting you add other types of Blocks. Depending on the type of Block you choose, you'll get a screen where you customize the Block. Click Add, and the Block will appear on the page.

Click Publish, and you're done. The page automatically appears in your site, and even appears automatically in a navigation bar (which, again, is customizable).



Concrete5 includes an excellent administrative section that gives users full control over sites. This includes a user and security system where you can create users, and even includes a registration page where users can register themselves. You can specify types of user registration---disabled (no self-registration), enabled, enabled with e-mail validation, and enabled with manual approval. The software even supports OpenID, and you can let users create profiles with an "Enable public profiles" option in the control panel.

When multiple users are logged in at once, the software supports page locking so that only one user can modify any given page at any given time. You can even create groups of users, assigning rights to various groups. This way, some users can make sitewide changes while other users are limited on what they can change (if anything at all).

Also included is a file manager, which is based on a set system (as opposed to a folder system) where you create sets and can move your images and media content into one or more sets.

Setting group permissions is a little odd at first, although it's easy once you know how to do it. In the Users and Groups section, there's a tab called Groups for creating and modifying groups. In this form you really specify only the name and description. In the File Manager section is a tab called Access. This is what you use to assign permissions to the groups. You have to first add the group you just created so it appears on this page. Then you can choose permissions: View site files, Seach files, Edit files, Admin files and Add files.

Additionally, you'll find features such as powerful version-tracking, as well as a nice content-scheduling feature that lets you schedule content to go live at a later date.

Testing Concrete5's Mettle

As with many open-source CMS packages, Concrete5 allows you to create only one site per installation. To create multiple sites, you need to install the software again in a separate directory. I don't see that as a big issue because, typically, a site equals the base URL (for example,'s site is, and our other sites exist on separate servers or directories).

But what about sites? So far I've mainly touched on pages that are essentially static pages. is huge. We have thousands upon thousands of pages of content. These pages are stored in our own CMS, and generated based on our own templates. We don't have hundreds of thousands of static pages. Can Concrete5 handle something like

The developer of Concrete5, who is very active in the discussion boards, told me that Concrete5 could handle a site like But for a site like, at least two additional pages would be needed: a page in the administrative section where authors and editors can enter content directly without using the WYSIWYG editor (similar to the entry form in blogging software) and a page that would display the content. The page would fit right in with the existing template, and would display the requested article based on the URL.

Both pages would have to be created with some PHP programming, of course. So, out of the box, Concrete5 doesn't automatically do what an site needs, but it could be coded to do so with the help of the system's robust API.

For a demo of Concrete5, click here.

Rocket Fuel