Useful Drupal modules

Click on the module name for notes, comments, patches.
Recommendations (for and against) are my personal opinion only and may be out of date. Feel free to email with corrections/suggestions.

Displaying 1 - 50 of 106
Module name or machine name
Any text in the notes
Name D8 Personally Tested Last Updated
@font-your-face (fontyourface) 2018-11-19

d.o. page

Not recommended

For using typekit, google fonts etc.  But it's simpler to do web fonts manually in Twig templates/CSS.
D8 stable/mature - however it's confusing how you're meant to setup Typekit etc. and there are problems with uninstall it…  (there was an old D7 "typekit" module - deprecated).

28 Aug 2018: can't be uninstalled cleanly. The method described in #24 here works: https://www.drupal.org/project/fontyourface/issues/2916712#comment-12751073 if for example, you get an "The "font" entity type does not exist." message when running drush cr

Address (address) 2018-11-24

d.o. page

Used to be called addressfield.  Adds one dependency - commerceguys/addressing.

This is a bundle of address fields, the correct combinations are shown depending on which country the user selects via a dropdown.
You can configure which countries are allowed per field instance.
To set the default, use the Manage Form Display tab.

It validates postcodes are in the correct format. 

Also supports 'zones' (groups of countries/subdivisions) for shipping/tax purposes.

AddToAny Share Buttons (addtoany) 2017-02-07

d.o. page

Nice, clean, SVG sharing buttons. Project page says it's specifically optimised for Drupal.

Administration Views (admin_views) 2019-04-11

d.o. page

"Essential"

D7 only (as this is in D8 core as standard).

Converts /admin/people into a fully-fledged configurable view (i.e. fields, filters, exposed filters, header/footer, pagination settings etc.) 

(Dependency: views_bulk_operations)

Advanced Page Expiration (ape) 2018-09-17

d.o. page

Not recommended

I would avoid this.  The idea is you enter URL paths with wildcards and override the cache expiration.  I was unable to get it to work properly for pages (settings on config under Development > Performance) Also, re: caching images, those are files being served directly by Apache or Nginx, not via the Drupal front-controller, so caching settings need to be configured there.

AJAX Comments (ajax_comments) 2018-11-23

d.o. page

Not recommended

Not very actively maintained and it can be quite buggy.

Needs this patch:

Reply button can be pressed multiple times, resulting in multiple comment forms

I abandoned it for a project because the admin XHR response when you submit comments sends back comments you've already filtered out (I had written code to restrict visibility of certain comments).   Also had a problem where the initial comment form was left in place rather than being replaced, so you ended up with duplicates.

Alexa (alexa) 2017-02-06

d.o. page

Integrates with Amazon Echo. Allows Drupal to respond to Alexa skills requests.  See Dries' blog with video demo.

Allowed Formats (allowed_formats) 2018-11-20

d.o. page

"Essential"

