Mura CMS Full Day Training Course on April 21, 2010

How would you like to spend a full day with the folks who created Mura CMS from the ground up? Are you in or around the Minneapolis, Minnesota region ... and if not, can you get there by April 21, 2010?

Well, Team Mura recently announced they would be offering an in-depth, full-day "Programmers Guide to Mura CMS" on Wednesday, April 21st, 2010. This is technically a "cf.Objective() 2010 Pre-Conference" event, however, you don't have to attend the full conference to take advantage of this great opportunity.

Here are a few of the topics that will be covered:

  • Programmatically working with content in Mura CMS
  • Working with Mura CMS objects
  • Understanding the Mura CMS event model
  • Integrating Existing or 3rd Party Applications
  • Building Mura CMS Plugins
  • Extending and customizing Mura CMS while staying on the upgrade path

This full day course will be limited to the first 20 students and costs only $500. Considering the number of Team Mura developers that will be on hand, you probably won't be able to find a better student to instructor ratio. Oh, and for what it's worth, I'll be there too!

Before you say no to this awesome deal, I ask you to take something else into consideration. Have you ever attended a training event only to go back to your office, sit at your desk and not truly applied the newly learned knowledge? If you are a web site developer and have either looked at, used Mura CMS, or are even a seasoned Mura CMS developer and want to build sites more efficiently while allowing your clients the ability to manage their own content ... then you will most definitely be able to bring what you've learned back to your office and apply it to your job the very next day. Yes, I mean that if you attend on Wednesday, by Thursday you will be more productive, period.

Again, only the first 20 students will be accepted, so register now before it's too late!

Using jQuery to Pass an Index Value to a Shadowbox.js Gallery

I ran into a bit of a hair-pulling incident recently and I really couldn't find any help on the web with this one. So I thought I'd share my frustration and the solution I came up with in case anyone else runs into a similar problem ... or heck, maybe you've got a better solution for me. In short, I needed to be able to pass an index value to Shadowbox.js when a gallery was launched so that it would begin at the desired position. However, I personally find it more interesting to understand the evoution of the problem and the eventual solution. If you're not like me, feel free to jump down to the jQuery and HTML code below.

The Problem Challenge

Well, this all started out when one of my clients wanted one of those fancy-dancy "hover-over-a-group-of-thumbnails-and-swap-a-medium-sized-image" thing-a-ma-bobs. Trust me, this was not the challenge ... using a few lines of jQuery and fancy-dancy-be-done.

Then, after looking things over a bit, the client wanted to be able to click on the thumbnail and open a modal window of the original, much larger, image. Again, no worries ... using a bit of Shadowbox.js magic, and client-be-happy.

Finally, after reviewing my jQuery/Shadowbox/programming magic, the client was happy ... but they wanted one more thing ... to be able to click on the medium-sized image and have it launch a modal window of the original, much larger, image too. So, after a little extra thought and tweaking around, I got it working ... well, sort of.

Here's the Deal

Everything worked just fine except for the fact that if I enabled the 'continuous' attribute so that people could click "Next" and "Previous" links, something odd occurred.

If I clicked a thumbnail, the Shadowbox opened and did its thing as expected. If there were four (4) image thumbnails, then when the modal window opened, the "Next" and "Previous" links would cycle through four (4) images. But when I clicked the medium-sized image, the larger version of the image would appear twice in the modal window for a total of five (5) images.

Anyway, I realized fairly quickly that by default, Shadowbox creates a cached array of things such as all links with a 'rel' attribute of 'shadowbox' when the page loads. You can easily override this feature in the Shadowbox init() method by setting the 'skipSetup' attribute to true. But that's not what I really needed, or wanted, to do. I already had the thumbnails working and just wanted to get the 'Medium' sized image to also open the Shadowbox.

The My Solution

Ultimately, I needed a way to keep track of the index of each Shadowbox link element so that I could use it when calling a Shadowbox function I hadn't used before called "Shadowbox.open()." I knew there just had to be a way of passing the index value to Shadowbox so that way when the modal window would open, it would just cue up to the cached index in Shadowbox.

So I created a custom attribute for the "a" link of the thumbnail images called "idx" and since I was already outputting the thumbnails from a query, this was pretty easy to do. However, since I was using a ColdFusion loop to output an array of the images, I couldn't just use the index value of the loop since ColdFusion arrays start at 1 while just about every other programming language, including JavaScript, have their arrays start at zero (0). So for you ColdFusion peeps, just remember you'll want to add your own "counter" variable that starts at zero and then increment it at the end of each iteration of the loop.

