Provides an A-Z glossary (based on the first letter) for Search API indexes. It works for essentially any kind of entity (not just nodes).
Modules of Interest
This is meant to be a collection of modules I find interesting. Some may be created by me, and where's that's true you should see them tagged with
mandclu. Is there any particular value for the outside world to be able to browse this collection? Probably not, I just wanted a place to collect and categorize modules. And here you are.
Guardr is a Drupal distribution with a combination of modules and settings to enhance a Drupal application's security and availability to meet enterprise security requirements.
The Viewer module is a simple and yet powerful module to import and process structured or unstructured file types such as CSV, XLSX/XLS, PDF and present them in Drupal via Viewer reference field or a Block. The module comes with multiple plugin support for various data. Some of the plugins include integration with Chart.js, ApexCharts, Datatables and many more.
On a timed basis this module will save the current entity form state into browser storage. If an editor returns to a form that has a saved state, they will be given an option to restore that state. When the form is saved normally, any autosaved states will be automatically purged.
This module provides a system for users to gain or lose points for performing certain actions on your site, providing an incentive for users to participate in the site and be more active.
This module allows fields to be required only when the piece of content is being published or is already published. This can be used when you have fields such as tags or SEO information on your piece of content that editors really don't need to fill in until the content is going live.
Leverages the Field API to add registrations to any entity. Also leverages workflows to control processing registrations, and has Commerce integration for paid registration requirements.
This module uses a visitor's IP address to identify their geographical location (longitude/latitude), country, region, city and postal code, and stores these in a session variable. The module is able to automatically pull updated copies of free, flat-file lookup tables.
This module provides a rich set of tools for planning and reporting on your site's content. It includes a dashboard, interactive calendar, and kanban board.
The Security Review module automates testing for many of the easy-to-make mistakes that render your site insecure. Checks include file and directory permissions, text formats, error reporting, and more.
Allows a headless application to retrieve extra information for a page or path, that isn't included by default in the JSON:API representation of the content object: breadcrumbs, metatags, redirects, etc.
Token Content Access allows you to restrict access to individual nodes using URL tokens. In order to view protected nodes, users must provide a unique token via the URL. This allows nodes to be published and viewable to anonymous users (for instance with a special link from an email campaign) but not visible to the public at large.
This module provides to create menu items on a Taxonomy term page in Drupal 9/10. This functionality is similar to creating menu items for nodes. This module enables the "Available Menus" options on the Taxonomy vocabulary page. Then on the Taxonomy term add/edit form you can set the menu item for that term, just as you can do on the node add/edit form.
Views Table Rowspan defines new views display format name "Table Rowspan". This display will group rows in table and merge row has same value to one row use property rowspan.
Simple Feedback Survey is simple customer initiated survey used primarily to collect customer experience data from users visiting your site. The survey stores data in its own database table, however it can send data to BigQuery which can be used with Datastudio.
Creates a bundle-specific view mode to use for creating a comparison table, with permissions to use the comparison, a link field to add entities to the comparison, and a block to show a link to the comparison.
Provides an API endpoint for headless applications to send strings for translations or overrides, and another to retrieve all translated decoupled strings.
This module provides an additional display option for a views summary attachment to display its values as tabs. If using the Olivero theme, that theme's library to style tabs will also be attached.
A collection of useful UI tools for working with fields.
Field tools is developed as and when I have need of the features. If this module is useful to you, please consider investing back some of the time you save by adding to the module's functionality. Check the issue queue and TODOs in the code for suggestions where to start.
The Autofill module makes it possible to autofill the values from one textfield to another while typing. Once your field input was customized the autofill functionality will be detached.
Helps to manage toolbar items. You can do following actions.
- Change order of items
- Change label
- Change CSS class names (so you may set different icons)
Allows a site builder to build a view whose results will be automatically filtered to a taxonomy term set in the visitor's profile.
Views Flag Refresh allows site administrators to configure which views are refreshed automatically via AJAX when certain flags are selected. This is useful when you have a view that filters by flagged content and you want the view to be refreshed automatically when content is flagged or unflagged elsewhere on the page.
This module implements a new cache context, based on the value of a reference field on the current user. To use this new cache context in your own module, after installing this module add a cache content like
field_foo is the machine name of the reference field (e.g.
This modules add extra config to fields that allows you to configure the initial number of items to display for unlimited and multi-values (with cardinality bigger than 1) fields.
Provides tokens (
[entity_type:render:view_mode_name]) that render full entities using view mode specified.
This module is a Configuration Kit that provides a system for managing user-specific tasks. On first install the system is simple by design, but the tasks are stored as Storage Entities so you're free to modify and add fields as needed to suit the specific needs of your site: due dates, ticket IDs, a "task type" taxonomy reference, and so on.
This module adds a new field, widget and formatter, which allows
.svg file extension to be uploaded.
A new entity type for managing data that should be stored in the database, but only displayed within or associated with other content. If you're using a solution like Rabbit Hole to prevent direct access to an entire content type, that content might be better stored as storage entities.
This module provides a method for users with the necessary permissions to manually override the results being returned by Search API Solr. They will be able to choose a specific search term, and pick which nodes should be at the top, and also choose to exclude nodes so they will not be shown in the results.
Enables the recording and presentation of statistics for the Search API module. There are plans to implement usage and performance statistics in the near future. For now this module gives your Drupal site a top search phrases block for all the Search API indices on your site.
This module allows a site to boost Solr query results where the content has a taxonomy term reference that matches a selection in a field on the current user. For example, if your site had a taxonomy for animals, and a user had set their favourite animal as "elephant" in their user profile, the module would cause content tagged with "elephant" to appear higher in the search results.
This is a configuration-only module that creates a system for managing links with SVG icons, designed to be shown in a block on the home page. They are saved as Storage Entities to reduce clutter in the content system, and can be managed directly from the home page, within the settings tray (see screen captures).
This module provides a ready-to-use set of configuration for displaying Person nodes on your website, for example in a staff directory, faculty list, or list of physicians. The Auto Entity Label module is leveraged so editors only need to provide first and last names, and will be combined into a title for the node.
The Multiselect module defines a field widget to be used with the following fields types: List fields (text, float, or integer) or entity reference fields. It allows the user to select multiple items in an easy way. It consists of two lists, one of all available items, the other of selected items. The user can select an item by moving it from the unselected list to the selected list.
This module allows you to add a target to link fields. You can configure the link target per link if you select the appropriate field widget in the field settings.
Provides a new layout to use as a section within layout builder. Any block added will have its title shown as a tab in the tab set, and clicking a tab will reveal the content for the appropriate block.
Significant work has gone into making sure the generated tabs markup will be accessible.
In Drupal 8 and newer, you can create form modes which control how the fields are displayed in the edit form of content such as nodes and taxonomy terms.
The "issue" is that you can't actually make use of those form modes from config except for user register and edit forms.
This module allows you:
Force Users Logout module allows administrator to quickly force logout or delete session of any user(s).
This module gives three options
Provides a form (with an associated permission) to allow a site administrator to assign a flag to another user for a specific piece of content.
The Event Platform is actually a set of modules, each of which provides functionality designed to satisfy the needs of anyone creating a site for a Drupal Camp or similar event.
This module lets you visualize the Entity structure of your Drupal 8 site using an Entity Relationship Diagram (ERD).
While this isn't meant to be a fully functional tool to build new ERDs, it is meant to be used as a functional learning tool for developers and site builders.
Drift is the easiest way to add free live chat to your site, and start on your path to conversational marketing.
This module adds to the functionality of core's display_link views header / footer plugin in a number of ways:
A more configurable version of the navigation block provided by the Book module in core. The options provided include:
- Choose to show only a single book (or default to show all, as in core)
- Choose a maximum depth to create the menu
- Force the menu to be expanded
This module allows editors to move content to a different workflow state by accessing a specially crafted URL, for example:
This module provides a table for content administrators to quickly review all content of a specific content entity type (e.g. node, taxonomy term, etc) and bundle (content type, vocabulary, etc).
This module integrates the Ckeditor templates plugin.
It provides a dialog to offer predefined content templates - with page layout, text formatting and styles. Thus, end users can easily insert pre-defined snippets of html in CKEditor fields.
Provides a button in CKEditor which, when clicked, will run the HTML_CodeSniffer Accessibility Auditor on the source code of the content currently in the editor.
When installed this module now creates a new content type (Alert), a related taxonomy vocabulary (Alert Severity), and a view for display the alerts. The module will automatically create three severity levels.
This module improves on core's "Empty Node Frontpage behavior" area plugin (used in headers and footers) when used on views that show a restrictive set of content types (e.g. one or two) by allowing a site builder to add links that point directly to one or more forms to add content, of a specific content type. You can also specify a class, for example to format as a button.
When using media to add images to content, having media view modes defined by aspect ratio, combined with a bunch of different image styles for the images in that specific aspect ratio seems to solve the responsive images problem in a pretty easy way.
Provides a Leaflet-based map view to display a site's Place nodes, as an alternative to paid solutions like Google Maps. In addition to being free, Leaflet can be extended in a variety of ways, including with the Leaflet More Maps module.
Provides options for adding a link to your date output. An example use would be linking to your group's meetup page to RSVP, or directing users to a registration webform. By default links will only be added to upcoming events, but this module can be configured to add its links to all events.
This module leverages the Date Augmenter API to allow content to be associated with Individual values in a multivalued or recurring date field. Although designed to work with Smart Date, this functionality can be used with any field supported by a compatible date formatter, which includes core date fields.
This module provides links to add an event to a calendar, without relying on external dependencies or libraries. This module leverages the Date Augmenter API to provide a plugin that will add these links to another formatter, instead of forcing you to choose a formatter that only adds add to calendar links.
This module provides an API for modules to provide plugins that will add to or change the output of supported processors such as in Smart Date 3.4.x or newer. Currently available plugins for this API include:
Proof of concept for using Smart Date with Drupal Commerce to allow registration. This module will define a product type for listing events. If only using this system for free events, you can update the form display to remove the price and potentially the sku fields, and you will likely want to implement a simplified checkout process.
Creates an Event content type and a related Events view, with tabs to show upcoming and past events. This module helps new users get started using Smart Date, and also provides value as a "known good" set of views configuration.
Provides a variety of features to improve Drupal's handling of dates and times: A more intuitive widget, intelligent formatting, all-day and zero-duration events, recurring dates, and more. Also extensible using the Date Augmenter API.
Adds a tab to nodes that allows a quick preview of the node's representation as JSON:API. If using this with a Chrome browser, the formatting can be improved using the JSONVue extension, with the option enabled to format contents in frames.
This module allows multiple methods to simplify the use case of needing to add multiple content entries of the same type. In the same way that the taxonomy term creation interface loads the form to create a new term by default when a new term is created, this module provides a button to allow a content creator to immediately see a new form once the content they're working on is saved.
Could you configure your view to use overridden output to show fields within a details element? Sure, but that kind of layout in configuration can be less intuitive to maintain over time.
Provides a field output formatter that can be configured to hide output that goes beyond a configurable height, with options for how the user can expand the field to see the full content.
A former boss used to say, "The surest way to starve a dog is to put two people in charge of feeding it." If people aren't individually accountable, they often assume someone else will take care of a given task. A potential challenge with the powerful workflow capabilities in Drupal core is that they don't make anyone individually accountable.
Allows core REST endpoints to return data in XLS format, views to output XLS data via a "REST Export" or Data Export view, and provides an API to use XLS as a format when using the Serialization API.
Another module that checks for unique values, but this one optionally can run an AJAX validation on blur, so the editor can see any problems before trying to submit the form. Also has support for link fields.
I love the concept of this module. For your content types you can define rules for checking that content is unique, each rule checking a field or a combination of fields.
Provides a flexible system for users to rate content. A single piece of content can have multiple widgets, and a number of different widgets are available out of the box. Offers a customizable results summary, and can use the Charts module for reporting.
Being able to send email notifications from a Drupal site is great, but sometime the result can be a lot of noise in an administrator or editor's inbox. Message Digest allows for notifications to be sent on a fixed cadence (e.g. daily or weekly) compiling together all the notifications for the period.
Performs static site analysis to generate a detailed report with actionable best practice recommendations across a variety of concerns, including security, performance, database size and complexity, and more.
Similar to Restrict Login or Role Access by IP Address, but allows for path-based restrictions by IP, and other sophisticated rules.
Create IP-based restrictions on the ability to login, either universally or specifically for individual roles.
Ban IP addresses of anyone who requests a URL that matches a configurable set of rules, e.g. Wordpress login path, IIS admin path, etc.
Provides a personalization toolset that can do some simple conditional display of content, primarily using Smart Blocks. Also has integrations for a variety data handling capabilities including dataLayer objects, UTM code handling, and integration with subscription-based services that can inject more sophisticated algorithms, like Demandbase or 6sense.
Provides real-time feedback on keyword optimization and other SEO considerations to content authors and editors.
Collaboration tool for SEO on blog posts, social posts, and multichannel distribution. Sounds promising, but requires a subscription to the StoryChief web app.
Allows administrators to inject CSS and JS into the page output based on configurable rules. Useful if site admins want a way to add a front end library to one or more specific pages, without having to deploy code changes to the theme.
Machine Learning is something I've been interested in for a while, especially since seeing a presentation about it at DrupalCon Baltimore. This module, and its capability-specific companion modules give us a hint at the sophisticated ways advanced computing can help reduce the load on content authors in increasingly sophisticated content delivery workflows.
This module is designed to help Drupal sites share content entities: nodes, taxonomy terms, media entities, and more. Sounds like a budget version of Acquia Content Hub, would be interesting to try.
By default Drupal provides "created on" and "last updated" dates for any content, but this module provides a third date, for when a piece of content was published. Often this is the date that should be displayed on news, press releases, etc.
Sometimes your site needs a more complex workflow than the linear state-to-state options possible using the Content Moderation built into Drupal core. This module allows for conditional logic and a variety of different actions that can be triggered, including the ability to add custom ones to meet your needs.
Sometimes the revision log message can be very useful in the Drupal edit interface, but sometimes you want to keep things as simple as possible. This module provides a variety of potential approaches for either hiding the field completely, or making it available selectively. A nice way to make Drupal's edit interface more intuitive.
If your editors regularly run into issues where multiple users are trying to edit the same piece of content, this module allows for a content item to be "checked out", preventing other users from working on it at the same time. There's also a discrete permission to break the lock on content, in case a high priority update needs to get published.
If I had found this module sooner, it would have saved me significant effort on a number of site builds. I've written custom modules specifically to create custom blocks that could be managed as config, which is exactly the problem that module solves.
Traditionally headless sites have to use a specialized search service like Algolia. This module allows a headless application to query your Solr index through Drupal using JSON:API.
I also looked at SolREST, but I'm not sure I like the idea of bypassing Search API, or the fact that it only has a dev release as of this writing.
Designed to prevent the creation of duplicate content, Allow Only One allows a site builder to specify criteria, using one or multiple fields, that will be used to validate that a piece of content is unique.
Sometimes, as part of the publishing workflow, you want to get feedback from people who don't need to access the backend of your website often enough that it makes sense for them to have their own user account. For these kinds of scenarios, where you need "one off" access to unpublished content, the Access Unpublished module is a terrific solution.