Skip to content.

OpenAdvantage

Sections
Home Articles Drupal review

Drupal review

This review follows on from my previous article, which outlined the criteria I applied to many of the main open source CMSs to determine their suitability for a developer. Drupal is an excellent, lightweight, flexible system which can be used in a variety of contexts, and is one of the open source CMSs I would recommend without hesitation.

Homepage: http://www.drupal.org/

Version evaluated: 4.5.0

License: GPL

Platform: PHP + MySQL/PostgreSQL; it has no exotic dependencies and will run on standard ISP web space

Commercial support: several companies provide Drupal site building, but all of the ones I found are based in mainland Europe, the USA and Canada (see http://drupal.org/services for details) - none in the UK I could find

Example sites:

Overview

I have done extensive testing of this system, and am impressed by its flexibility, code quality (generally), and modular design. All of these factors make it eminently suitable for customisation by an IT shop. Unlike Mambo, it is easy to hack the templates, layout, menus and navigation of a Drupal site; unlike Plone, writing an extension (module) for Drupal is simple, providing you know PHP. (Mambo and Plone will be covered in later articles.)

Drupal's origins are as a tool for building community sites, and as a result it has many features to support such sites. It would make a good choice for a blogging or news site, though it is also capable of supporting a standard website.

Default capabilities

Drupal comes with a standard set of "modules" which provide core functionality. However, because Drupal is very stripped down, some functionality I would consider core to a useful website is not included (e.g. fine-grained access control).

Below are some feature highlights included in a standard installation:

  • Standard web pages and articles: users can edit and publish standard HTML pages using a web browser

  • Simple workflow tools for content publication: for example, can require that new pages pass through a review before going live

  • RSS feed aggregator: can pull in RSS (not Atom) feeds and present them as a set of HTML pages

  • Blog + blog API: can integrate with external blogging tools

  • RSS feed: a feed of the items on the front page is provided by default

  • Archive old content: old material can be presented via a calendar interface

  • Book: collaborative environment which allows a set of pages to be strung together as an online book; could be used for manuals of teaching materials

  • Comments: each content item can present an area where users can append comments

  • Threaded discussion forum

  • Polls: users can post their opinion on a selected topic, and the system will aggregate the responses

  • Content taxonomy: different classes of content can have their own vocabularies associated with them; classification of new content can be enforced, so that any new item must have at least one term from the vocabulary associated with it

  • Throttle: this can be used to turn off data-driven parts of the site when the site is congested

  • Logging: important events and errors are viewable through an online log

  • Cache: dynamic content can be cached to ease the load on the database

  • Search engine: this provides a search across site content, but I have found it unreliable

  • Upgrade tools to migrate from one Drupal version to the next

Additional modules

Additional modules are available from the Drupal website. They are very easy to install: usually, a folder is copied into the modules folder of the Drupal install and that's it; occasionally, the database will need to be modified using a script supplied with the module. Once installed, modules can be activated and deactivated through the administrator interface.

Some of the more useful modules are summarised below.

  • PDFView: convert content to PDF format (use the CVS version, which produces better output)

  • Typecat: display content by category

  • Filestore: upload files to system

  • Spam: detect spam content and comments (download the CVS version, which is stable but has better features)

  • Flexinode: create custom content types (e.g. you could have a "Club" type which let you store details about clubs, their meeting times and dates, and meeting location)

  • Node_privacy_byrole: gives fine-grained control over permissions

  • HTMLArea: WYSIWYG editing of content

  • Atom: add Atom feed URL to page header

  • URLFilter: automatically filter URLs and email addresses in content items, converting them into links

  • Webform: build interactive forms (e.g. feedback or contact forms) via the Drupal administrator interface

One caveat: the code in some of the add-on modules is scrappy (depending on who wrote them). You may find that you need to tweak the code in places. However, I've found the code in the core Drupal modules to be generally of good quality.

Template extensibility

By default, Drupal comes with four themes which are simple and functional, based on XHTML and CSS. None would win a design competition, but they would be OK for a small company website.

Drupal's template "language" is very simple, based on HTML with a few custom tags. They are also declarative, containing no logic, which makes them very easy to follow and modify. A template is entirely contained within a single folder, and can consist of as few as two files; again, this makes it easy to modify and create your own templates.

One issue is that Drupal does not provide very fine-grained control over how text is formatted. For example, some sections of text (like the text describing who submitted a content item) are generated as a formatted string, e.g. "Submitted by elliot on Mon, 2005-01-03 18:56". If you wanted to change this to something like "Submitted by elliot @ Mon, 2005-01-03 18:56" (replacing "on" with the "@" symbol), you would have to edit the Drupal core code. (N.B. you can change how dates are formatted through the administrator interface.)

Having said this, it is possible to replace the entire templating engine with your own, giving finer control over how content is rendered.

Other parts of the look and feel aside from the template can be edited directly through the web interface, including:

  • Menus
    New menus can be created; the default menus can be edited or removed; and menu items can be added, deleted or moved in any menu.

  • Side bars
    It is possible to have no side bars, or side bars on one or both sides.

  • Blocks
    These are the chunks of HTML making up the side bars which provide site navigation. Many Drupal modules provide a chunk which can be inserted into a side bar: for example, the book module provides a block which shows the books available as links.

Elegance

The Drupal code base is easy to understand, making it ideal for customisation. It incorporates several useful tools to make writing your own modules easier, e.g. SQL functions for executing queries against the Drupal database and code for escaping HTML characters correctly.

Drupal modules also have the potential to tie deeply into the core, as Drupal provides many "hooks" for attaching new code. Drupal calls these hooks at several points during the rendering of a page, and checks activated modules for code which apply at each step. For example, these are some of the places where a module could affect page rendering:

  • When the header or footer of a page is rendered, a module can insert its own HTML

  • When a user submits a new content item, the content can be filtered or validated before it is saved to the database

  • When the administrator menu is displayed, the module can have its own configuration screens made available

Additionally, the design of the core code is modular with the intention of making it extensible, meaning you can ignore it and write to its API instead of worrying about its internals.

On the down-side, the documentation explaining how to write modules is a bit lacking. The documentation which is available can be found on the main Drupal site; API documentation is available from http://drupaldocs.org/.

Related articles: