Over a million developers have joined DZone.

Really simple CMS with FW/1 and ColdFusion ORM

DZone's Guide to

Really simple CMS with FW/1 and ColdFusion ORM

· Web Dev Zone ·
Free Resource

Access over 20 APIs and mobile SDKs, up to 250k transactions free with no credit card required

I recently wanted to create a simple, lightweight Content Managed site and decided to use FW/1 and of course ColdFusion's excellent ORM capabilities.

FW/1 is incredibly easy to get started with, you just need to download a single cfc and get Application.cfc to extend it.

As my site will have dynamic pages which can be added or deleted at any time, then I don't want to have to create specific views and controllers (as I don't know what the pages are yet!), luckily F/W1 has a onMissingView method which is called when a view is not found.

In the onMissingView I'm going use EntityLoad to get the page content from the database. To do that I'll need the define my Content object.

* I am the Content object which maps to the contents database table
component persistent="true" table="contents"
  property name="id" column="content_id" generator="native";
  property name="guid" column="content_guid"; // used for pretty urls
  property name="title" column="content_title";
  property name="content" column="content_content";

I'll need a view page to show the page content stored in the database.

I'm a simple view to display CMS content 


It's a good idea to trap any requests to pages that no longer exist, so we need a 404 page.

I'm a simple 404 view
<h1>Page Not found</h1>
<p>Sorry, the page you requested (#getFullyQualifiedAction()#) has not been found.</p>

A layout would be kinda useful!

I am the default layout
<ul id="nav">
<cfloop array="#rc.menu#" index="local.thispage">
  <li><a href="#buildURL( local.thispage.getGuid() )#">#local.thispage.getTitle()#</a>

<div id="content">#body#</div>


Now we need to set up the Application.cfc

component extends="org.corfield.framework"

  APPLICATION_ROOT = GetDirectoryFromPath( GetCurrentTemplatePath() );
  this.name = ReReplace( UCase( APPLICATION_ROOT ), "[^A-Z]", "", "all" );
  this.mappings["/model"] = APPLICATION_ROOT & "model";
  // ORM Setttings
  this.datasource = "simplecms";
  this.ormenabled = true;
  this.ormSettings.flushAtRequestEnd = false;
  this.ormSettings.cfclocation = this.mappings["/model"];
  // FW/1 Setttings
  variables.framework = {
    generateSES = true

  // executes when a view is not found
  any function onMissingView( required rc )
    var filter = {
      guid = getFullyQualifiedAction()
    rc.Content = EntityLoad( "Content", filter, true );
    if ( !IsNull( rc.Content ) )
      // use the content view to display content
      return view( 'content' );
      // create a 404 response header
      var pc = getpagecontext().getresponse();
      pc.getresponse().setstatus( 404 );
      // set the page title
      rc.Content = EntityNew( "Content" );
      rc.Content.setTitle( "Page Not Found" ); 
      // display the 404 page
      return view( 'notfound' );
  // executes per request
  void function setupRequest()
    // get all pages for the navigation
    rc.menu = EntityLoad( "Content" );

Finally, we need to create a blank index.cfm file in the application root. Now when you hit a URL such as; http://localhost/simplecms/index.cfm/my-new-page. You'll get the 404 page. If you add a page to your database with the content_guid field set to "my-new-page.default", it will magically appear.

Obviously my application is more complex than this, but I thought it would be a good example of how simple it is to build a fairly powerful system quickly in ColdFusion and I haven't mentioned a beanFactory once!

#1 for location developers in quality, price and choice, switch to HERE.


Published at DZone with permission of

Opinions expressed by DZone contributors are their own.

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}