PHP CMS Comparison

PHP CMS Comparison 2015

(or that time I compared 7 PHP Content Management Systems)

Yup.  I’m here to compare PHP CMSes; seven of them!  Since I’m not particularly happy with WordPress or Joomla and unless stipulated and mandated and paid by the client wouldn’t consider Drupal.

Introduction

I’ve been away from the Content Management System (CMS) landscape for a while. That’s not to say I’m not interested in it. We’ve just been busy working on Sondry a personal story telling platform. We’re now back doing Web Design and Development just like old times. During the time at Sondry, I picked up on a few new skills including refining my work with NodeJS. I’m not just impressed with Node, but its being used in our client portal as well as the Ubiest.co web application. Node is awesome and ready for production work. That doesn’t mean that I’ve lost my roots in PHP either. In fact, PHP is still my preferred language. I’m comparing PHP CMSes since it has been awhile since I’ve looked at anything but WP or Joomla. The landscape has grown a lot since in part due to PHP and Node’s growth. Composer and NPM has made our life so much easier and its really helped spur development of new applications. Its time to see what people have done with it!

CMS(s) being compared

Back to the CMS comparison.  Here are a few that I’ve picked for comparing based on their level of efforts and what I’ve seen thus far.  If your CMS or your favorite CMS isn’t included, please don’t whine; I can only spend so many hours looking at the screen.   For the sake of having control, I’ve included WordPress and Joomla in the mix.  I’m not including Drupal since I cannot stand that CMS and do not understand its charms.  Once Drupal 8 is out with standard PHP components, my opinion may change.
  • WordPress 4.1.2
  • Joomla 3.4.1
  • OctoberCMS (Laravel Based)
  • Bolt.cm
  • PageKit
  • ProcessWire
  • PyroCMS
  Time allowing, I’m going to compare below Node CMSes as a part 2 at a later date.
  • Ghost
  • Keystone
  • Apostrophe 2
  • Pencil Blue

Criteria

Any sort of comparison has to first have a criteria or it will become difficult to judge what it is we are comparing.  Below is a list of ideas or concepts I’m looking for in each CMS.  My criteria are based on my prior experience working with Joomla, WordPress, Laravel and Express.
  • Has Post Types or similar type of features for implementing content storage beyond the default types (EX: Custom Post Types in WordPress)
  • Ability to add Extra Fields or Custom Fields natively or otherwise (EX: K2 and Extrafields in Joomla or Advanced Custom Fields in WordPress)  Also, can it repeat those fields?  It makes our lives so much easier when we don’t have to add fields in manually and let the client choose!
  • Plugin Availability
  • MVC based to make development more standard and streamlined
  • Documentation for Theme Development (Very important for my business)
  • Community Support (Are there other folks who develop on this platform?)
  • Can be package manager based: Uses Composer or NPM to install or to manage third party packages
  • How forward thinking does the overall design seem to be?
  • By Design, Who is it for?

The TL;DR (Summary of what I found)

CPT Fields Plugins MVC Docs Community Composer? Who is it for? Total
WordPress 3 4* 3 No 3 3 No Everyone** 19
Joomla 1 2* 2 Yes 3 3 Yes Everyone** 17
OctoberCMS 0 0 2 Yes 2 2 Yes Devs,Designers 12
Bolt.cm 3 2 2 Yes 3 2 Yes Everyone 18
PageKit 1 1 1 Yes 2 2 Yes Devs 11
ProcessWire 3 3 2 Kind of 3 3** No Everyone 17
PyroCMS 3 2 2 Yes 3 3 Yes Everyone 19
  Note on Scoring:
  • Scores are from 1 to 3. Zero indicates that it doesn’t apply as a concept
  • * Indicates the need for a plugin to achieve the feature
  • ** Indicates an imbalance in user base (towards developers usually)
  • Also, MVC counts for 2 points, Everyone counts for 3.
Also, thanks to the ACF plugin, WP gets an extra point on fields because it’s just way ahead of everyone’s game.  I mean without ACF, or Pods, WordPress is WorthLess.   And here’s where the real comparison begins!

WordPress