Once I had an attribute I could access using jQuery, I knew I was in business. The next thing I needed to find out was how to pass this index value to Shadowbox. Again, nothing on the web helped me out here. I did stumble across someone's post in the Shadowbox forum about how they modified the source code to accommodate something like this, but I chose not to go that route. In addition, this was a site using Mura CMS and I really didn't want to make any alterations to any included third-party code if I really didn't have too.

After studying the Shadowbox source code for a bit, I found this line of code in the Shadowbox.open() method (around line 2122):


// is it a link?
if(isLink(obj)){
    if(typeof obj.shadowboxCacheKey == 'undefined' || typeof cache[obj.shadowboxCacheKey] == 'undefined'){
        // link element that hasn't been set up before
        // create an object on-the-fly
        obj = this.buildCacheObj(obj, opts);
    }else{
        // link element that has been set up before, get from cache
        obj = cache[obj.shadowboxCacheKey];
    }
}

Notice the "shadowboxCacheKey" bit? Bingo! Now I knew all I needed to do was tweak my jQuery code to add this sweet little attribute to the link and then call the Shadowbox.open() method along with some options to tell Shadowbox which gallery I wanted to use and at what index to begin! Can you tell I was a little excited?

So instead of continuing to bore the crap out of you, I'll just go ahead and show you what I came up with.

The jQuery


$(document).ready(function() {
    $(".imageThumb").hover(
        function() { // handlerIn
            var mediumImage = $(this).find('a').attr('medium');
            var imgLink = $(this).find('a').attr('href');
            // this holds the 'Shadowbox' cacheKey index value!
            var imgIndex = $(this).find('a').attr('idx');
            $('#swapImg').attr({src:mediumImage}).fadeIn(800);
            $('#swapLink').attr({href:imgLink,idx:imgIndex});
            return false;
        }
    );

    $("#featuredImage >
a#swapLink").click(function(event) {
        event.preventDefault();
        // grab the 'Shadowbox' cacheKey index value
        var idx = $('#featuredImage').find('a').attr('idx');
        // now add the index key to the link so that when we call open, it knows this link already exists
        this.shadowboxCacheKey = idx;
        Shadowbox.open(this,{gallery:"products",continuous:true});
    });

});

The HTML


<div id="imageThumbs">
    <div class="imageThumb"><a rel="shadowbox[products];options={continuous:true};" idx="0" href="img1.jpg" title="" medium="img1-med.jpg"><img src="img1-thumb.jpg" alt="" width="70" height="70" /></a></div>
    <div class="imageThumb"><a rel="shadowbox[products];options={continuous:true};" idx="1" href="img2.jpg" title="" medium="img2-med.jpg"><img src="img2-thumb.jpg" alt="" width="70" height="70" /></a></div>
    <div class="imageThumb"><a rel="shadowbox[products];options={continuous:true};" idx="2" href="img3.jpg" title="" medium="img3-med.jpg"><img src="img3-thumb.jpg" alt="" width="70" height="70" /></a></div>
    <div class="imageThumb"><a rel="shadowbox[products];options={continuous:true};" idx="3" href="img4.jpg" title="" medium="img4-med.jpg"><img src="img4-thumb.jpg" alt="" width="70" height="70" /></a></div>
</div>
<div id="productImages">
    <div id="featuredImage"><a idx="0" id="swapLink" href="img1.jpg" ><img id="swapImg" src="img1-med.jpg" border="0" alt="" /></a></div>
</div>

That's it! I hope this helps someone else and saves some hair pulling. Enjoy!

Issue with Mura CMS, ColdFusion, ISAPI and IIS6

Awhile back I ran into an issue installing Mura CMS on a dedicated Windows server running, ColdFusion, ISAPI and IIS6. The issue wasn't blatantly obvious at first because Mura would install just fine and the home page would show up so I thought everything was just fine. However, once I began adding pages to the site and then attempted to view those pages, they wouldn't show up. I would get the ever popular 'The page cannot be found' screen. The first thing I did was check some other Mura sites I had already had installed on the server and each one of them had the same issue. This was extremely odd to me because all of my Mura sites had worked just fine before and I never noticed any problems.

So after tinkering around a little I began thinking about any software I had installed recently that might even remotely affect what was going on. Well, the only thing I could think of was ISAPI. I had just installed it with the previous day or so and wasn't really using ISAPI yet. So I uninstalled it, then checked my sites and they all seemed to work just fine. Well, that's great, isn't it? Sure, if you don't really use or need ISAPI, which was my case at the time so I just went about my business and never dug any further into the issue.

