Last week I was searching for a CMS to implement a relatively simple project. There are plenty of these written in PHP in all flavors one can imagine. From the only-some-pages-Joomla to the enterprise-size TYPO3 and Drupal. Especially the latter are pretty mature. However, they all have a common disadvantage for me: PHP. I don’t want to get worked up over PHP, but compared to Ruby it’s just less fun and fun is an important part of programming to me. Maybe I’ll write a post about that someday but I honestly think it’s pretty obvious.
What’s wrong with these?
There isn’t! However, coming from PHP I wasn’t used to the way these projects handle content: those CMS use editors to modify rather big areas on the page. For example you could have two textareas, one for the header section and one for the main content of the page. Most CMS I know have a different approach. They have pre-defined content elements with inputs for the user like a “text and image” content element. The user can only enter a text and choose an image. The actual output is then totally isolated from the backend.
Now I’m a developer, I can write markup here and there and I know what happens inside a WYSIWYG-editor. But if you need other (less technical) people to change the content, they either don’t want to have a giant WYSIWYG-section for the whole page or you don’t want them to be able to change the layout. I think if this is the case Alchemy’s approach is the way to go.
Reading the descriptions of different Ruby CMS I noticed that Alchemy claimed to tackle exactly this issue. From their website:
The content manager mustn’t be able to change anything but the content and some basic text formatting. The content manager shouldn’t care about headline formatting, image positioning or resizing. The developer should take care of this!
For many use-cases I totally agree with that.
In Alchemy you define content elements and page layouts in YAML-files. You have very essential elements (like text, date or an image upload field - they’re called “Essences”) that can be combined to content elements (Elements). Of course you can implement your own Essences and decide lots of details on how they’re used on the page. The user then fills the Elements with content and positions them on the page. Also, if you need, say, columns, you can use Cells to build containers for Elements. So a two-column layout would simply mean two Cells that can be filled with Elements.
Alchemy ships with generators that produce standard Rails partials from the .yml files. This makes the rendering extremely powerful because you can use all of ERB’s and Rails’ features in your view.
Yay or nay?
Alchemy has not as many features as a full-blown Drupal has, but it is on the right path. Alchemy does many things right. I really like the content handling and I think it has great potential. The Ruby world should have a look at it - at least to understand the paradigm.