Introduction Love it, Hate it, everyone has a relationship with WordPress.  Its the current CMS to compare against.  It is popular to say the least.  I’m not sure if I really need to give WP an intro. Go look at their about page.   Additional Post Types and Taxonomies With WordPress, you can have Custom Post Types which can have attributes like its Post or Pages systems.  Its really easy to define Custom Post Types and Custom Taxonomies in WordPress.   Custom Fields You can always setup Custom Fields in WordPress natively, but without a good way to manage the fields, it can become rather cumbersome.  There are few solutions for this, but I’ve found Advanced Custom Fields Plugin to be the best of the lot.  Not only is their system able to assign sets of fields to specific scenarios, they’re able to place custom fields against both post types and taxonomy types.  The fields can also be made repeatable via their “Repeater Field” plugin. To be honest, without ACF, there’s really no point in doing WordPress development.  The Repeater field plugin is worth more than you pay. Summary: Its natively supported, but   Plugin Availability 37,487 – that’s a lot! WordPress is the king of plugin quantity.  It’s definitely not the king of plugin quality though.  They have everything for pretty much anything for everything.  That said, because WordPress was written for PHP4 and before there were proper MVC style frameworks, plugins are easy to write and often bad. This isn’t to say that some of the plugins aren’t well made.  The best CMS plugins that I know actually are actually for WordPress anyway.   MVC Based? Nope.  Is this a deal breaker? Absolutely not.  I used to think that without a clear MVC structure that the CMS was not worth it.  Because it doesn’t have an MVC structure, you can actually do a lot of things free form.  It does allow for greater errors and variations in implementations.  It also doesn’t follow the normal structure that you’d come to expect from modern code.  That said, WP is one of the best documented CMSes and the docs more than make up for its lack of MVC structure.   Documentation for Theme Development Probably the best documentation from any CMS ever made.  So many folks use it and so many folks have to support it; thus the documentation is awesome.  The number of answers offered on StackOverflow is not small either.  If you have a problem, someone has already asked the question 50 times or more online and there are answers floating around.   Community Support This as stated by the last section is also great.  Just the sheer number of folks who have used or contributed to WordPress is remarkable.   Packaged and installable via composer? Not really packaged via composer. Well, kind of.  Here’s a post of how you can define a VCS in composer so that you can use WP with composer. https://davidwinter.me/install-and-manage-wordpress-with-composer/ That said, I wouldn’t really want to do that since it really does kind of defeat the purpose of having the convenience of composer. You can use composer with Bedrock here: https://roots.io/bedrock/ It does change quite a few things in regards to how WP works, but it looks cool.   Future What’s in store for WordPress?  Because so many people use WordPress for so many different purposes, backwards compatibility is a really important concept they’ll need to keep.  Its both a strength and a weakness for the platform. Here’s an excellent post on the future of WP and its many faces:  http://inside.envato.com/the-future-of-wordpress/   Who is WP for? Everyone, but Developers.  Who the F*&K stores important configuration information as part of a MySQL DB? That’s just lunacy!

Joomla