So, a few months went by and some developers who were in the process of evaluating Mura shot me a message asking for a little direction on a problem. "We have Mura up, but cannot go to sub pages. I think it is a SEO URL thing that IIS6 is not handling correctly ..." and they attached a couple of screen shots for me to look at. It took me a minute to remember, but I asked them if they had ISAPI installed. Sure enough, they did. So I proceeded to let them know if my recent experience, but wasn't able to help them really solve the problem ... because see, they actually used ISAPI and needed to have it play nicely with Mura.

A short time later, one of the developers had a "eureka!" moment. In hopes of guiding any other people running into this problem, I've opted to post his entire response below. Many thanks (and congrats) to Ken Payne for solving this problem!

Steve,

I just figured out our iis6/cf8 404 problem and I thought you might like to know what its was.

By default CF8 is not SES enabled.  I saw how to correct this early on in my investigation, by uncommenting the appropriate entries in the web.xml file.  This had no apparent effect and we assumed it wasn't even hitting CF anyway since it was a IIS 404 error.  So after your hint that it may be ISAPI we edited IIS and did a restart and voila the SES URL's now worked.  On 1 but not on the other 2 installs.  I hadn't restarted the other 2 cf instances after editing their web.xml... 

So after monkeying with restarting IIS and the other CF instances they magically worked at some point.  Enter the new developer with his own CF instance and we have the same problem.  It didn't take me long to puzzle it out by dumb luck on my first try.

So the correct sequence is:

  • Edit web.xml to enable ses
  • Restart the CF instance
  • Restart IIS
  • Done!

So simple once I see what's going on.   IIS was smart enough to know that CF didn't have a servlet for handle the ses url so it just didn't pass it.  This was not obvious since at one point it did indeed pass it on during my testing when I re-commented the ses servlet declarations and tried accessing with ses url.  But of course I had not restarted IIS yet so it thought CF could handle it etc.

Hope that made sense.

Launched ColdFusion + Mura CMS Powered Sites for EBL Canopy Zipline Tours

EBL Canopy Tours, launched their completely revamped online presence at www.ebl.org. Technically speaking, three (3) separate sites have been launched for EBL. The main site has become more of a "landing" page allowing visitors to choose the direction they wish to proceed: Canopy Zipline Adventures and Canopy Zipline Installations. The "adventures" site is geared towards those seeking zipline and canopy tour adventures, while the "installations" site is geared towards those seeking the "premier installer of Canopy Zipline Tours."

All of the sites are powered by Adobe® ColdFusion® and Microsoft® SQL Server with online content management provided via Mura CMS. Jaci M.'s fully customized designs were easily integrated into Mura CMS to allow our client the ability to add and edit content while maintaining the original design's integrity.

The sites feature a brand new Mura plugin I've developed called MuraMediaPlayer™ which will soon be released to the general public. MuraMediaPlayer allows our client to easily add media files to any page on their site. I also set up an Amazon S3 for storage of site assets and Amazon CloudFront account to allow for streaming video. In addition, the adventures and installations sites both feature a "weighted-randomized" header for the home pages. Using some Mura class extensions, I enabled the client to upload a header, location details, up to five (5) additional location images and also determine the "Weight for Randomness" for each canopy zipline tour location.

This was definitely a fun project to be a part of and hopefully one of these days, our client will invite us to one of his canopy zipline locations (hint hint!). Congratulations to everyone at EBL, and I look forward to working with you again soon.

EBL
Designer: Jaci M. | Developer: Stephen Withington | Content Management System: Mura CMS

Launched ColdFusion + Mura CMS Powered Site for Mitchell Swaback Charities

Every once in awhile, I'm fortunate enough to be involved in projects that truly "make a difference." This, for me, is one of those projects.

Mitchell Swaback Charities, formerly known as The Mitchell Swaback Foundation, launched their new web site at www.mitchellswabackcharities.org. Mitchell Swaback Charities was started in 2004 by family and friends of Mitchell Swaback after he suffered from a fatal accident on August 14, 2004. They wanted to continue Mitch's "compassion to serve in missions, the church and to honor God in the way Mitch did on a daily basis." For over five years now, they have been busy fulfilling their mission through a variety of projects and events that continue to impact people throughout the world.

