I have been doing some research into the optimal way to realize a multi user CMS in PHP. The functional requirements come down to building:
Being a programmer, the idea that instinctively comes to mind first is to code everything from scratch in PHP. Taking PHP as a starting point gives maximum flexibility and programming power. The boundaries of what the system could do are only limited by the programmer and his unravelled PHP programming capabilities. The learning curve will be flat since the system’s technology will most likely fit to the knowledge and experience of it’s builders, which will result in a high development productivity. Biggest advantage is the perception of flexibility, there are no restrictions to the enabling power other than those of PHP itself.
From a managerial point of view, however, this approach is cumbersome. Design and implementation of a highly generic system is a complex and risky matter that requires a lot planning, superior technical skills, but most of all time. The end result, however nice it may be, will be totally unique. This means there will be no third party support available and you will be very much on your own once the core developers leave the ship. Realistically, with resources being limited, the prospect of ending up with suboptimal software and a long and hard to manage project is very real.
So I decided to search for prefab software that might provide a good part of the desired system out of the box. I found two multi user blogging systems based on WordPress: WordPressMU and an open source project called Lyceum. Both looked neat at first glance and would certainly have enlighted the end-users. But both were deemed unusable due to bad scalability, immaturity, but most of all, being too restrictive on extensibility. They provide excellent blogging but lacked the more generic website publishing features I was seeking, and did not provide a friendly API to implement this on.
The best solution I can think of is a trade-off found somewhere on the continuum between the extremes. A framework that provides an API on a higher-level then PHP itself that will help you develop quicker and more structured, but is still flexible enough to allow for any conceivable tailor-made customization. I found the open source project Drupal to be just such a framework. It’s merits include:
Without doubt, the biggest asset of Drupal lies in it’s extensibility. It provides the most powerful and well designed plugin-in mechanism I have ever seen witness the impressive list of modules. Read my seperate post on this topic.