Introduction Does Joomla really need an introduction?  Its been around a decade and almost a half.  It was the first MVC based PHP CMS. It was neck and neck with WP until about 2 years ago.  Here’s their about page if you’re interested.   Additional Post Types & Custom Fields Nope.  Not natively that is.  You’ll need to install an extension to make that happen.  Joomla’s own article system is relatively weak unless you install plugins on top of it.  This holds true for the Custom/Extra fields on the articles as well.  I’ve previously written an article comparing many of Joomla’s CCK (content creation kit) options.  I’ve personally used K2 extensively and can vouch for it.  That said, K2 does not have the ability to create a new post type; you’ll have to create a category that represents a post type and use that.  Coming from WordPress Joomla will definitely seem more rigid. I’ve heard a lot of good things about Flexicontent which adds flexible content types, fields and categories.   Plugin Availability There are a lot of plugins and just like WordPress, a lot of them suck.  I’ve written an article previously about my favorites.  That said, most of the good plugins either are completely commercial or freemium (additional plugins within plugins).  That’s not really an issue for me, but I can see how that can be a detractor for many folks.   MVC Based? Yes!  Joomla has a very nice MVC structure.  It has two structures to hold the administrative portion of your code and the front facing portion of your code.  It’s just like how you would imagine making a CI or a Laravel app to a certain extent.  That said, there are some weird Joomla things that you probably have to know about to take full advantage of the software. Also, Joomla has three ways to extend the system: Plugins, Modules, and Components.  Plugins are the smallest piece and usually used to make content modifications or small changes (CSS minification, parsing for email to make links, etc).  Modules are like widgets in WordPress except that they have a lot more logic built into them; they’re often times the easiest ways to display custom content for your client.  Components are full MVC based apps that co-exists with the core Joomla systems (CCK, SEO systems, backup systems, etc).   Documentation for Theme Development Documentation used to suck.  Now it doesn’t.  The documentation is in similar level to WordPress, but the smaller size of the community is apparent in some of the pages. The theme development docs are pretty well laid out and I can’t imagine having too many issues finding the right answers.  If the docs doesn’t work, again, there’s a plethora of answers on both StackOverflow and on the Joomla Forums. I would say though that their component development page is more thorough than a lot of things I’ve seem: https://docs.joomla.org/J3.x:Developing_a_MVC_Component I’d say that its more in-depth than WordPress’ plugin page: https://codex.wordpress.org/Writing_a_Plugin That said, Joomla is more complex than WordPress.   Community Support Stackoverflow has about 5 times less questions tagged with Joomla than WordPress if that is an indicator.  That said, they do have an entire portion of Joomla.org dedicated to their community growth.   Packaged? Yes and No.  Joomla as a framework can be installed via composer.  Since the CMS portion of the code is not fully refactored and re-written on top of the framework, realistically the answer is no.   Future Joomla is an MVC based CMS and fundamentally it is superior to WordPress and many other systems.  That said, because Joomla isn’t the easiest to learn or to use of the CMSes, it has been losing out to other CMS type systems.  I’m not sure where this leads to, but once they do refactor their CMS and their framework and if they can capture new developer interest, it could be a hit.  This of course assumes that things like OctoberCMS (which runs on top of the very popular and fun Laravel Framework) doesn’t take off.   Who is Joomla for? 60% for the Developer, 20% for the Designer, 20% for the End-User.  Joomla still needs a lot of work to really catch up.

October CMS

Introduction October CMS is written on top of the very popular Laravel framework.  It has all the familiar Laravel based system structure.  On top of that, the CMS tries to go back to the basics of what was simple and good about static HTML pages without losing out on the nice bits that a CMSes introduced with logic and data storage introduced. It is more for the developer.  In fact, I liked it so much, I’m rebuilding my personal website using October right now.  (Obvious bias will apply to October since its built on top of my fav Laravel)   Additional Post Types and Custom Fields I’m not sure what to really say in this section since October does not come with a post type or custom fields as a concept. The concept is that the user has control over the HTML/Content to the maximum amount.  Unless you can write HTML this CMS is not for you (at least not right now!). The no-frills approach is fresh and makes me want to use it for my personal projects.   Plugin Availability There’s a short-ish list of plugins, some free, some paid of about 120. All of them seem to be of relative quality from what I’ve seen so far.  All of the Rainlab’s plugins seem to be well made as they’re the creators of October itself.  Since I’ve not had too much use of any of the plugins, I can’t really comment much more. October has a small collection of paid apps (shop, testimonials, event coordination, catalogs). This is pretty good considering the size of the community.  Awesome stuff!   MVC Based? Absolutely.  The Laravel based system is really attractive with again the MVC style Plugins which allows for quick and patterned plugin development.  With the clearly laid out structure of  the main developer’s plugins, you almost don’t need docs. On top of being completely MVC based, October uses the latest and greatest PHP programming concepts so the code is object-oriented in a way that keeps things clean. Most of the Laravel concepts that I learned seem to be directly applying in many cases as October just extends on Laravel’s classes and methods for the most part.   Documentation for Theme Development The documentation just shows you how to use the file structures and the assets within october. https://octobercms.com/docs/cms/themes The template structure is awesome and allows you to even define some function on top.  There are pre-defined hooks like “onStart” that you can write to process information like you might in a WordPress template.  Nice! Also, October goes beyond most CMSes in that it comes pre-made with an AJAX interface. https://octobercms.com/docs/cms/ajax You can essentially make an asynchronous form without much work!   Community Support StackOverflow only has 30 questions on October, but October’s own forums has a lot of posts and a lot of answers: https://octobercms.com/forum To be honest, many of the issues I’ve been having while I’m (secretly) writing a plugin for this CMS happens to mostly be solved by the example blog entry system.  The rest is near Laravel which I’m used to anyway.   Packaged? The October system is installable via composer and is the only CMS that is actually purely installable via composer.  The plugins are packaged and installable from the backend much like in WordPress.  Generally speaking this thing is how you want a CMS to be packaged in this modern day.   Future With the number of plugins and the clean MVC layout, I would much prefer to developing on the Laravel based OctoberCMS than on another system.  (PS: I’m super sold on Laravel) Also, to my delight, as of the 24th of April, they just released a full-fledged Media-Manager which will make my blogging a lot easier.  Now to port my Joomla 2.5 personal blog over to OctoberCMS…..   Who is October for? Developers, Developers, Developers! Yup.  I think this is for me.  I can make it look good too, but its built for the nerds.

Bolt.CM

Introduction Bolt is trying really hard to be WP.  You login and you can instantly see the resemblance.  That is pretty much where the similarities end.  Its a lot closer to OctoberCMS in terms of the build.  That said, Bolt seems to aim directly at WP.   Additional Post Types & Custom Fields Damn.  This is like if WordPress was built correctly.  You can work on the Content Types and the Taxonomies from a YAML file.  Configuration is intuitive and beautiful. That said, you have to know what you’re building and what the customer wants for the content management system to be built correctly.  That was obviously not the case when WP was made so its no fault to WP. As of now, the system isn’t as user friendly as the ACF in WordPress.  The repeater fields system doesn’t exist for Bolt.CM despite their beautiful YAML based configuration file this is kind of a deal breaker for us.   Plugin Availability I was kind of surprised in a not a good way.  If you look at the plugin availability for Bolt, its not as good even compared to October CMS.  The extension library doesn’t seem to have a paid app section which may be a detractor for a lot of developers.  What there is would be hard to get by except for the most bare-bones of an informational website.  Let me know if I’m wrong and missed something.   MVC Based? Well, its based on Silex which is a “micro-framework”.  The system uses Silex as the routing/controllers, Doctrine as a model and Twig as the template renderer.  So its like Laravel: Illuminate/Routing/Controller as controller/router, Eloquent as model, and Blade as template renderer.  Its pretty similar in some ways. Does this directly affect the way that template/theme development has to happen like in Joomla?  Nope.  That I think is the beauty of Bolt. Instead of mapping things directly in code, it allows you to specify via YAML how to route a URL/dynamic URL to a path/controller/contenttype set.  This way, you get the right URL structure, functionality, and view.   Documentation for Theme Development The Documentation is fantastic.  I think whoever had the idea for the CMS wrote it and its clear that Bolt.CM was built with intent.  Their manifesto is part of their Docs and its clear they mean it. The docs lays out templating and extension creation nicely.  I’ve not had the time to really dive into either so I’m not sure how hard it is.  That said, Twig is easier than PHP and the template layout is near identical to WP; actually the template hierarchy is better than WP since its definable to the tee in YAML for your Content type.   Community Support Bolt has over 120 questions answered on StackOverflow.  They do not seem to have a forum unlike October.   Packaged? The installation can be done through GIT or through zip fies. Bolt uses standard Composer.phar based package management.   Future Bolt seems to have active development on Github with growing user base though I’m not sure how many.   Who is Bolt for? I like Bolt’s manifesto of giving End-Users, Frontend-Devs, and Backend-Devs equal priority.  That works for me.  I’m often really annoyed by things that don’t have that balance.

PageKit

