In order to publish some pages, articles and other resources, I needed a CMS. There are many choices around, but - surprisingly enough - I could not find one that fulfilled my needs. Therefore I hacked something together myself : cb_cms.
My requirements were relatively straightforward :
Access control : For each page or article it should be possible to limit the access to users with a specific role (like 'family', 'student', ...). All resources (images, downloads ...) that go with such restricted page or article should be access controlled as well. Pages and articles that are access restricted should also not appear in index pages, recent article lists etc.
Multilingual : I often write in English and Dutch. Sometimes also in French. The CMS should show the articles in the language that the user selected ànd should present alternative languages for a page or article when such alternative is available.
PHP based : I want my CMS hosted and that practically rules out Python, which is my real language of choice. Indeed, I could implement all with Python in a self-hosted approach, but I could not find website hosting where I can run Python as a webserver (at least not at a decent cost and with sufficient diskspace). With PHP though there are many choices.
Writing should be straightforward : I am not a fan of the WYSIWIG editors like you often find in the big CMS, style Wordpress. I find myself always struggling to get the output as I want it, while I know more or less what it should be in html. On the other hand, writing all in html directly is often a nightmare as well. For me markdown works comfortably. It can per definition contain html constructs as a last resort as well.
Organisation should be straightforward and hence I am inclined to approaches that are essentially file and filesystem based. That is also the easier approach to backup. No deal-breaker though.
What I considered
Wordpress : fails on Multilingual and on Access Control. Multilingual is a complete mess to set up and is clearly an afterthought in Wordpress. Access control works half-baken through plug-ins but fails on protecting resources that go with articles. And asks a lot of tweaking in overview pages etc.
Joomla : very much like Wordpress, although it looks like the multilingual setup at least works in a decent way.
Drupal : I think Drupal would address all my requirements. And an awful lot more. It is however not a system you can get your head around in short time. Moreover I didn't find much useable documentation (for their 8 version at least). If I have ever a lot of time I might dive some deeper into this.
Kirby : Nice little system. Drawback it is not open source. Neither is it Twig based for its templates, it uses php templates. It might - given some further tweaking - have served the purpose though otherwise.
Grav : Very promising as well. It failed though on the access control part (cannot protect the resources that go with pages or articles).
Slim, a microframework for PHP at the basis.
Sqlite, as a one file based database for :
- Faster lookup of allowed pages and articles. The db does not contain the page or article content and at all times can be rebuild from the filesystem.
- User and user access management
- Comment storage (comments are living only in the db)
Markdown based pages and articles. With a YAML header to define metadata.
PhpLiteAdmin built in for the administrator in order to maintain the database if needed.
No authoring possible within cb_cms. Use your favourite editor with remote filesystem access (e.g. WinSCP) to author.