Drupal has become one of the largest used CMS (Content Management System) used to date. It can be setup by developers, designers and even non-technical individuals, and it's used by some of the biggest corporations, governments, councils and businesses alike.
Complex systems can be built by using Drupal’s superb module system. There are just under 20,000 modules to select from for all Drupal versions (over 5000 over those are compatible with Drupal 7). In case you can’t find exactly what you want; existing modules can be built upon or entirely custom modules can be developed using the Drupal framework.
Modules give the ability to create functionality, such as scalable multilingual sites, searchable product catalogues and integration of API’s. These modules are always being tested and evolved by the Drupal community to ensure code is functional and secure.
It was a difficult task to pick the top 10 modules, as there are so many to choose from, but I gave it a good go. So here are my top 10 modules for 2012.
Views is on every ‘top modules' list you find and it is too important NOT to be there! So I place it at my #10 so I can show you a unique bunch of other fantastic modules within my Drupal toolbox. Views allows the developer to create a presentation layer that can pull in all your content from various sources. It also provides the means to sort and filter the content in complex ways. If you need to display content with certain parameters and filters, Views is the way to go. You can even extend or override Views and even change how Views presents data using Drupal’s templating system.
This module is so useful, that Drupal 8 will have it built in to core!
Most of the sites we have developed with Drupal require users to login to CMS to manage various content. However, users do not require administration level permissions; so we use Drupal roles to split those users up. For example, a social media expert may only be required to manage articles, upload pictures and modify META data. We normally create a particular role for this type of user.
The problem arises, when we need to test the system as a particular user role. Sure we can have Chrome, Firefox and IE open for 3 different roles – what happens when we have 10 roles? We would have to create 10 user accounts and constantly be logging in and out. Ouch.
Masquerade solves this by allowing you, as the admin to quickly switch between these user roles. Once the module has been enabled and you have added your Masquerade block to a region; you can select the role you wish to switch to without having to create accounts or logging out.
The module works by modifying your role within the $user object. It's hidden from non-admins and allows you to switch back and forth between roles defined within the system.
8. Menu block
Have you ever needed a secondary menu or even a footer menu? Menu block is your friend.
This module allows you to create a 'menu block', which behaves exactly like a regular Drupal block but with lots of extra features. You can select where the menu tree starts, how many levels deep and even if it's expanded to show all children elements. All the regular classes and active trails are added as normal; so it’s easy to style using CSS in the same way as a normal menu.
The magic of this module is that once you've used it on your site, you won't need to update links manually ever again!
With our more feature rich sites, where many contributed and custom modules are installed, scrolling through an endless module list on the module administration page is a pain!
Module filter groups all modules by their Package name and displays them into clickable vertical tabs. You can filter the list on whether a module is enabled, required or even unavailable. The search box is a great feature, allowing you to filter by input. When you need to quickly find, say the Views UI module, this will do the trick.
Every one of our clients is concerned with SEO and rightly so, they want good positions in search rankings for their chosen keywords. Along with other SEO techniques we use, the Global Redirect module will help you without having to do any coding.
Once enabled, the module can remove trailing slashes, redirect '/node/xxx' URL's to their proper alias and redirects if a user doesn't have access to a given URL. I would say one of the most important features is in redirecting the node URL's to their proper aliases; search engines will not flag your pages as duplicate content, which is a big 'no-no' in the SEO world.
5. Mime Mail
Drupal comes with the ability to send e-mails in plaintext format, which is great. However, it is not possible to send HTML e-mails out of the box.
With network speeds increasing and modern phones/tablets using fully-featured browsers, sending HTML mail is a must. Mime Mail module does everything for you, so you don't need to fiddle with encoding, format and carriage returns. This module handles everything for you.
All you need to do is provide the HTML markup, maybe a few graphics and the CSS. Mime Mail will even convert classes into inline styles - easy!
Drupal 7 uses entities for pretty much every piece of content. Read this post on Drupal.org for more information.
Entity Reference is the equivalent of the 'Node Reference' and 'User Reference' modules in Drupal 6. If you needed a page with the list of books belonging to an author, this is the module to achieve that.
If your site needs to be multilingual, i8n (as it's commonly known because of the 18 characters between the I and the N) adds some nice functionality on top of Drupal's core translation modules: Content Translation (D6/D7) and Entity Translation (D7/D8).
The Locale module is built into Drupal 7 and is used to translate interface elements such as, system strings, menu items and text labels. Content Translation allows you to translate whole content types, such as articles and products. Each translation for that piece of content would all belong to a ‘translation set’. This would allow you to have a separate alias per content.
Entity Translation (not compatible with D6) on the other hand allows the translation of any number of fields within an Entity or piece of content.
Internationalization also contains a plethora of sub-modules. Each one is important so I advise to get to know all of them and know what each one is capable of. I can't list all the sub modules here but the sub-modules allow you to do things such as, having the ability to translate blocks, translate strings from the source language (not just English), synchronize fields between translations, translate taxonomies and system variables.
The i8n module is large but enables a complex multilingual site to be setup. The configuration needs to be setup pretty much perfectly from the start, as once content is on the system; it will be difficult to make changes that won't affect current content.
Debgroup is a great example of one of bigger multilingual sites we have developed.
This module has found its way into my arsenal recently from having to create complex block placements. The module allows for blocks to be placed within regions under a certain 'context', or conditions, if you like. The region system provided by Drupal is sufficient if you only need basic conditions to be true, e.g. having a certain block placed in region x on yz pages. Context allows you to place any number of blocks in any region based on many conditions, including paths, excluding paths, user roles, node type, taxonomies and many others. You can even mix and match conditions.
The module requires a little getting used to but enables complex placement of blocks, setting menus and other items. Once mastered, it can replace your Drupal block system – so you can have all your blocks located all within context.
There is so much more you can do with Context, so it is a must to at least check it out!
Features is at my #1 spot and deservedly so. Features allows you to package up parts of your sites into a module. This module can then be copied to a completely different site, enabled and.... Voila! You have just duplicated functionality from one site to another in the space of a couple of minutes. Features also allows you to recreate a ‘feature’ and import it into the site again, updating any structural changes.
You can package up content types, taxonomy structures, views, permissions, roles, ImageCache presets or anything that integrates with CTools; this list is large and continually growing :)
Another module that goes hand-in-hand with Features is Strongarm. This modules allows you to export system variables in your Feature. So for example, you could set the site details (e.g. email, site name) with a single Feature. Since many modules use variables, these could also be packed into a Feature. Module developers should also allow their variables be exported with Strongarm to stay compatible with Features... although Drupal 8 will (plan to) have all configuration stored in physical files and not the database!
At Access, we have been using features heavily for our development, staging and live workflow. Along with GIT, it allows our development team to effectively work on the same codebase, increasing our productivity dramatically.
Features & GIT would require a whole series of articles in itself, so watch out for that one!
Drupal modules are constantly being created and evolved. If you can’t find a set of modules that fit your requirements, we can build your custom solutions here at Access.