Introduction PageKit is made by YooThemes.  YooThemse builds themes and components for Joomla and WordPress.  Since they work a lot with the top two most installed CMSes, its pretty clear that they probably know what’s going on.   I’ve reviewed their ZOO CCK for Joomla and it was pretty awesome.   Additional Post Types & Custom Fields All of these things appear to be in the “works”.  Obviously, getting all of this down is not easy or fast! That said, they do have a widget system already built.  I think the Widget idea is an important idea for YooThemes as its one of the primary ways in which many of their themes are packaged.  If they want to sell the same theme from Joomla/WP on PageKit, having Widgets is probably a really important one.   Plugin Availability Not really.  I didn’t see much in the way of a plugin now, but we’ll have to see. They do have a plan to place a Market Place within the CMS for one click installs.   MVC Based? Yup.  Using a lot of Symphony components just likes everyone else.  Its built similar to Bolt, except that instead of Silex, YooThemes uses their own PageKit Framework.   Documentation for Theme Development Documentation isn’t all there for now, but it looks to be in the “works” just as with the custom fields/taxonomies. That said, they do already have a “pagekit” command that you can use as a generator for your theme.  This same command can be used to create a scaffold for extensions too.  That’s pretty amazing for a project this early!   Community Support Again, since this is an early effort, its hard to say.  I’m not sure if this is the right time to judge on PageKit’s support at all.   Packaged? I initially had a hard time installing this one.  I pulled a branch off of github and it was rather buggy.  I’m sure they’re working on it.  Might be because I pulled “develop” instead of master.  Then, I had to register through their website to get the 0.8.8 version of the software.  So, while the application itself relies on composer (and in the newer build, it looks like bower too), the system isn’t installable via a package manager.   Future Their Roadmap shows many things including: http://www.pagekit.com/roadmap
  • Custom Fields
  • Front end editing
  • Revisions
  • Taxonomies
  • Multi-lingual capabilities
  Whos is PageKit for? Unfortunately right now, its in Alpha stage.  So unless its for a test or for your absolute personal “whatever” project, its for no one.  Hopefully YooThemes can build a commercially viable and reliable PHP CMS soon.

ProcessWire

Introduction This is one that I’ve always looked at as an alternative to our most used CMS, WordPress.  Wordpress really only works well because of ACF or Pods.  ProcessWire has the fields built in from the start.   Additional Post Types & Custom Fields Process Wire is built on having custom fields and even has repeater fields.  That said, there isn’t a way to have a custom post type.  Instead, it relies a lot on the page tree system to create listings.  So, if you wanted to pull a list of child elements, its actually pretty easy: foreach( $page->children as $child): echo $child->title; endforeach; All in all, it has things figured out. Also, it has the ability to distinguish pages by building new pages with a new template.  Templates are assigned specific fields. In addition to the repeater fields and child pages, they have a Profields system (paid addon) which comes with a “multiplier fields” its a lot closer in functionality to the ACF repeaters.  Its open source, but there has to be a way for them to make money right?   Plugin Availability The first party plugins are all between 90 and 250 dollars and seems to offer the functionality you get from ACF and Gravity Forms for more money. The third party plugins (or modules) are available also, but they are hard to browse and understand without spending time on them.  I’ve not really had the chance to play with this part.   MVC Based? Not quite.  Its got a thing going, but I’m not sure.  All of its core files are dumped into a single “core” folder which contains everything logic related.  Its kind of like the “system32 ” folder in Windows.  It does use the concept of controllers, and stuff, but not exactly the classic MVC you might be thinking of.  Everything is object oriented.   Documentation for Theme Development The lead developer wrote really nice sets of tutorials for templating as well as all other aspects of the build.   Community Support The community seems to be pretty large with active comments on the forums. It seems to be rather insular as there aren’t too many questions or answers outside of their own forums.   Packaged? Just like WordPress, its just zipped up.  No more, no less.   Future They’re working on continuously improving things and the lead dev seems to really in charge.  It seems to be lead by a few folks which has its clear advantages (singular goal, similar direction). Check out their road map here: https://processwire.com/about/roadmap/   Whos is ProcessWire for? ProcessWire itself is definitely open source.  To use it at a greater level, you might need to pay a lot more to get more out of it.  ProcessWire is the commercial “pay for that feature” to get it done kind of system.  It is similar in lines with PyroCMS and ExpressionEngine in operational cost. That said, because PW doesn’t use standard PHP components (Symphony, Doctrine, Laravel, Silex etc),  and has its own set of rules without composer, its not exactly what I wanted.  That said, according to their roadmap, they’ll soon be changing that by Version 3.0.

PyroCMS