The site is powered by Adobe® ColdFusion® and Microsoft® SQL Server with online content management provided via Mura CMS. I was able to fully integrate Jaci M.'s completely custom "bloggishy" design into Mura CMS without a hitch. I leveraged a number of class extensions and custom display objects in Mura CMS to pull everything together.

I was even able to pull in my cfMediaPlayer project from RIAForge to allow the client to upload and display video quickly and easily. Luckily, Amazon added streaming capabilities to CloudFront just in time for me to allow our client to stream their video as well.

Along with a typical "donate online" feature, the client had a few unique needs such as the ability to "flag" nearly any project as "supportable" which would then allow a visitor to direct their donation amount(s) towards that particular project. Other custom e-commerce applications included a "charity event participant sponsorship" application and a complete "golf outing sponsorship and registration" application.

I truly felt privileged to be a part of this project and hope that my work further enables MSC to continue thriving and growing in their mission to "Advance the Kingdom of Christ by Reaching Out to Others." Congratulations and thank you to everyone at Mitchell Swaback Charities.

Mitchell Swaback Charities
Designer: Jaci M. | Developer: Stephen Withington | Content Management System: Mura CMS

Simple User-Defined Function (UDF) to Convert Server Date/Time Stamp Into Local North American Time

Very often, a web server is located in a different time zone from the majority of the visitors (and owner) of a web site. I came up with this user-defined function (UDF) to return a timestamp in the web site owner's local North American timezone. This way, reports, emails, etc. can all have a consistent timestamp.

Valid time zones for North America are: newfoundland, atlantic, eastern, central, mountain, pacific, hawaii, utc. Obviously, I'm using more user-friendly terminology here than EST, CDT, etc.

For more information on North American time zones, visit http://www.timeanddate.com/library/abbreviations/timezones/na/.

This function returns a string as a timestamp. For example: {ts '2010-01-01 01:00:00'}. You can then use dateFormat() and/or timeFormat() to output as desired.

Examples


<cfoutput>
    Central: #getNorthAmericanTimeStamp('central')#<br />
    Pacific: #dateFormat(getNorthAmericanTimeStamp('pacific'), 'mm/dd/yyyy')#<br />
    Hawaii: #timeFormat(getNorthAmericanTimeStamp('hawaii'), 'h:mm:ss tt')#
</cfoutput>

The Code


<!--- Info --------------------------------------------------------------------------------------------------

    Document:        getNorthAmericanTimeStamp.cfc
    Author:            Steve Withington (steve [at] stephenwithington [dot] com)
    Creation Date:    01/08/2010
    Copyright:        (c) 2010 Stephen J. Withington, Jr. | www.stephenwithington.com
    
    Purpose:        I convert the server date/time to any North American timezone date/timestamp.
                    Pass me a timezone, and I'll convert my server date/time to the preferred timezone's
                    date/time and pass it back to you.
    
    Revision Log / Notes:
    01/08/2010 sjw    First release.

-------------------------------------------------------------------------------------------------- /Info --->

<cffunction name="getNorthAmericanTimeStamp" returntype="string" output="false" access="remote">
    <cfargument name="timeZone" type="string" required="false" default="eastern" />
    <cfscript>        
        var local = structNew();
        local.t = structNew();
        local.t.dts = now();
        local.t.tzi = getTimeZoneInfo();
        local.t.utc = dateAdd("s", local.t.tzi.utcTotalOffset, local.t.dts);
        local.timeZones = "newfoundland,atlantic,eastern,central,mountain,pacific,hawaii,utc";

        if ( local.t.tzi.isDSTon ) {
            local.t.newfoundland = dateAdd("n", -150, local.t.utc);            
            local.t.atlantic = dateAdd("h", -3, local.t.utc);
            local.t.eastern = dateAdd("h", -4, local.t.utc);
            local.t.central = dateAdd("h", -5, local.t.utc);
            local.t.mountain = dateAdd("h", -6, local.t.utc);
            local.t.pacific = dateAdd("h", -7, local.t.utc);
            local.t.hawaii = dateAdd("h", -9, local.t.utc);    

        } else {
            local.t.newfoundland = dateAdd("n", -210, local.t.utc);
            local.t.atlantic = dateAdd("h", -4, local.t.utc);
            local.t.eastern = dateAdd("h", -5, local.t.utc);
            local.t.central = dateAdd("h", -6, local.t.utc);
            local.t.mountain = dateAdd("h", -7, local.t.utc);
            local.t.pacific = dateAdd("h", -8, local.t.utc);
            local.t.hawaii = dateAdd("h", -10, local.t.utc);
        };
                    
        if ( listFindNoCase(local.timeZones, arguments.timeZone, ",") ) {
            switch(arguments.timeZone) {
                case "newfoundland":
                    return local.t.newfoundland;
                    break;
                case "atlantic":
                    return local.t.atlantic;
                    break;
                case "eastern":
                    return local.t.eastern;
                    break;
                case "central":
                    return local.t.central;
                    break;
                case "mountain":
                    return local.t.mountain;
                    break;
                case "pacific":
                    return local.t.pacific;
                    break;
                case "hawaii":
                    return local.t.hawaii;
                    break;
                case "utc":
                    return local.t.utc;
                    break;
                default:
                    return local.t.eastern;
            };
        } else {
            return local.t.eastern;
        };    
    