Control which text formats are available per field. (Often you'll want some fields to be simpler than others - e.g. you might want restrict everyone to a single format so they don't see a dropdown menu. 

You can hide the 'About text formats' link and the list of available HTML tags, again per field, in the Form Display tab using the widget icon.

Autofocus (focus) 2017-02-08

d.o. page

Autofocuses the first field of form (forms can be specified).  No sign of a D8 port.

Automatic Entity Label (auto_entitylabel) 2018-11-20

d.o. page

"Essential"

Hide entity labels (i.e. titles) or auto-generate them. (Works for anything - nodes, comments, taxonomies).

Automatic Nodetitles (auto_nodetitle) 2017-02-07

d.o. page

You can hide a node's title field (for reference, every node has to have a title) and generate it automatically, similar to pathauto.  No-one's porting this to D8 yet.

Automatic User Names (auto_username) 2019-02-20

d.o. page

"Essential"

Removes the 'Username' field from registration form.  Use in conjunction with a module that allows users to login with their email address.
Generates a username in the background (Drupal still requires one) - adds 'Patterns' tab to Account settings for configuring the name.

Patches:

 

Autosave (autosave) 2017-02-08

d.o. page

Saves snapshot of content type form using AJAX.  Content types and save frequency can be configured.  No sign of a D8 port yet.

Bamboo Twig (bamboo_twig) 2018-11-19

d.o. page

Way to embed lots of objects in twig. note you have to selectively enable various sub modules for each of the commands.  Seems pretty actively developed and well documented.

Better Exposed Filters (better_exposed_filters) 2018-11-20

d.o. page

"Essential"

My recommendation - safe to use but understand it's currently pretty limited due to bugs.

To activate, change a view's Exposed Form style (Advanced column) to 'Better exposed filters'.  

  • Lets you enable AJAX auto submit. The difference is without BEF, with Use AJAX, an AJAX request (vs a full page reload) is made but ONLY when you click 'Apply'.  With BEF, as soon as you change a dropdown the view updates (like the filters on this site).  
  • You can change the input method for each field (e.g.a single checkbox for what would otherwise be a True/False dropdown), make them "collapsible", add select all/select none links where appropriate.  
  • Rewrite option that lets you reword all the options for the filter and also delete some.

Limitations:

  • If you have a search field - e.g. Combine fields filter - you MUST turn on 'Exclude Textfield' if you are using 'Autosubmit'  
  • Most of these options *aren't* available for taxonomies (e.g. webform where  
  • If you use the default views single or grouped exposed filters, with selects/radios, they work correctly, but when you change them to BEF style, with checkboxes and AJAX, they don't (form is submitted and the checkbox has disappeared)
  • Bug: reset button doesn't use AJAX, it sends you to a view URL instead (disable it in settings)

 

So all you can really do with BEF at the moment is use the AJAX setting.

Documentation 

Block Visibility Groups (block_visibility_groups) 2017-02-08

d.o. page

Rather than change visibility for individual blocks, you can group them together and assign complex visibility settings to all of them. Module page promotes it as a simpler alternative to Panels.

Captcha (captcha) 2019-04-01

d.o. page

"Essential"

Framework for using (many) different types of captchas on forms such as user_registration.
e.g. try 'reCAPTCHA' which is Google's "I am not a robot" captcha.  Personal experience is that's much better at preventing spam than the standard "image" one.

Tested with D7.

CKEditor Custom Config (ckeditor_config) 2018-12-06

d.o. page

I've not actually used this but I adapted it's code to enforce a configuration setting (I wanted to remove the HTML dom elements that are shown in the status bar).

The module allows you to supply your configuration using the UI.

CKEditor Wordcount (ckwordcount) 2018-12-06

d.o. page

Adds word/character/paragraph count to the CKEditor status bar (can optionally enforce a word/character limit)

Configured via Text formats and Editors (/admin/config/content/formats).

Requires the ckeditor wordcount library - example composer.json for that (put this in your 'repositories' section):

        "ckeditor.wordcount": {
            "type": "package",
            "package": {
                "name": "ckeditor/wordcount",
                "version": "1.17.4",
                "type": "drupal-library",
                "extra": {
                    "installer-name": "wordcount"
                },
                "dist": {
                    "url": "https://download.ckeditor.com/wordcount/releases/wordcount_1.17.4.zip",
                    "type": "zip"
                },
                "require": {
                    "composer/installers": "~1.0"
                }
            }
        },

and then require:

"ckeditor/wordcount": "1.17.4",

Patch needed:

https://www.drupal.org/files/issues/2018-12-06/ckwordcount_plugin_path_2850845-9.patch

(to ensure modules gives browser correct path of plugin.js - if your ckeditor input disappears, check console.log and it's probably that)

The notification module is a dependency.

CKEditorHeight (ckeditorheight) 2018-11-19

d.o. page

Makes CKEditor fields respect the "rows" setting of the fields. (Has to be converted to pixels - there's a global setting, configured via a pixel factor and offset.)

ClamAV (clamav) 2018-11-20

d.o. page

"Essential"

Virus check files uploaded by users.

In Drupal - when it can't connect you get an error on the Status Report.
The status report also shows you the version which includes the virus signature info.
As soon as it can that error goes away.

There's a "verbose" option in the config settings (which logs files that "passed" the virus check as well as failed)

You need to tick 'Enable ClamAV integration' before it will actually scan any files.

Test it's working by creating a small file with the short Eicar test signature string

Notes: ClamAV does use a fair bit of memory (because it keeps a copy of all the virus signatures)

Also sensible to run a Nagios NRPE check to ensure ClamAV is always running.

Patch:

Requires core patch to avoid possible data loss (race condition) - use my rerolled patch (#35) 

Coder (coder) 2018-11-21

d.o. page

Checks your code against Drupal coding standards.

No need to install this - isn't actually a module, it's a set of phpcs rules installed as standard in /vendor/drupal/coder/coder_sniffer

Coffee (coffee) 2018-11-21

d.o. page

"Essential"

Keyboard shortcuts. A bit like Spotlight/Alfred/Launchbar.

Alt+D to launch (memonic: alt + D = coffee!)

Handy as it doesn't clash with browser keyboard-shortcut extensions such as Vimium.

Use  8.x-1.x-dev and you will no longer need this patch which fixes the CSS when navigating options.

Comment Notify (comment_notify) 2018-12-15

d.o. page

"Essential"

Allows users to receive emails for replies to their comments (or optionally for all comments on a node).  Can be toggled by content type (although not by comment type, if you have more than one comment entity).  In permissions, you can also control which roles can subscribe.  Can also set it so the author of a node also automatically gets emailed for every comment.

I'm using three patches:

I also have a site which uses two comment types; I wrote a patch to turn off the notification checkbox for one of them.

Computed Field (computed_field) 2018-11-25

d.o. page

Add a field whose value is calculated using raw PHP; specifically $value = 'foo';

(The recommendation is you write your PHP in a module of your own, and then call that method from the UI - for security and version control reasons).

Note: value is only calculated when nodes are saved (i.e. will initially be empty for existing content).

D8 status; alpha but working.

Config Ignore (config_ignore) 2018-11-20

d.o. page

"Essential"

Selectively ignore configuration entries during an import - e.g. site settings / the system.maintenance message.

Configuration Override Warn (config_override_warn) 2018-11-19

d.o. page

"Essential"

Displays a message on config pages indicating which config settings have been override by settings.  
There's a config setting where you can hide the actual values (so you can hide API key - you need to use config editor to edit that, there's no admin page)

Configuration Read-only (config_readonly) 2018-12-07

d.o. page

Lock all configuration changes via the admin UI - e.g. if you need to lockdown a production environment.

config_readonly now has a whitelist, added via an array in settings.php.

Configuration Update Manager (config_update) 2018-11-19

d.o. page

You also need to enable config_update_ui, which adds an 'Updates report' tab to Config Sync (/admin/config/development/configuration/report)

Contact Storage (contact_storage) 2018-11-22

d.o. page

"Essential"

Store all contact form messages in the database (as an entity), rather than just emailing them.

Integrates with views, if you want a view of messages.

Messages are accessible (can be edited or deleted) at /admin/structure/contact/messages.

(May be useful considering From: address SPF/DMARC problem with contact forms, i.e. there may be cases where some emails aren't delivered.)

CSS Editor (css_editor) 2018-11-19

d.o. page

"Essential"

If you only need a small amount of CSS, or want users to be able to directly edit it through the admin UI rather than creating a theme or module.

D8 Editor Advanced link (editor_advanced_link) 2018-11-20

d.o. page

Adds options should as choice of target, title, class ID etc. to the link dialog in CKEditor.

Needs configuring after install.

Datetime Range (datetime_range) 2018-11-19

d.o. page

"Essential"

Now in core, but you need to enable it.

Adds an 'all-day' option.

Devel (devel) 2018-11-25

d.o. page

"Essential"

Key features:

  • Kint (enable kint submodule, for pretty variable printing, way to view properties and methods)
  • DevelMailLog (redirect all mail to text files instead, specify location directory, specify filenames using tokens for recipient, subject, timestamp) 
  • Config Editor and State Editor (enable via /admin/config/development/devel/toolbar)
Double Field (double_field) 2018-11-23

d.o. page

"Essential"

Store a pair of fields together (numbers and text, boolean, email, telephone, Url).  As normal you can specify the quantity of double fields per entity, or allow an unlimited number.

Don't use it for:

  • links - you might have one field for the URL and one for the description, but the display widget won't let you merge them into a clickable link.  That's what the dedicated link field type is for.
Entity Access Audit (entity_access_audit) 2018-11-22

d.o. page

This is a way of visualising - via grids of ticks and crosses - which roles have access to different operations on different entities.

Introductory blog post

Entity Embed (entity_embed) 2018-11-21

d.o. page

Lets you insert any entity type (supposedly) via the WYSIWYG editor, and like images you can set alignment etc.  It creates a toolbar button that can be added to the toolbar configuration in 'Text formats and editors'.  The strings needed can be pretty long - e.g. 

<drupal-entity data-embed-button="snippet" data-entity-embed-display="entity_reference:entity_reference_entity_id" data-entity-type="snippet" data-entity-uuid="216914ab-1bc2-4a73-975b-dc1de79e849a"></drupal-entity>
 

Entityqueue (entityqueue) 2017-02-07

d.o. page

Build a custom list of nodes. The setup is via Admin > Structure. Currently D8 alpha.

Environment Indicator (environment_indicator) 2018-11-26

d.o. page

"Essential"

Change the colour of the admin menu according to whether you're using dev, staging, production etc.

(You can also add 'switcher' menu links, e.g. Open in dev, Open in Prod). 

Notes:

- need to reset the cache after you've made changes [#2406619]

Exclude Node Title (exclude_node_title) 2017-02-06

d.o. page

There are situations where you will want to hide a node title - e.g. if you have a view and insert an image field that's an entity reference to another content type.  Module allows you to hide titles by content type or view mode and for all nodes or just a custom selection.  Beta in D8.

Features (features) 2018-09-17

d.o. page

Not recommended

Update: most people are now moving away from features. There is a Configuration Management initiative under discussion in Drupal 8.

Package up selected configuration for "features" (e.g. a blog or a photo gallery etc.) for reuse on other sites.  Not the same as the new D8 Config sync, which is for exchanging configs between different environments of the same site and requires a cloned DB sharing the same UUIDs.

Feeds (feeds) 2018-11-21

d.o. page

"Essential"

As of Sep 2018, up to alpha3 in D8 (but not personally tested).

Lets you import CSV/RSS etc.  files and various other formats and map them to nodes/user/taxonomy terms, either one-off or periodically.

Field collection (field_collection) 2017-02-08

d.o. page

Allows you to group a set of fields together.  In active development for D8 but still a lot of open bugs at time of writing - project page says it will likely be replaced by Paragraphs.

Field Formatter Condition (fico) 2018-11-21

d.o. page

(based on ffc which hasn't been ported to D8).  

Allows you to configure field display based on value.  Adds a 'Conditions' pane to the cog in Manager Display of all entities (so content types but also comment types, e.g. if you have comments with multiple fields)

Requires Display Suite (ds)

Note: if you wanted to hide say a checkbox when it's value is false - you can do in it core with Manage Display - turn the label off then set (via cog wheel) the output format to Custom, and you can enter a value for true and leave false blank - exactly the same widget for boolean values you use when setting the output of a field in a view.

Field group (field_group) 2018-11-20

d.o. page

Add group' button to /admin/config/people/accounts/form-display (or any other form), can then group fields inside fieldset/other HTML wrappers.  

Types of groups:

  • Fieldsets
  • Horizontal tabs
  • Vertical tabs
  • Details
  • Accordions
  • Divs
  • HTML elements

In theory can use this to add <div>s with css styles such as flexbox, like webform uses, but CSS to support that needs to be present on the page.
 

Field Permissions (field_permissions) 2018-11-21

d.o. page

"Essential"

Control editing/visibility of individual fields by role.  

As well as custom settings ('create own', 'edit own', 'view own', 'edit any' and 'view any' - all per role), there's a Private setting which gives access to the author and administrator only. 

These are automatically applied to views.

Finding the setting: Look for  Field visibility and permissions – on the Edit tab, NOT Field Settings.

In /admin/people/permissions there's also a Access other users private fields permission.

Field Tools (field_tools) 2018-11-22

d.o. page

"Essential"

Provides:

  • /admin/reports/fields/tools - new Tools tab contains a more detailed field list that lists the instances (e.g. entities/content types) where each field is in use
  • editing individual fields in a content type - new Clone tab which will let you copy it to other Bundles (it also copies form and view display options)
  • Manage Fields page of a content type - new Clone tab where you can selectively clone multiple:
    • fields
    • displays
    • copy display settings

 

Flag (flag) 2017-03-13

d.o. page

"Essential"

Handle favourites, reading lists, spam, friend lists etc.  Can be applied to any entity (nodes, users, comments etc.)  It appears as a clickable link. Can choose between page reload and AJAX when user toggles it.  Linked with views, and you can trigger events when flag count reaches a threshold.

Flippy (flippy) 2017-02-06

d.o. page

Add Next/previous links to node view for specific content types - e.g. image gallery.  Powerful - supports: next/last, random link, you can specify exact text used etc.  Currently a dev version in D8.

Setup: activate for a content type in the 'Edit' tab (NOT manage display). Once Flippy is active, Manage Display tab will have a pager field so you can reposition the links relative to other fields on the page (e.g. above or below image).

Flood Control (flood_control) 2017-02-08

d.o. page

Protect against brute-force login attacks. Unclear what's happening with porting of this.