In this article I would like to mention one of the most famous CMS available, Drupal!, it was released on 2001, since that moment, it has proven to be an all terrain CMS, capable to do whatever the user want to do.
One of its key feature is its flexibility to organize content, Drupal uses content types and fields to define the way the content is going to be displayed and stored, each of these content types has a set of options as commenting, authoring, language and revisions, and can be defined by a user or a module, including each of their fields, defining how many fields a content type should have, what type of data should those fields store and how each of those fields should be displayed, even, additional data types and widgets (the way a field is displayed) can be added by installing other modules, this provides the user the power to define any kind of content no matter how complex could it be.
Drupal is a framework itself, it provides ways to extend, theme and configure everything in it, more capabilities can be added with modules, modules are a piece of program running in Drupal, they can work with each other without any interference of any kind, thanks to this, there are modules dedicated to provide an API for other modules, avoiding to make modules from scratch, there are also modules to present, process and filter the content according to the user needs, additionally, Drupal can make every single module, theme and menu have its own configuration to grant the user the power to change some behaviors such as access, data presentation and much more. With Its extensibility and its flexibility to organize any type of website can be built such as forums, wikis, e-commerce, blogs, and much more.
Drupal provides concise methods for theming based on a structure with layers, templates and theme functions, those methods let the designer change just the needed sections and nothing else avoiding redundancy, each template is responsible of displaying a certain part of the whole theme, in case that Drupal can not find a template, it will use its own templates by default, additionally, Drupal use a method called “template suggestions” to use another template to display a specific part of the theme as a block in a region or a module, in case that only a simple data in the theme must be changed, a theme function provides all the variables for a specific template.
Drupal has proven to have one of the best security measures among all the content management systems available, it has a large documentation encouraging how to build secure websites on Drupal, it has a structure that was built to deliver a robust security by default, it has a security team dedicated to deliver security updates regularly, its security it is so well thought that the only action that its security team encourage to do regularly in order to keep the website secure is to apply the updates as soon as they are released. Additionally, Drupal has a robust role system to handle the actions of every user, the administrator can create as many roles as needed with specific access for each module and specific actions to perform in every single module.
- Great extensibility; the most of the modules that Drupal has are 100% configurable and reusable, modules such as “Views” and “Panels” make a great part of the work during the development of a website, for example, “Panels” provides tools to create layouts that are 100% configurable, making the entire website configurable as well, even by the user himself, “Views” has the capability to create any type of list of any type of data, it provides filters with applicable grouped logic conditions that can fetch the content of the website by any criteria necessary, it can page the list and apply additional filters called “contextual filters” depending on parsed arguments, it can apply a fallback for any list or filter if there were no results, to top it off, there are a lot of modules that can work with it, providing extra features. Its extensibility also can be seen when using its translation modules, almost any content can be translated including blocks, every content type, menus and some other modules that support it. Although Drupal is not that simple to theme, some base themes provide tools to make this process really simple, base themes as Adaptive themes and Omega are HTML5 ready and are pretty configurable saving time and effort during theming.
- Great stability; almost all Drupal modules have a great quality thanks to its development concepts, although the modules can work with each other, they do not interfere with any other or compromise the performance of the website.
- Community development-oriented; in my personal opinion, the key of Drupal success it is on the development concepts that its community applies encouraging each of its members to apply the same concepts, this has lead to a solid product that meet almost any requirement.
- Robust security; Although security is a matter of habits, Drupal has proven to be more secure than other content management systems, its security team is dedicated to deliver security updates regularly.
- There are a lot of modules requiring programming skills to make customize it: there are a lot modules that implements CSS class names to add a custom styles, but, some other modules do not have that capability, and the only way available to do it is writing a custom CSS in the theme overriding the default CSS of the module, that is something that it seems to happen pretty often.
- Lack of modules that provides “out of the box” solutions for specific problems: it is well known that Drupal is not an “out of the box” product, it is more as a framework, therefore that is the reason why Drupal modules exists, despite of this, there are quality modules that are missing. For example, Drupal just have a few modules that can provide web elements such as tag clouds and slideshows, the most of them do not work very well, and if they do, they look so bad that you are more likely to customize it with CSS code, it is obvious that those problems can be solved using “Views” and adding custom code and/or theming the output, but it should exists a better solutions for this.
- You might spend much more in order to use it: although Drupal is an excellent CMS, compared to others CMS, it is harder to use, that affect drastically the budget for development on Drupal. In my personal opinion, Drupal has great capabilities, but you will not get the most of it if you do not have your own server (dedicated, VPS or any other), there are some modules that require extra configurations on the .htaccess, Apache or PHP, its performance would be better if you have your own server, of course to own server is not a must, but that is something that would improve the efficiency of the website.
- Some minor features are missing: there are some features left such as the capability to change the menu links without using a theme function, those are just some little things left to do but they are still necessary.