</cfscript>
</cffunction>

Hope this helps!

Simple User-Defined Function (UDF) Get ID of New Record With ColdFusion

I've been doing more development for applications that could be used with a variety of databases. So recently I whipped up this little user-defined function (UDF) to grab the identity (ID) of a row that was inserted into a database that I thought other developers might find useful. You'll need at least ColdFusion 8 to use this little puppy.


<!---
Pass me a CFQuery result struct and I'll try my best to get the identity (ID) of a row inserted into a database.
Works with SQL Server, Oracle, Sybase, Informix, and MySQL.
Requires ColdFusion 8+

@param qResult query result structure (Required)
@return Returns any
@author Stephen Withington (steve@stephenwithington.com)
@version 0, January 7, 2010
--->

<cffunction name="getIdentity" returntype="any" access="remote" output="false">
    <cfargument name="qResult" type="struct" required="true" />
    <cfscript>
        var local = structNew();
        local.identity = "unknown";
        
        if ( structKeyExists(arguments, "qResult") ) {
        
            // SQL Server
            if ( structKeyExists(arguments.qResult, "IDENTITYCOL") ) {
                local.identity = arguments.qResult.identitycol;
            };
            // Oracle
            if ( structKeyExists(arguments.qResult, "ROWID") ) {
                local.identity = arguments.qResult.rowid;
            };
            // Sybase
            if ( structKeyExists(arguments.qResult, "SYB_IDENTITY") ) {
                local.identity = arguments.qResult.syb_identity;
            };
            // Informix
            if ( structKeyExists(arguments.qResult, "SERIAL_COL") ) {
                local.identity = arguments.qResult.serial_col;
            };
            // MySQL
            if ( structKeyExists(arguments.qResult, "GENERATED_KEY") ) {
                local.identity = arguments.qResult.generated_key;
            };

        };
        
        return local.identity;
    
</cfscript>
</cffunction>

Example Usage


<cffunction name="addName" access="public" returntype="any" output="false">
    <cfargument name="name" type="string" required="true" />
    <cfscript>
        var local = structNew();
        var rs = "";
    
</cfscript>
    <cfquery datasource="#getDatasource()#" username="#getDBUsername()#" password="#getDBPassword()#" name="rs" result="local.rsResult">
        INSERT INTO tblNames ([Name])
        VALUES (<cfqueryparam value="#arguments.name#" cfsqltype="cf_sql_varchar" maxlength="50" />)
    </cfquery>
    <cfscript>
        local.identity = getIdentity(local.rsResult);
        return local.identity;
    
</cfscript>
</cffunction>

Hope this helps someone else other than me!

Adding Custom CSS Style Options to the Mura CMS Content Editor Toolbar

If you would like to add your custom CSS styles to the Mura CMS content editor toolbar, also known as a the FCKeditor toolbar, then read on!

First, let's make sure we're all on the same page. If you have access to the "Admin" area of a Mura CMS site, you can login, go to the Site Manager and select a page to edit content on. In the 'Content' area, a toolbar containing buttons to format the text, insert pictures, etc. runs across the top. This is the toolbar to which I'm referring. Here you will find a 'Style' dropdown.

This dropdown is controlled by an .XML file located under /{siteid}/includes/themes/{themename, i.e., 'merced'}/css/fckstyles.xml. Here is the basic content of that file:


<?xml version="1.0" encoding="utf-8" ?>
<Styles>
    <Style name="Align Image Left" element="img">
        <Attribute name="class" value="left" />
    </Style>
    <Style name="Align Image Right" element="img">
        <Attribute name="class" value="right" />
    </Style>
    <Style name="Intro" element="p">
        <Attribute name="class" value="intro" />
    </Style>
    <Style name="Centered Text" element="p">
        <Attribute name="class" value="center" />
    </Style>
    <Style name="Call to Action" element="a">
        <Attribute name="class" value="callToAction" />
    </Style>
    <Style name="Call to Action" element="li">
        <Attribute name="class" value="callToAction" />
    </Style>
