The CMF

The CMF is the last Content Management Framework I have created, and am using for most of the websites I code (including this site).

It will be released as GPL when I will have time to package it properly and write some documentation (the code is extensively commented already). The CMF is stable and mature, and already being used in production. It runs very different sites, which shows its versatility. It is also fully multilingual.

The target audience is developers who want to code flexible web applications on top of a framework providing all tools necessary for a dynamic site.

The CMF could be described as a set of libraries and plugins, tied together by a flexible architecture. But the best way to describe it is to list its some of its features:

Mature and stable

The CMF is used in production successfully in sites I did as a freelancer or a contractor. It is compatible PHP4 and PHP5. It sports a great number of features such as objects abstraction (on top of a database or flat file storage layer), granular search, XHTML compatibility, URL rewriting, RSS feeds, PDF creation, banking gateway, web APIs, newsletters, emailer, code highlighting, AJAX integration, output handlers, etc... It is user friendly, with a powerful HTML editor, a spellchecker, date selectors, simple tokens and even in-site editing... The code is heavily commented, and the system is very secure and memory optimized.

Loose architecture

The CMF can be very minimalist, or very complete. A minimal site would be a tree of pages, and maybe a user system. No databases are required. A few core modules such as a page editor or a sitemap can be used. A more complete site would include a database component, some extra modules, and probably some custom module (which would be the application for instance). Eventually, the site can become multilingual, and even generate its translation files automatically. In fact, a CMF site can be moved to another web hosting with no configuration changes at all. Plenty of modules already exist, such as forum, gallery, news, blog, media galleries, shopping cart, etc...

Config file driven

To create a CMF site, only three files need to be edited: a config file, a template and a CSS file. Eventually, the developer will add some custom modules. The site parameters and pages are all set into the single auto-generated config file. The config file is in fact a big PHP array, that can be edited by hand (while setting up the site) or by the CMF (while updating the site). Template and modules can use all the CMF features, and even change its behaviour. Parameters can be set at application, module, node or call level. Nodes can be nested at will.

Object abstraction

The CMF sports an extensive data abstraction layer, on top of a storage layer. The storage can be done in a database, or flat files, or both. The data structures are simple PHP arrays with a number of optional parameters. A set of funtions is provided to transparently manage the objects, or records (add, edit, delete, search, export...). Also, an extensible module automatically provides an admin interface to manage the records. A great number of data fields are available, from string to integer or float, date, money, password, WYSIWYG text as well as picture (and thumbnails or graphic effects), file, and even MP3 or geographical coordinates... Even better, the database tables are created automatically from the definition of your data objects!

Extensive set of plugins

A large number of plugins have been coded for the CMF. Some core plugins such as variables formatting, user rights, page editor, menu generator, automatic backup but also some more specific plugins such as DHTML and AJAX tools, encryption system, mailer, page navigation, captcha, web APIs (Google map...), tabs, upload system, syntax highlighting and other tools. All the plugins can function as-is, or can be customized with an extensive set of optional properties.

Modern and versatile

In order to be suitable for any type of site, the CMF is flexible. It for instance can work with a different directory layout, can use mod_rewrite natively, use flat files instead of databases, be moved from hosting to hosting easily, etc... To accomodate the developer, the CMF site is an object that can be loaded anywhere, or output different types of content such as XHTML, RSS, XML, JSON, plain text, print format and PDF (click to see an example). The site is composed of nodes, that can be included anywhere. A node can be a page, or a part of page or a module; nodes can be recursively embedded, even in flat content pages. An extensive set of properties for each node allow the developer to create many entry points to manage the site content.

And more... a lot more...

This is only an introduction to the CMF. I hope to release it soon, and describe it more in depth. Bear in mind that the target audience is professional developers with a fair knowledge of PHP: it is a framework, not a ready-to-use CMS, although setting up a site is real fast once you know the system

The CMF, it is also in numbers:

all files                : 2401 
php files                : 266 
php lines of code        : 105709 
PHP functions            : 1038 
PHP classes              : 250    

The CMF, as seen by inclued:

inclued.jpg