Introduction PyroCMS is a nicely built CMS built on trusty CodeIgniter, an old friend if you will. It has a commercial paid version with support/extra functionality.   Additional Post Types & Custom Fields It supports adding more page/post types as well as assigning more custom fields.  It does not have the repeater functionality that makes ACF so great, but they’re working on it with what’s called a Grid field type.  Hopefully it’s completed soon.   Plugin Availability There’s quite a few add ons (about 200) not including themes.  It all reminded me a bit of the JED (Joomla Extensions Directory) in which nothing seemed to really stand out very much. The truth is that most of the core is well thought out enough that you don’t really need much add ons.  The system even comes with a forms system.   MVC Based? Written on top of CodeIgniter, the system is definitely MVC.  Actually, its HMVC (Hierarchical MVC) as it stores modules within the CMS.   Documentation for Theme Development There’s a good amount of documentation for the theme creation.  The templating is very easy and well documented. There is also developer documentation for module, plugin and field type development, all with great examples.   Community Support There’s about 370 SO topics relating to PyroCMS which is quite a bit. The Forums on Pyro’s website has a ton of topics and folks talking. I’m starting to like this thing….   Packaged? Pyro started in a time before composer.  Before there was composer, there was Sparks for Codeigniter modules.  It has similar concepts where you can autoload PHP code from Spark Modules into your main system.  I’ve used it once, but Composer came quickly after Sparks. So Yes, but its antiquated.   Future PyroCMS isn’t standing around and hoping to just continue with CodeIgniter (CI also just pretty much got dumped by its parent Ellislabs).  They’re porting the entire application on top of Laravel.  Am I looking forward to this? Yes.   Whos is PyroCMS  for? Its kind of a strange time to be answering this question for PyroCMS.  Its great for someone who doesn’t want WordPress, and has slightly more technical skills.   One more note for PyroCMS and v3.0 I want PyroCMS 3.0 to be fully baked.  Once that cake is out of the oven, I would be ready to build something on top of it.  I jumped ship from CI to Laravel/Composer about a year ago and never looked back.  I hope that PyroCMS can be the CMS to finally kill WordPress.

In Conclusion ( or what I learned I wanted from a CMS )

Here’s a list of things I wanted to see in each of the criteria:
  • Ability to assign a new Pages/Posts Type
  • Ability to create Custom Fields and Repeatable Custom Fields
  • Decent Plugin availability; I want to make sure that there’s at least a way for the CMS to do most things should the client requirement change.
  • Based on a good MVC framework (I prefer Laravel, but can be otherwise)
  • Good Documentation, though its only secondary to feature sets for me (I can read code examples)
  • Good Community, but not insular (questions in its own forums, but also outside in places like StackOverflow)
  • Packaged using a managed system; aka Composer
  • Forward thinking and potential for its growth beyond its current iteration.
  • Its built for Users, Designers, and Developers
  So what did I see?  I saw a lot of CMSes with a lot of potential.  Some were still being baked in the oven, while others have been around for a decade or more. I’m obviously biased and I’ll tell you what I think.  Below is the list of PHP based CMSes in order that I would consider for production use right now based on this review:
  1. WordPress
  2. PyroCMS
  3. Joomla
  4. ProcessWire
  5. Bolt.cm
  6. OctoberCMS
  7. PageKit
  PageKit was last only because it’s not ready for prime time; definitely still a gooey cake. OctoberCMS is cool, but it’s definitely not for the light-hearted; aka not for the clients who can barely type email. Bolt.cm lacked a lot of functionality I would consider required based on what its trying to do. ProcessWire was pretty cool.  I’m just not sure about it enough to really consider using it especially since all of its guts were in a single folder??  Everything looks cool on the front-end, but that irked me a little bit (I know you’re probably thinking, “it’s namespaced anyway!”). Joomla, my old friend is still up there.  It just isn’t as easy for the user to grasp the backend concepts.  I know this from experience. PyroCMS.  I might have to give you a try in a production scenario.  I kind of want to wait until you have Laravel as your foundation though.  I really don’t want to have to support two non-backwards compatible versions of a CMS for a single client.  I’ve already had to do that with Joomla and it ain’t pretty. Wordpress is again, the false king of CMS.  Stores configs in SQL, core is not MVC, not using package management like the rest of PHP, not very object oriented, etc.  The technical reasons to not use WordPress is big, but the support, community, plugins, and the documentation is bigger.  Its like Windows of the PHP CMS world.  Has everything you need to do it and we know where it will fall short. Hopefully, one day soon, we can all have a CMS with modern code base that works for everyone.  While I do appreciate WordPress, we’ll need to replace it sooner rather than later. Let us know if you’re looking for design/development help!