What is a CMS?

Drupal is an open source content management system (CMS) for websites.

What does that mean? Basically a CMS is the software that powers a website (such as this one). In the early days of the world wide web, website content existed mainly as static HTML text files on web connected computers. (HTML stands for "HyperText Markup Language", and it consists of tags embedded in a text file that tell a web browser how to display the text, and what files the links lead to). The URL of the page was the computer (domain) name, followed by the directory and file name of the text file (usually ending in .html or .htm to indicate an HTML file). When a user entered a navigated to a URL with a browser, the browser opened the file and displayed the content.

I built my first website project (MtKilimanjaro.info, a site about climbing Kilimanjaro) as a series of static html files (one for each page on the website), mostly because I didn't know any better at the time. This worked okay, but I soon realized it was a lot of work to maintain and modify. For example, I had a navigation menu on the left side of every page, and if I wanted to add a new entry to the menu, I had to edit that menu in every file.

I thought there had to be an easier way to develop and maintain a website, and with a little searching I realized I needed a content management system (CMS). The basic idea of a CMS is to store your website's content (e.g. blog entries, user comments, etc.) as entries in a database. The website then functions like a user interface to the database. When a user navigates to the site, or clicks a link, the CMS software running on the server receives the URL, and based on the URL, runs queries on the database and assembles the query result into an HTML file that is returned to the user. Most of the time, the URL does not reference an actual physical file.

This makes site management and update much easier. Going back to the menu example, with a CMS the links in the menu could each be entries in a table in the database, and when a user requests a page that has a menu on it, the CMS could query the database for all menu items then assemble them in a segment of HTML code. Adding an item to the menu just entails adding it to the database.

Of course this is only the tip of the iceberg of what a content management system can do. One big advantage of a CMS is that sites can easily be made dynamic, with content generated on the fly. This is how the flight search function in CheapFlightSpy.com works -- when a user searches for flights, the CMS running the site assembles a dynamic page showing the cheapest recent airfares found by others searching for flights to/from the same airports.