Drupal is a free powerful CMS (Content Management System). Though many describe it as a CMF (Content Management Framework), I think a better term would be SOS (Site Operating System), because Drupal provides the interface between Web sites and users and allows users to easily customize and control the operation of their Web sites.
Actually Drupal bears some similarity with Emacs. Both have a powerful and elegant core and provide the interface to extend core functionality with the help of modules (add-ons, plug-ins, packages) that rely on a set of predefined hooks. This is the reason why I like both. As an extension language Emacs uses a nice language Emacs Lisp, but unfortunately Drupal is based on a dumb language PHP. However, regardless of its implementation language, Drupal is a beautiful system. See also how to configure Emacs for Drupal.
There is an overwhelming number of available Drupal modules. I have the experience of using about 100 modules. I'd like to help you to find and select necessary modules from the list of similar modules with the following description of the most useful modules.
You can't build and run a decent Web site without them. The first thing to do after unrolling a new Drupal site is to install these modules.
- CCK (part of core in Drupal 7)
- Adds custom fields to nodes and defines new content types.
- Provides a flexible method for Drupal site designers to control how lists and tables of content are presented.
- Token (will be part of Drupal 7)
- Token handling services for Pathauto and other modules.
- Automatically generates clean URL path aliases for various kinds of content (nodes, categories, users).
- Transliteration of Unicode names and sanitizing of file names during uploads.
- Administration menu
- Administration menu bar at the top of your website (not necessary for D7).
- Speeds up common administration tasks like publishing or promoting nodes through the use of AJAX callbacks that saves lots of page loads.
- Search and Replace Scanner
- Search-and-replace plain text or regexp against the title, body and CCK text content fields on all nodes.
- Adds a tab that shows revisions and highlights added/changed/deleted words between revisions.
- Flag(previously known as Views Bookmark)
- A flexible flagging system that can provide any number of flags for nodes, comments, or users. Some possibilities include bookmarks, marking important, friends, or flag as offensive.
- Content Templates
- Allows modification of Drupal's teaser and body fields using administrator defined templates, i.e. you can modify your theme for content types directly on the admin pages without modifying theme files.
- Content Access
- Manages permissions for content types by role and author.
In addition to the Pathauto module:
- Path redirect
- Redirect users from one URL to another. Allows you to specify a redirect from one path to another path or an external URL, using any HTTP redirect status.
- Global Redirect
- Searches for an alias of the current URL and 301 redirects if found. Stops duplicate content arising when path module is enabled.
- Automatic Nodetitles
- Allows hiding of the content title field in the form. To prevent empty content title fields one can configure it to generate the title by a given pattern.
- Views PHP
- Allows administrators to use PHP code in fields, filters and sorts. This is the successor of Views Custom Field for both D6 and D7.
- Views Bulk Operations (VBO)
- Augments Views by allowing bulk operations to be executed on the displayed rows.
- Blocks form submissions by spambots.
- Submodule of the module CAPTCHA that uses the reCAPTCHA web service. Unfortunately, spammers can pay workers in developing countries to solve CAPTCHAs, where workers are paid between $0.35 to $1 for every thousand CAPTCHAs they solve (see recent article with more details). So it's not easy to protect content from spam when CAPTCHAs are solved by humans, not bots. But there is a better submodule below.
- Captcha Riddler
- Submodule of the module CAPTCHA that lets site administrators create their own questions to foil automated spam bots. Humans can still be paid to solve them, but a question can be context-sensitive: if a question asks you what is the name of your site, the answer isn't going to be obvious if the question has to be answered outside the context of your site.
- Useful for creating questionnaires, surveys, polls or contact forms.
- Filter Default
- Allows you to assign a default input format for nodes and comments for each role. So you can assign the PHP code default input format to the admin role, and the Full HTML to the author role.
- Allows you to set maximum lengths to the body and title fields of any content type.
There are many modules for different WYSIWYG editors, but I recommend FCKeditor as more advanced and user-friendly WYSIWYG editor.
- Allows Drupal to replace textarea fields with the FCKeditor - a visual WYSIWYG HTML editor that brings many of the powerful WYSIWYG editing functions of known desktop editors like Word to the web.
- Allows you to use client-side editors (a.k.a. WYSIWYG editors) to edit content in Drupal. It replaces all other editor integration modules and no other Drupal module is required (perhaps, this module is unnecessary when you use only FCKeditor).
- External Links
- Finds all external links on a page and add an external icon indicating it will take you off-site.
- Service links
- Adds links to social bookmarking sites like del.icio.us, Digg, Facebook, LinkedIn, Reddit, StumbleUpon, Technorati.
- A CCK content field which lets you add a link to your content types, including URL, title and a target attribute.
- Comment Notify
- Sends notification e-mails to visitors about new comments on pages where they have commented. It is better than other notifications modules because it works for both registered and anonymous users.
There are two primary ways to add images: with the help of Image.module or using the CCK field type ImageField. I highly recommend ImageField because it is more flexible than fixed Image nodes with the hard-coded Image content type created by Image.module. (There is also a small overview of image-related modules)
Modules related to Image.module
- Image (will be removed in Drupal 7)
- Allows users to upload images into Drupal. It also contains submodules image_gallery, image_attach, image_import.
- Image Assist
- Allows users to upload and insert images inline into content. It automatically generates an Add image link under fields of your choice. Clicking the link opens an image browser, displaying all images that have been uploaded via the Image module.
Modules related to ImageField
- Allows you to setup presets for image processing. If an ImageCache derivative doesn't exist the web server's rewrite rules will pass the request to Drupal which in turn hands it off to ImageCache to dynamically generate the image file.
- Imagecache Actions
- Provides a suite of additional processes that can be added to the imagecache pipeline, including watermarking, overlays, text overlay, color-shifting, brighten/darken, alpha blending, canvas manipulation, background, file format switcher, rounded corners.
- ImageMagick raw action
- Allows you to enter ImageMagick command line options as an imagecache action.
- Provides an image upload field for CCK. ImageField is a CCK-based alternative to the legacy Image module. It boasts features such as multiple images per node, resolution restrictions, default images, and extensive Views support. ImageField does not provide a built-in thumbnail solution, but complements the incredibly powerful thumbnail generation module ImageCache.
- Imagefield Import
- Allows users to import a large number of images into a CCK content type that contains an imagefield.
- ImageField Tokens
- Extends the default functionality of ImageField module by adding the ability to use node tokens in the ALT and Title text.
- FileField Paths
- Extends the default functionality of the FileField module by adding the ability to use node tokens in destination paths and filenames.
- Provides a universal file upload field for CCK. It is a robust alternative to core's Upload module and an absolute must for users uploading a large number of image, video and audio files.
Modules related to IMCE
There is also a third way to add images to your site using IMCE uploader. I recommend using it only for simple images that are not part of the site content like site icons, etc.
- IMCE is an image/file uploader and browser that supports personal directories and quota. It is used for inline image/file insertion into textareas and as a file browser in many popular rich text editors such as FCKEditor.
GPS and EXIF
Drupal provides many modules that define locations and display them on maps. However, there is still no way to extract EXIF GPS coordinates from image files to display them on the map. There are a few most promising (but still non-functional) combinations of modules to do this:
- Exif + Location + GMap (here is a patch to fill location from GPS Exif tags).
- Geocode + Geo + GMap Style view from GMap (but this doesn't work).
- Geocode + Geo + gmap_geo from GMap Addons (but gmap_geo widget currently doesn't show a map).
- Geocode + Geo + module GMap+Geo (but there are no releases of the latter module to test it).
- exif2gmap (but it provides very limited functionality).
- File Framework extracts EXIF, but it's unclear how to display it on the map.
- Allows real-world geographic locations to be associated with Drupal nodes. Its drawback is that it's too address-oriented.
- Allows you to display Exif metadata on image nodes.
- Provides an interface to the Google Maps API. It also integrates with the Location module to display maps of Drupal nodes.
- GMap Addons
- A collection of addons for the GMap module: gmap_cck, gmap_debug, gmap_extrabaselayers, gmap_geo, gmap_markerlist, gmap_overlays, gmap_tracks.
- Geospatial module like Location, but also supports lines and polygons.
- Provides a CCK widget for the Geo module to populate geo fields from images that contain GPS information.
- GMap + Geo
- Provides a Google Map widget for Geo point fields.
- Google Maps Tools
- Reimplements the Gmap module and rewrites from scratch of the Mapadelic subsystem. Currently I see no reason to use it.
- GMap Field
- It seems this module is obsoleted now by other modules.
- Flexible date/time field type for the CCK content module.
- Displays date fields in year, month, and day calendar views.
- Taxonomy Image
- Allows site administrators to associate images with taxonomy terms.
- Offers various ways to add terms and vocabularies in one tag cloud. It also offers a sideblock for each taxonomy tree.
- Role Weights
- Allows site admins to specify certain weights for user roles. It can be used to promote premium users to the top of views.
- Public Download Count
- Keeps track of file download counts.
- Inline Registration
- Allows anonymous users to register via the node/add page, thus removing a step/barrier from the user actually publishing content.
- Email Registration
- Allows users to register using only an email address without username.
- Allows users to login using their e-mail address, and other login-related features.
- Login Destination
- Controls where users go after logging in: either static URL or a PHP snippet evaluating your own site's logic. There is a plan to merge it into LoginToboggan.
- Automated Logout
- Provides a site administrator the ability to log users out after a specified time of inactivity.
- Email Field
- Provides a CCK field type for email addresses with validation, encryption and mailto links.
- Fixes the problem of bad email 'Return-Path' header settings which prevent email bounce backs going to the sender of the email.
- JQuery menu
- Transforms multi-level menus into click and expand menus with a small plus icon on the left of every expandable menu item (this module is better than DHTML Menu and Active menus) because it provides more intuitive UI.
- Menu Trail By Path
- Sets the active-trail on menu items according to the current url.
- Menu block
- Provides configurable blocks of menu trees starting with any level of any menu.
- me aliases
- Provides shortcut paths to current user's pages, e.g. user/me, blog/me, user/me/edit, tracker/me, etc.
- Menu token
- Provides tokens, that could be used in title or in path of menu items (links).
- Custom Breadcrumbs
- Allows administrators to set up parametrized breadcrumb trails for any node type. This allows CCK-style node types to synchronize breadcrumbs cleanly with custom views or pathauto aliases.
- Taxonomy Breadcrumb
- Generates taxonomy based breadcrumbs on node pages and taxonomy/term pages.
- Highly configurable HTML5/960 grid base Drupal 7 theme.
- CSS Injector
- Injects CSS into the page output based on configurable rules.
Don't forget to disable the "Preprocess CSS" checkbox when you enable
CSS optimization under the performance section.
This module can be replaced with a simple nameless block that calls drupal_add_css on the specified pages.I don't recommend using a block for this.)
- Page Style
- Visitor-based style changer in the block and in the browser menu.
- User-based themes colorization.
- Meta tags, aka Node (key)words
- Allows you to set some meta tags for each node, view or panels page.
- Adds a clean, attractive voting widget to nodes.
- Aggregates content from XML feeds RSS 2.0, ATOM 1.0 and RDF 1.0. It is more powerful than the core module Aggregator.
- Provides content translation for nodes and taxonomy.
- Translation table
- UI for quick translation of taxonomies and menus.
- Search API
- Provides a framework for easily creating searches on any entity known to Drupal, using any kind of search engine.
- Database search
- Provides a backend for the Search API that uses a normal database to index data.
- Search API pages
- This module is for creating simple search pages for the Search API project.
- Site map
- Provides a site map that gives visitors an overview of your site. Please note it's different from the XML sitemap module.
- XML sitemap
- Creates a sitemap that can be automatically submitted to Google and other search engines to notify them of site updates. Please note it's different from the Site map module.
- Google Custom Search Engine
- Embedded search engine that can be used to search on your site.
- Google Analytics
- Adds the Google Analytics web statistics tracking system to your website.
- Provides web content providers with the means to earn revenue from visitors by displaying ads from Google AdSense advertising service on their sites.
- Mobile Codes
- Generates QR Code mobile barcodes that can be read by camera phones.
- Printer version
- Allows you to generate printer-friendly versions of any node.
There are two e-Commerce solutions: e-Commerce and Ubercart. I suggest e-Commerce when you need to add e-commerce functionality to your existing site (shopping carts, subscriptions, recurring payments, sell file downloads, shippable items) because e-Commerce is less invasive than Ubercart for non-commerce parts of your site. But I suggest Ubercart when you need out of the box solution to build an online store.
- For module and theme developers.
- Theme developer
- Firebug for Drupal themeing.
- Drupal For Firebug
- Helper module for a customized Firefox plug-in that displays Drupal debugging and SQL query information to the Firebug window.
- SEO Checklist
- Provides a checklist of good Drupal SEO (Search Engine Optimization) best practices.
- Language Icons
- Please don't use this module on your sites because using flags is very offensive for many users. For more information, see Flag as a symbol of language - stupidity or insult.
- Please don't use Lightbox-like modules because they have very poor usability.
- Must-have modules
- Content Management
- URL Handling
- GPS and EXIF
- Internationalization (i18n)
- NOT Recommended