I tweeted earlier saying I'd had enough of MODx, was never gonna use it again, and that it was a "pile of fricken shite". The second part isn't strictly true as I've still got a client that worships it, but I won't be using MODx for my own projects and I won't be recommending it to anyone still deciding on a platform. The last bit isn't completely true either. Everyone knows there are worse options out there, that's why someone made the below graph. I never got round to coding the best CMS in the world, but in the mean time I'm playing with PyroCMS.
But yeah, there's no way I was gonna try and squeeze everything into 140 characters, so I decided to write this post to explain exactly what I dislike about MODx, and why.
My introduction to MODx
I first start using MODx a couple years ago when I started working for a company that, after having used many other CMS, was now using MODx Evo as their CMS of choice. Before I started, I was given the task of learning Revo because they'd be migrating "soon". Using a tutorial I had a simple blog site with comments up and running in a couple hours, so first impressions were good. It took a while to work everything out, but it wouldn't be learning if it didn't.
As it turned out, they only started using Revo around Christmas last year. I tried convincing them for ages that Revo was 'ready', but as far as the boss was concerned, it didn't have enough plugins or the plugins weren't good enough yet. Now, I don't agree with that at all. Sure there weren't as many plugins as evo, but who cares? Half of them will never get used anyway and if something you need is missing, make it yourself! And a lot of people do, but that's part of the problem.
First bad encounter
We had a project come in a couple months after I started that involved selling tickets on a theatre's website. Because the boss was obsessed with plugins, I spent a week trying out what options were available. As the client's requirements were so specific there wasn't a plugin that came close to doing what we needed. I insisted that we needed to start from scratch creating our own plugin, but he settled on Shopkeeper.
Shopkeeper was by far my worst experience with MODx. I had to waste time translating the comments from Russian before I could even think about working with the code, and most of that was in Russian as well! How is anybody supposed to work with that? The code was badly written anyway; when it's badly written AND in another language, shit gets bad. If you're gonna release code to the world, the least you could do is write it in the world's language.
Back to the point
The interface in Revo is generally friendlier than Evo's, but some parts of it just don't make sense. Take user management for example. When I went back to Revo, I spent an hour trying to fix the user list in the manager so I could update a user. Turns out you have to right-click. That isn't obvious at first, and I still forget sometimes. There should be two ways to do nearly everything, especially if the first way requires doing something just to see it.
Documentation
There're many tutorials out there if you're just getting started with MODx, and there's a lot of good stuff if you need help doing things in the manager, but when you're delving into the code you're pretty much on your own. The API documentation is entirely autogenerated, so that's of little use unless I know exactly which file/method I'm looking for. Which I don't. Not to mention it's all in one long list so I have to scroll for ages.
In contrast, CodeIgniter's user_guide works as both a helping hand for new users, and a reference for old. If I want to see how to run a certain query in CodeIgniter, everything's there in one page. Again the navigation could be improved for long pages, but all the information I need is there: clear, concise, and most importantly with examples. CI may not be a CMS, but much of its' documentation also applies to PyroCMS which is based on it, so it's still relevant.
Packages
Developing a plugin for MODx is relatively easy, you just add a namespace in the manager - and an action if you want a CMP. The rest is no different to coding any other snippet. That is, until you need to release it. Transport packages (and more specifically, the build script) are documented in detail, but that detail is either outdated, incorrect or broken. It took me a week and three rewrites just to get a basic CMP up and running in an installable package, and even then I still couldn't get /modExt/ExtJS or even Lexicons to work. Instead there's no language support and all the HTML is pieced together from Firebug's interpretation of other core manager pages.
When I finally got a working package, it turned out that MODx seems to skip the upgrade action of the resolver script for packages uploaded manually. I don't know if that's actually the case, that's what it appears to be doing. The end result was a hack to check if the custom option was set already before showing it as part of the install process. Not ideal, but it works. Would it mess up the upgrade process if the package came from the package browser? Maybe, but I have no idea.
If I go down, you're coming with me!
The package browser seems to load the entire list of packages on every search and filters the results locally in the browser. If you're on a slow connection, you're gonna be waiting a hell of a long time - assuming it's working at all. That's right - if you want to use the package manager but the central package repository is down, you're screwed. You can't even uninstall an existing package or upload one manually, everything just breaks. On the offchance that you happen to be testing your newly built transport package and the main package server goes down, then all of a sudden you can't do your job - even though you're working on a local install with local packages.
Final words
There're a lot more things that bug me about MODx, but this post is already a lot longer than I thought it'd be. It's good for basic sites, and to some it'll be easier to use, but I wouldn't dream of using it for anything complex. Much like my opinion on WordPress - it's a blogging engine, so don't try and turn it into a bloody shopping cart!
MODx is slow, and to me it feels clunky. Whether that's the oversized tabs, the way many plugins integrate (presumably due to limitations of MODx or the laziness of people that develop for it), or something else entirely remains unknown. Oh, and there's the Code Standards too. Anyone actively encouraging the use of spaces over tabs needs to be shot.