A while back I was reading this post about creating a simple CMS in Grok. Similar to the author over there I often get questions from friends and family who want to build a simple website about what I’d recommend. I still haven’t figured it out. Most of the big names (Plone, Drupal, etc) feel too big and complex and not content-oriented enough. On the other hand, simple systems like Google Homepages are more like HTML editors and don’t really help with managing content.
I have a vision for something much, much simpler; but I’m not sure it’s a realistic vision. There’s always feature creep. If you implement something simple, what happens when someone wants something more complicated? Do you have to throw it out? That sucks. Do you have to implement the new feature? That’s not very simple.
Here’s what I wish existed:
- Just edit content. Static files.
- Probably edit content that is slightly dynamic. Probably PHP code, but without getting too fancy with the PHP. E.g., put <?php include('header.php') ?> at the top of each file along with a footer and some variable assignments (like $title).
- Pages would have simple parent/child relationships.
- Sidebar navigation would be mostly manually managed. It would be a single PHP file, like any other. The parent/child relationships would help inform and automate aspects of that generation, but only on the UI side. There would be no attempt to incorporate fancy navigation algorithms.
- The fancy things would be done with Javascript. For instance, if you want to expand navigation depending on the context of the site. This would be easy enough to implement in Javascript, serving everyone the same content and rendering it just slightly differently to emphasize context.
- Of course it would include the important stuff like versioning and staging. With a file-oriented system you could use an existing version control system, or just simple archiving.
At my last job we wrote a content management system, and one of the last features I added I found really clever; a kind of coding judo. We wanted to add structured page types — things like a news feature with dates summary paragraphs. Instead of adding a fancy structured page system (akin to Archetypes in Plone) I just had the system look for an edit form alongside where the page would go (which itself is just a static file). The edit form has the necessary fields, and when you save the page each field turns into a variable assignment. Then there’s a template that uses these assignments. In PHP you’d have something like this:
<? include('header.php'); ?>
<h1><? echo $page_title; ?></h1>
Posted on: <? echo $page_date ?><br />
<blockquote><? echo $page_summary ?></blockquote>
<div class="article"><? echo $page_article ?></div>
<? include('footer.php'); ?>
The edit form:
Title: <input type="text" name="title"><br />
Date: <input type="text" name="date"> (YYYY-mm-dd)<br />
Summary:<br />
<textarea name="summary"></textarea> <br />
Article:<br />
<textarea name="article"></textarea>
You would use Javascript to make this form fancy if you were so inclined; adding client-side validation (clients were trusted to submit valid data) or marking things for a WYSIWYG editor (usually just with class="wysiwyg" and rely on unobtrusive Javascript to enable it).
For new pages you just give the form. For editing a page you use htmlfill to fill in the form with existing values.
The thing that is saved looks like:
<?
# This page is automatically generated; do not edit directly!
$page_title = 'A Title';
$page_date = '2008-01-11';
$page_summary = 'A summary\netc';
$page_article = 'The Article';
include('article.php');
?>
The system would know how to parse variable assignments (to get values) and would parse the include statement to determine what editor would be used.
Extending this system required a knowledge of HTML and HTML forms, and a little knowledge of PHP (or SSIs would also work). It fit our company well, as there were quite a few people with that kind of knowledge who would interact with clients, and wouldn’t need to come to the programmers to extend the system. While I’d offer some advice on how to use the system, it was transparent enough that they could debug problems on their own.
This whole concept is not something I can justify spending time on, but it’s a CMS that I wish existed. It’s a CMS I could recommend to my friends.
No related posts.
I think wordpress seems to work for lots of people.
However people often get stuck on the mysql setup part. Since mysql db setup hasn’t been standardized across hosts.
cu,
Just use a Zwiki ( http://zwiki.org – or some other wiki for that matter), style it up, do not open up editing for the public. Usually takes me about 2 hours (using a template from http://www.openwebdesign.org/ ) and using it has so far prooved to be manageable even for totally web unaware people.
From what I read, a Wiki should fit your needs, no?
I personally use e107. It’s very solid, has a good admin area (for non-technical people) and you can remove all the extra stuff you don’t need and have only the sitelinks (sidebar menu), and personalized content :) But you would be having a lot of junk in the server.
I’ve set this up for a few people – it couldn’t be easier for a basic dynamic site.
http://www.cmsimple.dk/
Systems like this fascinate me, and I also have been pining for the simplest possible tools that provide a flexible enough system to build something useful. Tough proposition. I usually find that my grandiose dreams are best left unfulfilled – just ‘build your own framework’ for the particular problem at hand. One of these days, perhaps I’ll latch onto to something that is gorgeously simple, unbelievably flexible, and incredibly powerful. Some day.
I agree with Rene – WordPress seems to work well for this sort of application. I helped a very non-tech-savvy friend get it setup on his commodity 1&1 account and he has been very happy with it.
Another friend has setup WordPress-as-a-CMS for a bunch of sites (including http://www.paulandstorm.com/) and he swears by it. That site shows that with some theme/HTML/CSS work you can really go way beyond the standard WordPress look-n-feel.
ps – Your form truncates my name.
I see you only looked at the big names. I believe you don’t want to reinvent the wheel despite that, though. I’ve found that django [djangoproject.com] fits to these requirements somewhat neatly.
> Just edit content. Static files.
Built in. Templates, flatpages and the admin.
> Probably edit content that is slightly dynamic. Probably PHP code, but without getting too fancy with the PHP. E.g., put at the top of each file along with a footer and some variable assignments (like $title).
One can use generic or totally custom views for things that need dynamism. You can use the same templates and all.
> Pages would have simple parent/child relationships.
Probably not built in flatpages at the moment, though it’s rather trivial to roll your own.
> Sidebar navigation would be mostly manually managed. It would be a single PHP file, like any other. The parent/child relationships would help inform and automate aspects of that generation, but only on the UI side. There’d be no attempt to incorporate fancy navigation algorithms.
Not a PHP file, nor is it done in a generic manner at the moment. No dice here, but nothing too complex either.
> The fancy things would be done with Javascript. For instance, if you want to expand navigation depending on the context of the site. This would be easy enough to implement in Javascript, serving everyone the same content and rendering it just slightly differently to emphasize context.
Just like any other HTML. Or, one could use neat templating features for that slight difference with minimal actual work.
> Of course it would include the important stuff like versioning and staging. With a file-oriented system you could use an existing version control system, or just simple archiving.
No dice here, either. Could though be great to do a generic enough one.
All in all, it’s not perfect. It’s though pre-1.0 software, and could certainly use things such as content versioning, row-level (item-specific) permissions (for staging) and menu-generating flatpages built into the core and contrib. That way one could pick up from a simple CMS and go from there to anything.
I don’t think Django is anywhere close to what I describe. Not even remotely close. It’s about as close as raw PHP. Hell, raw PHP is closer than Django. Django can act like a CMS, but not like this CMS.
I’ve heard people talk about WordPress, but I’ve never actually seen a site that didn’t look like WordPress. For a blog with some extra pages, sure it can work. But it’s not a CMS. Versioning and staging is pretty fundamental, and it’s not there.
A wiki can definitely get pretty close to this. I’m not a big fan of wiki markup for these kinds of tasks, but it’s not unworkable. And some do support HTML. They don’t generally support staging, though they almost all have versioning. You’d have to tweak stuff to suppress the wiki controls for normal readers and somehow only show it to logged-in users. But it’s at least close. Some of the tools like content templates and macros/transclusion could be quite useful in small sites.
Try concrete5: next generation CMS, with user friendliness, easy interface and easy development in mind
http://chyrp.net/
Just launched :) Take a look at it!
Have you looked at something like [RadiantCMS](http://radiantcms.org/)? Yeah, it’s written in Ruby, but some of the patterns you mention are there.
I haven’t looked at RadiantCMS. Ruby would be fine, except for the fact that I don’t want to host it and it’s non-trivial keeping such applications up. If it does static publishing it’s not as big a deal, because at least if it goes down the published site stays up. Radiant doesn’t look like it does static publishing, but I can’t tell for sure from the site.
Hello,
There are many sites which don’t look like a wordpress blog, made with wordpress. See some here: http://wordpress.org/support/topic/131326
Staging is supported by default with wordpress. You can have drafts, private pages, and preview posts/pages.
wordpress supports versioning with plugins… it’d be nice if it was enabled by default though. However I don’t think versioning is something most people need, or want in something simple.
cu,
Dude, you could do this with your eyes closed in Django … http://www.silverstripesoftware.com/screencasts/wikiin15_mins.html
You could easily add a wysiwyg javascript instead of markup …
Parent child relationships are dead simple with the url mapping, php not so much.
Versioning and staging (aka workflow) would be easy to add as well.
Not sure what enviroment would trust that client data is valid and only use client side validation, but validation is dead simple in django too, php not so much.
With django feature creep is much easier to handle, that is the basis it was built on.
I did something like that a few weeks ago with Django for my chorus web page. Basically, I created a database that has title, content and some flags about where the page shows in the navigation system. The admin interface allows creation of new pages and the ability to order the menu items.
To make it more general, it needs the ability to remotely change the header, footer and css. I like this because I can hand the primary content over to people that are not too tech savvy, while I got off in fits and starts and do more complicated database stuff on the backend.
It probably wouldn’t be that difficult to make it write to a static file when changes are made rather than having it get interpreted for every page it. But that’s not usually an issue for small, personal sites.
Gary
I’d tried using MoinMoin (integrated through WSGI into my Python app) but it doesn’t seem to be designed to be easily embeddable into a larger app. But in general, a wiki-like system that is modular and easy to embed seems to me like the way to go.
Aether has the flat file storage (and revision history). It also has markup and header footer style page support for allowing you to “skin” a site.
http://www.logarithmic.net/pfh/aether
Not all the way there, but it is a rather small cgi Python app that shows promise.
Check out CMS made simple. http://www.cmsmadesimple.org/
Its perfect for what I do with small clients. Smarty templates + CMS for all look and feel, you drop pages into it, organise them into the menus, and shazam, instant website. Its probably not so good for highly dynamical sites, but for “pamphlet” websites, its great, because its so easy, and because dumb-arse graphic designers can usually be taught smarty pretty well.
And the fact that its not all portal-boxy or bloggy is a definate bonus.
Like http://www.pureedit.com/ ?
Probably more like [Coranto](http://www.coranto.org/ “LOL NewsPro!”) aka (in the past) NewsPro.
But PHP/etc. (Coranto is mostly PERL), and yes, borrowing heavily from the newer concepts/patterns of OOP (Coranto is mostly procedural, but cough, it’s legacy PERL)
Of course, I found this post a few days ago via the query, “simple php cms”, and I’ll vomit if I see one more MODULAR AJAX BLOGIKISCAFFOLD… since, as Ian seems to point out here, that road leads us in two directions:
SO, as intrepid never-satisfied geeks, nerds, and dorks, we are (this was a random header text on some other page) ten years later still hand coding.
Personally, I’m new to rolling my own, so I’m looking into what PEAR and [CAKE](http://cakephp.org/ “OM NOM NOM”) can do to accomplish this.
http://www.pureedit.com — All you need to do is build your database and PE does the rest, no strings attached. :).
Hello Ian, despite your comment that Django “Not even remotely close.” I tend to disagree. I’ve worked with Plone, Wiki (ZWiki), PHP, Perl, WordPress, and a static tools (like Dreamweaver or MS Homesite). While I am software developer, it is interesting to see end-users reaction to things we do, and how easy they accept tools we provide. As far I’ve seen so far, things like Plone were easy to ‘dive in’, but difficult to change particular pars – its either works, or not. Wiki is too limited for a typical site like you require (and most users do). PHP is a thing from software development, and end user should have some knowelerge to use it. Also, PHP syntax and error handling are far from excellent. IMO, most acceptable were either Microsoft Front Page, or Django. Please don’t be surprised, but the template system and ability to quickly prepare model & represent it in page, with automated /admin/ is the thing users usually satisfied with. A typical “CMS” site have 2 models: ContentBlock (a block of text) and ContentList (a menu). That is more then enough to start, with a good devision on templates. As an example of such site, built in 3 days is here: http://www.urbanalarm.com/. It has been made in a 3 days for one of our customers, and they are happy. Or another 2 hours work is here (Russian): http://www.artmama.com.ua. Also, typical CMS. Allows to edit pictures, static pages, galleries and images. And worth to spend 3 hours of developer time to develop and set it up initially, and end users use it. Alex
The reason Django isn’t even close is that I’d like something that I don’t need to help maintain. With that in mind, Django is not even close.
Concrete 5 will make you smile :)
I checked out [PureEdit.com](http://www.pureedit.com/) and found that a page on that site, built in PureEdit, is sitting open with world writeable edit feature. I didn’t look for more pages, and the other people who found it before me were nice about it too. He’s lucky.
Ian, I thought of you again, when I reached the end of the GoPHP5 projects list, and found [Thacmus](http://sourceforge.net/projects/thacmus/).
What about LTSun, snewscms or webyep?
Maybe nanoc?
http://nanoc.stoneship.org/help/manual/chapter-1/
I think Ian’s describing something a lot simpler than any of these suggestions – maybe something more like scratchSite, a quick hack CMS I wrote a few years ago.
It’s a single PHP file, a single JS file and a single CSS file. It does a single flat list of pages based on a single template. You download it, customise the template, stick the lot on some cheap PHP hosting and you’re done. Stupidly simple auth, in-place content editing and serialised data store – as a Zope/Plone developer these days I’m horrified at how ugly a hack this is, but it’s exactly what the doctor ordered for the user. Wow, I’ve even got the code still floating around:
http://code.google.com/p/scraps/source/browse/#svn/trunk/scratchSite/source
A sequel with hierarchical pages, better auth and fancier editing was planned – maybe someday, if enough low-tech friends ask me to do websites for them. :)
Having used Joomla (what a mess) and WordPress, I recently researched the best CMS for a client. And after testing and reading numerous systems I found Concrete5 :) which is without doubt the best CMS for medium to small websites, no doubt it can’t compete with Drupal for large feature rich websistes ala the BBC, but for everything else the user friendliness and easy template system makes me wonder why I ever had to lose so many brain cells and endure headaches setting up a Joomla system (I am still unfortunate enough to be migrating a Joomla site from test to live but hopefully my last view of Joomla’s big fat hairy arse I have to see again. Wonderful C5: clean, light and a breeze for both user and developer. I wonder what the future of Joomla will be if it doesnt take not!
I have experience with php, WordPress and others. I have not been successful at creating a CMS site. I would like to create a light user friendly CMS site and I’m afraid I’m going to have to fork out a lot of money for it too.
And after testing and reading numerous systems I found Concrete5 :) which is without doubt the best CMS for medium to small websites, no doubt it can’t compete with Drupal for large feature rich websistes ala the BBC, but for everything else the user friendliness and easy template system makes me wonder why I ever had to lose so many brain cells and endure headaches setting up a Joomla system