</Styles>

In order to get your custom styles to appear in the dropdown, we would then obviously need to edit this particular file. To test this out, let's add some <Style> elements to this file.


    <Style name="Paragraph" element="p" />
    <Style name="Heading 1" element="h1" />
    <Style name="Heading 2" element="h2" />
    <Style name="Heading 3" element="h3" />
    <Style name="Heading 4" element="h4" />
    <Style name="Heading 5" element="h5" />
    <Style name="Heading 6" element="h6" />
    <Style name="Italic" element="em" />
    <Style name="Blockquote" element="blockquote" />
    <Style name="Preformatted Text" element="pre" />

Be sure you place these just after the opening <Styles> tag! Save the file, upload it to your site and navigate to your Admin > Site Manager, then select a page to edit.

Hey! Where's My Styles?

The first thing you'll probably notice is that nothing has changed. If this is the case, trust me, your changes are there, you just can't see them yet. Unfortunately, a <CTRL> + <F5> won't be enough to remedy this situation either, and this is probably where some people have thrown up their hands in frustration. Don't worry, we'll get this fixed in a snap.

The problem is merely that the contents of the XML file have been cached. So, let's 'officially' clear the cache, shall we? In Firefox, at the top of the Firefox window, click on the Tools menu, and select Options. Select the Advanced panel, then click on the Network tab. In the Offline Storage section, click the Clear Now button. Then click the OK button to close the Options window. If you're using Internet Explorer, then use Firefox. Just kidding ... but seriously, use Firefox.

If you're like me and have taken advantage of the 'Web Developer' toolbar add-on for Firefox, it's even simpler. Just click the Miscellaneous button on the toolbar, hover over Clear Private Data, then click Cache. That's it!

Show Me More!

So now you should see your 'new' styles appearing in the style dropdown. However, you want more don't you? Of course you do. Luckily, there is some pretty good documentation on the CKEditor site at http://docs.cksource.com/FCKeditor_2.x/Developers_Guide/Configuration/Styles. There you should be able to learn more about the XML file, Style nodes, Attribute nodes, "Object" elements, and more.

I hope this helps!

Integrating Your Custom Web Site Design with Mura CMS

Are you tired of trying to shoe-horn your custom web site design into someone else's content management system? Drop in and learn how to fully integrate your custom CSS and HTML with Mura CMS, a comprehensive, ColdFusion-powered, open source content management system. In less than sixty minutes, I'll attempt to cover:

  • Exploring Mura templates & themes
  • Integrating your custom CSS & HTML
  • Creating Mura components
  • Creating Feeds/Indexes
  • Creating Custom Feeds/Indexes

If you haven't already done so, it might behoove you to catch part one, "Getting Started with Mura CMS", offered on the CFmeetup on Nov 12, with the recording here.

Where: The presentation will be online and free to anyone who's interested. The meeting will also be recorded for those who are unable to make it to the live presentation. Visit http://www.meetup.com/coldfusionmeetup/calendar/11981239/ for more information and to RSVP.

When: Thurs. Dec 3, 12:00pm US ET (UTC/GMT-5)

Feel free to stop by!

Getting Started with Mura CMS: a ColdFusion-Powered, Open Source Content Management System

Are you looking for a ColdFusion-powered, open source content management system? Drop in and learn how to have a site up and running in less than sixty minutes! Within one hour, I'll walk through each of these steps to help you get started using Mura CMS:

  • Installing Mura CMS
  • Creating your first site
  • Setting up navigation
  • Creating a custom 404 page
  • Exploring some built-in features and objects
  • Creating your first Mura component
  • Creating your first form

Where: The presentation will be online and free to anyone who's interested. The meeting will also be recorded for those who are unable to make it to the live presentation. Visit http://www.meetup.com/coldfusionmeetup/calendar/11838818/ for more information and to RSVP.

When: Thurs. Nov 12, 12:00 pm US ET (UTC/GMT-5)

Hope to see you there!

More Entries

© 2010, Stephen J. Withington, Jr.  |  BlogCFC was created by Raymond Camden – Version 5.9.004

Creative Commons License  |  This work is licensed under a Creative Commons Attribution 3.0 Unported License.