Extend and customize Drupal functionality with contributed modules. If a module doesn't quite do what you want it to do, if you find a bug or have a suggestion, then join forces and help the module maintainer. Or, share your own by starting a new module.
SkaFlash
SkaFlash is a service that allows you to easily collect your fans' e-mail addresses via text message. It also provides a webhook/push notification API that can pass along fan contact information as it is received.
Overview
This module allows you to configure a URL on your Drupal site that you can tell SkaFlash to use as an endpoint for its API. When data is received from SkaFlash at this URL, it triggers a Rules action which you can use to invoke your own set of Rules events.
For instance, any time someone texts in their e-mail address, you could send them a custom "thank you" e-mail, create a new Drupal user, or subscribe them to a newsletter or campaign (or all of the above)!
Recommended companion modules
- Rules (for basic integration)
- Simplenews (for simple newsletter capabilities)
- Mime Mail (for HTML e-mails)
See this page for a list of modules that also integrate with Rules for more custom actions.
Drush Download & Push
This simple drush script will automatically detect when you "drush dl" a project into a folder that is in a git repository, then asks if you want to commit and push it.
Usage
To use, simply answer "yes" when you download a module, or enter -y as an option
$ drush @mysite dl captcha
Project captcha (7.x-1.0-beta2) downloaded to /path/to/mysite.com/sites/all/modules/contrib/captcha.
Git repository found in /path/to/mysite.com/
# On branch master
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# sites/all/modules/contrib/captcha/
nothing added to commit but untracked files present (use "git add" to track)
Add to git repo and push? (y/n): y
Pushed!
To git@github.com:devudo/devudo.com.git
a57e5c4..ca96f1c master -> master
Project captcha contains 2 modules: image_captcha, captcha.Installation
This being a drush module, you need drush. If you don't have drush, go get it
NOW at http://drupal.org/project/drush.
Once you have drush, install this like so:
$ drush dl drush_dl_push
That's it! Have fun!
Responsive Nav
Project to quickly implement a responsive navigation based upon a system or custom menu block.
CDN Views
This module is a lightweight add-on to the CDN module which will rewrite the URLs of any images generated within a View.
Installation:
Assuming you have the CDN module installed and configured properly, simple install the CDN Views module as any other module and you should see your Views output rewriten URLs. There is not an admin UI to this module or any sort of configuration.
flux facebook Integration
Integrates with the facebook API based upon the flux Services integration.
This is an integration module, so it does not expose any end-user functionality. It integrates Drupal with the facebook API by providing remote entities and integration with the Rules module.
Requirements
- flux Services integration (obviously)
Status: Work in Progress
flux twitter API
Integrates with the twitter API based upon the flux Services integration.
This is an integration module, so it does not expose any end-user functionality. It integrates Drupal with the twitter API by providing remote entities and integration with the Rules module.
Similar projects
The twitter module integrates with twitter by pulling twitter data into the database during cron runs. The flux twitter API takes a different approach as it directly communicates with the twitter API (beside caching) and builds upon the flux Services integration framework.
Requirements
- flux Services integration (obviously)
API
- The module connects to twitter via the Guzzle web service client and provides a clean API for developers to interact with twitter. [TODO: Add examples]
Status: Work in Progress
flux Services Integration
Service integration API for the fluxkraft module suite.
This modules provides a framework for integrating Drupal with remote services like twitter, facebook or whatever. It exposes an admin UI for managing service connection settings and service accounts, but exposes no functionality for end-users.
Requirements
Integrated services
Status: Work in Progress
Link Scraper
This is a simple module that will populate a node from the metadata of another web page, similar to the way that Facebook populates data for links shared on Facebook.
Create a content type with a link field, a body or description field, and an image field.
Configure the scraper at admin/structure/link_scraper and indicate the content type to populate, the link field that will be used as the source of the page content, and the body and image fields that should receive the contents of the source page.
Create a new node. Paste a link into the title field and the 'url' part of the link field. Leave all the other fields blank. When saved, the title, description and image will be retrieved from Facebook Open Graph information on the source page and used to populate the node. If there is no Open Graph information, the title and description will be populated from the title and description meta tags of the source page.
Ubercart eTranzact WebconnectPlus 7
Etranzact is a Nigerian online payment processing/ switching company. The module provides an integration of the WebconnectPlus platform to Ubercart project enabling an alternate payment method for site users. This project is tested on ubercart 3.4 in a live store. I worked on this project as a way of providing a solution to my country's quest to participate in the eCommerce revolution. After several desperate search for an existing module for a web project without success, i decided to develop something.
Extensions
Extensions is an alternative method of pluggable object creation (ala Chaos Tools plugins).
The key features of Extensions are:
- Extensions are always namespaced objects
- Extensions always extend the base Extension class
- Unlike Chaos Tools, extensions can be declared dynamically, and at run-time
- It is not necessary to load the Extension file to get information about it
- Extensions use factory classes for creation
- Extensions are organised into Collections, which are nominally a set of plugins with similar behaviour, but dont have to be
Basic usage
Extensions are a type of reusable class, so there are two ways you might commonly want to use them. Firstly, in accessing an Extension Collection to use the objects in it, and secondly to declare new extensions (it's not necessary to ever declare a collection, these are created dynamically).
Accessing a collection
<?php
// Get a full collection containing fully loaded extensions, as an array.
// This will return only extensions already declared.
$extensions = extensions_get_extensions($collection_name);
// Get only the settings for the collection, without creating objects, as an array.
// Again, this will only return extensions already declared.
Ajax pages
This module goes to great lengths to implement generic-purpose loading of the site's pages via Ajax, with the possibility to create region(s) that will be exempt from such loading. A concrete example of using this functionality is putting a persistent audio player on your website that would continue playing as the user browses the pages.
Demo
Features
- Works inobtrusively out of the box
- Requires only minimal theme modifications
- Browser address bar updating using HTML5's
history.pushState() - Full page reloading (
page_top,pageandpage_bottomregions) - Transparently ajaxifies forms, including GET ones
- Handles redirects
- Loads additional CSS and JS files as required
- JS/CSS preprocessors and aggregation friendly
- Ajax requests are GET and fully cacheable (also with Boost!)
Known issues
Enabling Boost caching
Boost currently doesn't support the application/json content type that Ajax pages uses for its responses. This is addressed by #1219484: Types application/xml and application/json not supported (support for services module).
Re-initializing third-party scripts
Simple Client
Simple Client is a developer tool for making simple HTTP GET and POST requests using Guzzle.
This is a simple HTTP client module, used primarily for fetching content from the internet.
If you are looking for additional normalisation, validation, URL parsing and construction functionality, you may like to use Link API in conjunction with this module.
Dependencies
Simple Client requires Guzzle to be present and autoloadable, which needs to be done via Composer. Two workable options for this are setting it up via Composer Vendor, or Composer Manager.
Why wrap Guzzle
Guzzle is a perfectly adept HTTP client, so why wrap it in another module? This is reasonably straightforward. Over several projects, I found that I needed to repeat the same wrapping code around Guzzle. Some of it is just request construction, but there is also error handling and other parts. The result is a "simple" client. Its not as powerful as a full Guzzle client implementaiotn, but its not as complicated to use either.
Usage
Node Tab
Provides a url-based tab solution.
Getting started
Go to admin/structure/types, and click the "tabs" link for your content type.
You will then be able to add the desired tabs.
Each tab has a weight, and the listing is sorted by weight.
The tab with the smallest weight is taken as the default.
Tabs are exportable, and have a machine name (used in the url) and a translatable
label (shown in the tab itself).
You need to have the i18n_string module (part of the Internationalization module)
to be able to translate the labels.
The module is meant to be used with Panels.
Ideally, there would be a Panels page added to node/%node/%node_tab
with two contexts, Node: ID and Node Tab: Name attached to the arguments.
Each variant would then have appropriate selection rules, for instance,
Node: type - "page" and Node Tab: Tab Name - "overview" (or some other tab machine name).
A panels content_type provides a listing of blocks.
Note that if a node type has tabs, and a node of that type has an alias,
an additional alias will be created per tab.
So if you have tabs "Overview", "Documentation" and "Pricing", and a node
with the alias "my-product", the module will create:
my-product/overview, my-product/documentation and my-product/pricing.
This won't be done retroactively for existing nodes, you will need
Scheduler (Paddle fork)
Temporary fork until all necessary patches get into the main Scheduler project.
Contains the following patches:
- #1069668: Default time with user override
- #1334780: Declare a form pane (panels content type) for ctools, page manager etc
- #1979460: Allow other modules to prevent scheduled nodes from being published / unpublished
- #1319410: Remove system warning when entering invalid date/time
- #1819074: Allow publish_on dates in the past
Yandex Auth
This module will be useful if you're using Yandex Mail for domains and your Drupal user accounts have corresponding mailboxes on Yandex, with same password.
When user logs in Drupal, he is also transparently authenticated in his Yandex mailbox (using iframe) and he gets "View mail" block in Drupal website.
Views Merge Rows
Sometimes when you use relationships in views you get a number of rows with the same content in some of the fields. This results in a huge table (grid, list, etc.) that affects the usability of your view.
The Views Merge Rows module provides a way to combine rows with the same content in the specified fields.
Installation and Configuration
After installing the module you get the “Merge rows” item in the OTHER section of the Views UI:
To configure the row merging click the link next to the “Merge rows” item. The configuration dialog appears:
In this dialog you can enable/disable row merging with the “Merge rows with the same content in the specified fields” checkbox.
After you enable the merging you will see the table with all the available fields. You can specify the “Merge option” for each field.
The fields with “Merge option” set to “Use values of this field as a filter” are used to check which rows should be merged. If several rows contain exactly the same values in all of these fields, they are merged together. The values for other fields are calculated as follows:
Domain File
Provides integration between Domain Access and File Entity, allowing files to be assigned to domains. This is only useful for sites requiring uploaded media (eg via Media module) to be assigned to domains.
Requirements
- Domain Access
- File Entity 2.x (must be at least 7.x-2.0-unstable7 or later, where the File Entity Access API was added)
Contact Reply-To
If you enable this module, the "From" address on contact emails, both site emails via the contact form and user-to-user emails via the member contact form, will be "From" the email address configured in site_mail (admin/config/system/site-information in d7). The reply-to header will be set to the address that Drupal would have used as the From address.
This avoids many spam-classification issues. Many, many mail handlers will classify as spam a mail that comes from an unauthorized location, as this is spoofing. What Drupal does by default is spoofing...
Dreamhost actually *prevents* the sending of Drupal emails in many cases. This module should resolve that problem, but it's a problem elsewhere almost everywhere the Drupal contact form is used.
If you don't mind using a 3rd party service and have a nontrivial site, you'll probably enjoy the mandrill module and service. If you're on Dreamhost shared hosting, though, it probably means you have a trivial site to maintain and Mandrill would be overkill and additional complexity.
Show Database Name
Overview
Display the host and database name of the default database on the status report, toolbar (Drupal 7) and/or on the admin_menu bar if enabled (either Drupal 6 or 7) and/or in a block (to use with the admin module).

