Drupal development
needs refactoring to work with theming
See Building Distros Theming / Aegir
General
- Drupal dev docs - "Newcomers to Drupal development should read the conceptual information provided in the 'Components of Drupal' section, and then proceed to examine one of the heavily-documented example modules below. The examples are fully-functioning Drupal modules, so you can download them from the contributions repository and alter them as you experiment."
- Preying on the drupal_alter() - API overview video. somewhat quiet sound. [1]
Multisite
Drupal.org
see project page right sidebar links for git, patches pending, etc.
CLI
Composer
- https://github.com/zaporylie/composer-drupal-optimizations - This composer-plugin contains a set of improvements that makes running heavy duty composer commands (i.e. composer update or composer require) much faster.
composer update 'drupal/*' --with-dependencies
php -d memory_limit=-1 composer require zaporylie/composer-drupal-optimizations
Drush
- Drush - a command line shell and Unix scripting interface for Drupal. Drush core ships with lots of useful commands for interacting with code like modules/themes/profiles. Similarly, it runs update.php, executes sql queries and DB migrations, and misc utilities like run cron or clear cache. Drush can be extended by 3rd party commandfiles.
composer require drush/drush
Commands
I have dr
as an alias for drush
.
drush updatedb --no-interaction --yes drush watchdog:show drush help alll the commands! drush help --filter choose which help category to echo
drush cc all clear cache
drush pml list installed and enabled modules drush dl [project] download project drush dl sasson-7.x-3.x-dev download sasson dev release drush updb run upgrade.php
drush en [project] -y enable project without confirmation drush dis [project] -y disable project drush pm-uninstall [project] remove project from db
drush sql-cli < example.sql
drush php-eval 'echo drush_get_context("DRUSH_DRUPAL_ROOT");' drush php-eval 'echo drush_locate_root() . "/" . drupal_get_path('theme', 'sasson');' drush eval 'echo theme_get_setting('sasson_compiler') . "\n" ;' otherwise gives trailing issue?
drush vset --yes site_offline_message "This site is being maintained"; drush vset --yes site_offline 1;
In Drupal 7 to simply put the site into maintenance mode:
drush vset --yes maintenance_mode 1;
drush user-login ryan displays a one-time login link for the user ryan. open `drush user-login ryan` open said link in browser dr uli
Site aliases
Drush uses site alias files to store context data. (Aegir still uses Drush 4)
drush help site-alias
Copy to ~/.drush, rename aliases.drushrc.php or further.
drush ev 'print_r(array_keys(drush_sitealias_get_record("@server_master")))' drush ev '$a = drush_sitealias_get_record("@gk.dev"); print_r($a["path-aliases"]);'
- http://api.drush.ws/api/drush/commands!sql!sync.sql.inc/function/drush_sql_sync/4.x
- http://api.drush.ws/api/drush/includes%21sitealias.inc/function/drush_sitealias_get_record/4.x
Deployment
To sort with Aegir#Remote
- drupal.org: Using drush to synchronize and deploy sites
drush help rsync drush help sql-sync
- http://www.prometsource.com/blog/using-sql-sync-rsync-drush
- vimeo: Synchronising drupal sites from local to remote using drush site aliases
- youtube: Drush Tip: Use sql-sync to Quickly Move a Database
- http://drupalcode.org/project/drush.git/blob/HEAD:/examples/sync_enable.drush.inc
- http://drupalcode.org/project/drush.git/blob/HEAD:/examples/sync_via_http.drush.inc
Drupal Console
Site build
See Profiles
Two make files; mysite.build and mysite.make.
mysite.build is brief:
core = 7.x api = 2 projects[drupal][type] = "core" ; Our distribution projects[mysite][type] = "profile" projects[mysite][download][type] = "git" projects[mysite][download][url] = "git@gitserver.com:mysite.git" projects[mysite][download][branch] = "develop"
mysite.make contains the list of modules, themes, and libraries to download and add to the site.
Debugging
Troubleshooting
$config['system.logging']['error_level'] = 'verbose'; # in sites/default/settings/php
Modules
dpm()
- http://drupal.org/project/inspect - Log instructive and well formatted variable dumps and deep stack traces.
Admin
https://www.drupal.org/project/admin_toolbar - better menu system all-round
- https://drupal.org/project/views_system - create customized views of modules, themes, and theme engines that are or have been installed in Drupal's file system
Content
Module Admin
- http://drupal.org/project/update_notifications_disable - overrides update status even if not enabled. needs a cache clear to start working.
- https://github.com/populist/drupal-auto-update - A little bit of magic for automatically updating Drupal sites
- https://github.com/makinacorpus/drupal_audit - This shell script allows a quick "audit" of a website, giving some details about the configuration: drush status, hacked status (using Hacked module), modules & themes status, cache status (using Cacheaudit module), database volumetry indications, phpinfo() ...
Coding
Basics
- Drupal's basic building blocks - the search for core, Ronald Ashri, Nov 2009
- Drupal programming from an object-oriented perspective
- Drupal as an Application Development Framework - great dev overview video, shame about the audio
$variable_name
- g.d.o: PHP
- Beginning Drupal Module Development or How I Wrote the Cacheflusher Module (Part 2) - has a good hook overview from a module perspective
Modules
- http://drupal.org/project/examples - various examples
- http://drupal.org/project/model - entity models
- http://drupal.org/project/module_builder - joachim's
- http://drupal.org/project/coder - use when writing modules
- http://drupal.org/project/drupalcs - code sniffer
- http://drupal.org/project/simpletest - testing API modeled after the SimpleTest PHP library
Patches
patch -p1 < path/file.patch
or
git apply path/file.patch
Hooks
"Drupal's module system is based on the concept of "hooks". A hook is a PHP function that is named foo_bar(), where "foo" is the name of the module (whose filename is thus foo.module) and "bar" is the name of the hook. Each hook has a defined set of parameters and a specified result type.
"To extend Drupal, a module need simply implement a hook. When Drupal wishes to allow intervention from modules, it determines which modules implement a hook and calls that hook in all enabled modules that implement it."
Menu system (path)
- How the menu system works (a Drupal how-to) - how the menu system translates paths to callback functions
Content
Entities
An entity can be a kind of content stack. An entity base table is tied to fields using bundles. Entity types include node, comment, taxonomy term, user profile, organic group, etc. Entity types can allow bundling or not (creating types of node vs. users, though see the Profile 2 module). Fields are used to store and display various data types, and can be reused across bundles and entities.
(that was about right the last time I dived in)
- http://www.slideshare.net/ronald_istos/drupal-entities-emerging-patterns-of-usage
- http://www.slideshare.net/erikwebb/drupal-7-and-entities-7036807
hook_entity_info - "Inform the base system and the Field API about one or more entity types."
- http://www.trellon.com/content/blog/creating-own-entities-entity-api
- http://www.slideshare.net/ronald_istos/how-to-make-entities-and-influence-drupal-emerging-patterns-from-drupal-contrib
- http://bxl2011.drupaldays.org/node/313 - fago
Ctools
Chaos tool suite (ctools) suite is primarily a set of APIs and tools to improve the developer experience. It also contains a module called the Page Manager whose job is to manage pages. In particular it manages panel pages, but as it grows it will be able to manage far more than just Panels.
For the moment, it includes the following tools:
- Plugins -- tools to make it easy for modules to let other modules implement plugins from .inc files.
- Exportables -- tools to make it easier for modules to have objects that live in database or live in code, such as 'default views'.
- AJAX responder -- tools to make it easier for the server to handle AJAX requests and tell the client what to do with them.
- Form tools -- tools to make it easier for forms to deal with AJAX.
- Object caching -- tool to make it easier to edit an object across multiple page requests and cache the editing work.
- Contexts -- the notion of wrapping objects in a unified wrapper and providing an API to create and accept these contexts as input.
- Modal dialog -- tool to make it simple to put a form in a modal dialog.
- Dependent -- a simple form widget to make form items appear and disappear based upon the selections in another item.
- Content -- pluggable content types used as panes in Panels and other modules like Dashboard.
- Form wizard -- an API to make multi-step forms much easier.
- CSS tools -- tools to cache and sanitize CSS easily to make user-input CSS safe.
- Ctools Plugin Stub is a Drush plugin that can help you generate code stub files for ctools plugins. I wrote this plugin after having consistently messed up names of hook implementations in plugins over a long period. Plugin Stub does not write actual code that *does* stuff for you, but it sets you up so that all you have to do to get started is to fill in the capitalized parts of the generated file and start writing code that *does* stuff.
Menus
JavaScript
- JavaScript hygiene in Drupal 7 - Sep 12, 2011
Video
- Drupal 7 JavaScript for Developers - good video
Adding a JS file
In theme .info;
scripts[] = scriptfile.js
In template.php;
drupal_add_js() first paramater path second paramater (goes through as 'type: ' array item, defaults to file) file, setting, inline, external default: preprocess: true, everypage: true, weight:
$element['#attached']['js']
Drupal JS API and Behaviours
Drupal has an API for passing information between PHP and JS. Drupal.js sets up Drupal namespace.
Render Array
PHP sent by JSON to change content.
jQuery
The .ready() function also has the ability to alias the jQuery object:
jQuery(document).ready(function($) { // Code that uses jQuery's $ can follow here. });
AJAX
JSON
- http://eoinbailey.com/blog/jquery-selectors-plugins-drupal
- http://drupalib.interoperating.info/node/250
wip; still merging in from Modules and rearranging
General
- https://www.drupal.org/project/libraries - The common denominator for all Drupal modules/profiles/themes that integrate with external libraries.This module introduces a common repository for libraries in sites/all/libraries resp. sites/<domain>/libraries for contributed modules.
- http://drupal.org/project/features - The features module enables the capture and management of features in Drupal. A feature is a collection of Drupal entities which taken together satisfy a certain use-case. Features provides a UI and API for taking different site building components from modules with exportables and bundling them together in a single feature module. A feature module is like any other Drupal module except that it contains additional information in its info file so that configuration can be checked, updated, or reverted programmatically.
Admin
- https://www.drupal.org/project/module_filter - quickly find the module you are looking for without having to rely on the browsers search feature which more times than not shows you the module name in the 'Required by' or 'Depends on' sections of the various modules or even some other location on the page like a menu item.
- https://www.drupal.org/project/coffee - The Coffee module helps you to navigate through the Drupal admin faster, inspired by Mac apps Alfred and Spotlight. alt+d
- https://www.drupal.org/project/masquerade - allows site administrators (or anyone with enough permissions) to switch users and surf the site as that user (no password required). That person can switch back to their own user account at any time.
- https://www.drupal.org/project/total_control - Several overview panes are included for site stats and quick reference. Several administration panes are provided with quick links to content types, menus, taxonomy, and other scattered locations of important Drupal site administration. Several views panes are also provided as well as full-page comprehensive versions of the views with bulk operations. Each views panel pane is customizable via it's pane settings, or override the default views provided to suit your own needs.
- https://www.drupal.org/project/disable_messages - Gives a site owner options to disable specific messages shown to end users.
Workflow
Editing of submitted unpublished nodes, updating coordinator contact info, etc.
- http://drupal.org/project/workbench - provides easier content management for content administrators
- http://drupal.org/project/workbench_access - creates editorial access controls based on hierarchies
- http://drupal.org/project/workbench_moderation - adds arbitrary moderation states to Drupal core's "unpublished" and "published" node states, and affects the behavior of node revisions when nodes are published
- https://www.drupal.org/project/maestro - This is not a just a clever saying. It's true. With Maestro, the method to automate your process starts with our visual workflow editor with which you drag, drop and connect your workflow steps together. The maestro workflow editor can be used by business users to map out their business process.
- https://www.drupal.org/project/override_node_options - The Override Node Options module allows permissions to be set to each field within the Authoring information and Publishing options field sets on the node form. It also allows selected field sets to be set as collapsed and / or collapsible.
- http://drupal.org/project/rules - The Rules module allows site administrators to define conditionally executed actions based on occurring events (known as reactive or ECA rules).
- https://www.drupal.org/project/role_delegation - This module allows site administrators to grant specific roles the authority to assign selected roles to users, without them needing the administer permissions permission.
Antispam
Layout
Spaces
Blocks
- http://drupal.org/node/1274766 - Semantic Blocks sandbox
- http://drupal.org/project/nodeblock - make a content type available as a block
- http://drupal.org/project/nodesinblock - add content to block
- http://drupal.org/project/menu_block
- http://drupal.org/project/block_sections
- http://drupal.org/project/block_refresh
- http://drupal.org/project/collapsiblock
- http://drupal.org/project/bean - Block Entities Aren't Nodes. fieldable blocks.
- http://drupal.org/project/distributed_blocks - Simple client/server module to share rendered blocks across different Drupal sites. Must be enabled on both sides.
- http://drupal.org/project/bud - context link arrangement
Views
Views is used to display bits of content in various fashions.
- How to display content nodes using Views 3: *to source again*
- How to pass an argument into Views for Drupal 7? [2] - How to set a contextual filter to get the argument from the page url (i.e. NID from node panel context).
- Accessing external data sources (APIs on other sites) & Semantic Views: Drupalcon Copenhagen: Views 3
- http://drupal.stackexchange.com/questions/71648/expose-date-filter-in-views - off-topic answer on grouping fields
API
- http://treehouseagency.com/blog/neil-hastings/2010/01/19/views-handler-easy-way
- http://www.darrenmothersele.com/drupal-blog/drupal-views2-handlers
- How to write a field_handler
- how to: disambiguate additional fields in views field handler
- tutorial_handler_field_link.inc - an example handler
Modules
- http://drupal.org/project/semanticviews - clean up views output
- http://drupal.org/project/views_datasource
- http://drupal.org/project/views_bulk_operations - perform bulk operations on content via views
- http://drupal.org/project/views_grouped_table
- http://drupal.org/project/views_slideshow
- http://drupal.org/project/views_slideshow_slider
- http://drupal.org/project/views_slideshow_ddblock - d7 dev
- http://drupal.org/project/views_slideshow_galleria
- http://drupal.org/project/views_slideshow_xtra
- http://drupal.org/sandbox/jamesbenison/1076640 - Views jQFX Cloud Carousel
- http://drupal.org/sandbox/jamesbenison/1269854 - Views jQFX Cycle
- http://drupal.org/project/views_jqfx
- http://drupal.org/project/jcarousel
- http://drupal.org/project/views_nivo_slider
- http://drupal.org/project/views_accordion
- http://drupal.org/project/views_showcase
- http://drupal.org/project/views_galleriffic
- http://drupal.org/project/views_roundabout - using JQuery Roundabout plugin - carousel for whole view, not fields
- https://drupal.org/project/views_between_dates_filter
- https://drupal.org/project/date_range_formatter
- https://drupal.org/project/composite_views_filter
- https://drupal.org/project/contextual_range_filter
- http://drupal.org/project/efq_views - EntityFieldQuery Views Backend
- https://drupal.org/project/views_responsive_grid
- http://drupal.org/project/viewfield
- https://drupal.org/project/views_megarow
- http://drupal.org/project/menu_views - mf views in a menu
- http://drupal.org/project/views_field_view - i heard you liked views
- http://drupal.org/project/views_supertable [3] - big table with js search
- http://drupal.org/project/datatables
- https://drupal.org/project/slickgrid - inline editing
- http://drupal.org/project/draggableviews - makes rows of a view "draggable" which means that they can be rearranged by Drag'n'Drop.
- http://drupal.org/project/views_php - add fields, filters and sorts to views which use PHP code.
Menus
Aggregation
Context
- http://drupal.org/project/delta - context linked to theme settings
Display Suite
- Display Suite allows you to take full control over how your content is displayed using a drag and drop interface. Arrange your nodes, views, comments, user data etc. the way you want without having to work your way through dozens of template files. A predefined list of layouts (D7 only) is available for even more drag and drop fun! By defining custom view modes (build modes in D6), you can define how one piece of content should be displayed in different places such as teaser lists, search results, the full node, views etc.
Docs
Articles
Videos
- An overview of changes in Display Suite 7.x-2.x
- Views displays for Drupal 7
- Managing any form with Renderable elements, Field group and Display suite
Panels
- http://drupal.org/project/panels_frame
- http://drupal.org/project/fieldable_panels_panes
- http://drupal.org/project/panels_createnode
- http://drupal.org/project/panel_schedule
- http://drupal.org/project/panels_extra_styles
- http://drupal.org/project/panels_style_collapsible
- http://drupal.org/project/panels_beautified
- http://drupal.org/project/panels_ajax_tab
- http://drupal.org/project/panel_variant_page_title
- http://drupal.org/project/panels_custom_title_tag
- http://drupal.org/project/panels_breadcrumbs
- http://drupal.org/project/context_panels_layouts
- http://drupal.org/project/bean_panels
- http://drupal.org/project/metatag_panels
Nodequeue
Manual list of content items, can be used in Views.
- http://drupal.org/sandbox/amateescu/1429904 - entityqueue
Path
- http://drupal.org/project/pathauto
- http://drupal.org/project/subpathauto - pathauto for node/%1/edit, etc.
- http://drupal.org/project/path_alias_xt - similar to above
- http://drupal.org/project/globalredirect
- http://drupal.org/project/path_checker - check for dead aliases
- http://drupal.org/project/pathologic
- http://drupal.org/project/redirect
- http://drupal.org/project/empty_page - for when you just want an empty page (to use blocks with) and no theme hack
Title
- http://drupal.org/project/auto_nodetitle
- http://drupal.org/project/exclude_node_title
- http://drupal.org/project/title
Menus
- http://drupal.org/project/menu_attributes - specify attributes for menu items such as id, name, class, style, and rel
- http://drupal.org/project/menu_css_names - auto class menu li tags
- http://drupal.org/project/special_menu_items - provides placeholder and separator menu items
- http://drupal.org/project/void_menu - provides js void placeholder
- http://drupal.org/project/superfish - jquery superfish menus
- http://drupal.org/project/nice_menus - uses superfish also, less settings
- http://drupal.org/project/ntm
- https://drupal.org/project/floating_block - keep html blocks, selected using jquery selectors in a fixed position on the page as you scroll. It works in a similar way the table header fixer in Drupal Core.
- http://drupal.org/project/jquerymenu - menu with unfoldable tree
- http://drupal.org/project/dynamic_persistent_menu - shows second level menu onmouseover of first level item
- http://drupal.org/project/activemenu - loads child items using ajax, good for big menus
- http://drupal.org/project/menu_item_container - have items that aren't llinks. d7 in repo.
- http://drupal.org/project/jump_menu - create hierarchical select jump menus
- http://drupal.org/project/menu_tag - create menu subsets
- http://drupal.org/project/menu_icons - adds menu item background image
- http://drupal.org/project/menu_subtitle
- http://drupal.org/project/menu_force - removes the 'Add menu item' checkbox and makes the title field mandatory
- http://drupal.org/project/content_menu - rewires Drupals default menu management interface for tighter intergation of content authoring and menu management.
- Custom Active Menu Item - provides an easy way to indicate which menu item is active adding the active CSS class depending the path that the users are seeing.
Breadcrumbs
or check your theme page.tpl.php
- http://drupal.org/project/custom_breadcrumbs
- http://drupal.org/project/breadcrumbs_by_path
- http://drupal.org/project/path_breadcrumbs
- http://drupal.org/project/breadcrumb - d8 rm breadcrumb from core
Links
Content
to sort;
- http://drupal.org/project/front
- http://drupal.org/project/faq
- http://drupal.org/project/print
- http://drupal.org/project/scheduler
- http://drupal.org/project/linkchecker
- http://drupal.org/project/wikitools
- http://drupal.org/project/diff
- http://drupal.org/project/refresh
- http://drupal.org/project/addressfield
- http://drupal.org/project/mediawiki_api
- http://drupal.org/project/prettify - code snippet formatting
- http://drupal.org/project/geshifilter - similar to above
- http://drupal.org/project/forward - 'forward page by e-mail'
- http://drupal.org/project/mobile_codes - qrcodes
Entities
- http://drupal.org/project/entity - used for improvements to Drupal 8's Entity API which will be moved to Drupal core one day (development ongoing)
- http://drupal.org/project/eva - Entity Views Attachment
Fields
- http://drupal.org/project/semantic_fields - clean up field output
- http://drupal.org/project/fences
- http://drupal.org/project/email
- http://drupal.org/project/phone
- https://drupal.org/project/telephone - d8 backport
- http://drupal.org/project/conditional_fields - field dependencies based on states and values
- http://drupal.org/project/double_field - double item fields
- http://drupal.org/project/fixed_field - same field in multiple nodes/entities
- http://drupal.org/project/custom_add_another
- http://drupal.org/project/multiple_selects
- http://drupal.org/project/auto_nodetitle - auto title, token, time, etc.
- http://drupal.org/project/field_validation
- http://drupal.org/project/in-field-labels
- http://drupal.org/project/views_field
- http://drupal.org/project/field_group - group fields
- http://drupal.org/project/nodeformcols - format node fields
- http://drupal.org/project/arrange_fields - JS form arrangement
- http://drupal.org/project/textformatter - format multi-item/line field output
- http://drupal.org/project/formatter_field - entity level format alter
- http://drupal.org/project/field_order
- http://drupal.org/project/fieldable_panels_panes
- https://drupal.org/project/extended_file_field
- http://drupal.org/project/plup - multiple image upload [4]
- https://drupal.org/project/file_formatters
- http://drupal.org/project/field_slideshow - using JQuery Cycle plugin
Bundles
- http://drupal.org/project/bundle_inherit
- http://drupal.org/project/bundle_copy
- http://drupal.org/project/bundleswitcher
Nodes
all needs moving to contrib and more.
Forms
- http://drupal.org/project/webform
- http://drupal.org/project/compact_forms
- http://drupal.org/project/qforms
- http://drupal.org/project/contact_field - extra contact form fields
- http://drupal.org/project/contact_form_blocks
- http://drupal.org/project/formblock - user registration, site wide contact, or node creation
- http://drupal.org/project/uniform - form styling lib
- http://drupal.org/project/formtips - form tooltips
- http://drupal.org/project/itoggle - js boolean option toggle
- http://drupal.org/project/fancycheckboxes - as above
- http://drupal.org/project/ds - display suite. easy rearrange forms, etc.
- http://drupal.org/project/formdefaults - alter form things
Aggregation
- http://drupal.org/project/feeds - import or aggregate data as nodes, users, taxonomy terms or simple database records.
- http://drupal.org/project/feed_import
- http://drupal.org/project/feeds_imagegrabber
- http://drupal.org/project/media_feeds
- http://drupal.org/project/feeds_selfnode_processor - populate to feed node fields
- http://drupal.org/project/feeds_xpathparser
- http://drupal.org/project/feeds_querypath_parser
- http://drupal.org/project/feeds_jsonpath_parser
- http://drupal.org/project/feeds_xsltparser
- http://drupal.org/project/feeds_oai_pmh - dublin core
- http://drupal.org/project/feeds_regex_parser
- http://drupal.org/project/feeds_oauth
- http://drupal.org/project/feeds_crawler
- http://drupal.org/project/feeds_sql
- http://drupal.org/project/feeds_tamper - modify data before it gets saved
GUI
- http://drupal.org/project/vertical_tabs
- http://drupal.org/project/homebox - no d7 og support yet
- http://drupal.org/project/logintoboggan
- http://drupal.org/project/fancy_login
- http://drupal.org/project/clientside_validation
- http://drupal.org/project/jeditable - inline content editing
- http://drupal.org/project/inline_messages
Typography
- http://drupal.org/project/fit_text - responsive text resize [5]
- http://drupal.org/project/textualizer - js text animation
- https://www.drupal.org/project/fontyourface - provides an administrative interface for browsing and applying web fonts (using CSS @font-face, supported in all popular browsers) from a variety of sources.
- https://www.drupal.org/project/google_webfonts_helper - allow you to add fonts from the Google Fonts service using the administrative interface, and the module will download files and generate the corresponding library
Comments
- http://drupal.org/project/morecomments - ajax comment pager replacement
- http://drupal.org/project/ajax_comments - ajax comment submission
Javascript
- http://drupal.org/project/javascript_libraries
- http://drupal.org/project/jquery_update - foor to 1.5 or 1.7. no 1.8+.
- http://drupal.org/project/jquery_plugin - manage plugins
- http://drupal.org/project/js_injector
- http://drupal.org/project/cdnjs
- http://drupal.org/project/absolute_messages - stackoverflow style notification header bar
- http://drupal.org/project/jquery_msg_alert - facebook style notification popups
- http://drupal.org/project/poshy_tip - jquery poshy tooltips
- http://drupal.org/project/tipsy - jquery tipsy tooltips
- http://drupal.org/project/purr_messages
- http://drupal.org/project/nicemessages
- http://drupal.org/project/jstimer - countdown/up+clock
- http://drupal.org/project/overlay_paths - use Drupal overlay for nodes
Adverts
- http://drupal.org/project/simpleads
- http://drupal.org/project/ad - d7 branch not functional yet
- http://drupal.org/project/openx - Show ads from a OpenX (formerly OpenAds) server. OpenX is a open source online program that will allow you to catalog and display advertisers, just like Google, Yahoo or Microsoft.
- http://drupal.org/project/adsense - provides web content providers with the means to earn revenue from visitors by displaying ads from Google AdSense
Internationalisation
Media
- http://drupal.org/project/media - provides an extensible framework for managing files and multimedia assets, regardless of whether they are hosted on your own site or a 3rd party site - it is commonly referred to as a 'file browser to the internet'. Media is a drop-in replacement for the Drupal core upload field with a unified User Interface where editors and administrators can upload, manage, and reuse files and multimedia assets. Any files uploaded before Media was enabled will automatically take advantage of for many of the features it comes with.
- Displaying Media - The File Entity and Media modules work together to provide a unified method for storing, managing, and displaying Media in Drupal. They allow a user to create file fields that can be configured to store and display many different types of media, including images, video, and audio, sometimes created by Media provider modules (e.g., Media: YouTube, Media: Soundcloud, or OEmbed). In order to display these different types of media, file fields use formatters, often added by the provider module, that need to be configured when setting up your site.
- https://drupal.org/project/media_soundcloud
- https://drupal.org/project/media_vimeo
- https://drupal.org/project/media_archive - archive.org
- https://drupal.org/project/media_imagezoom
- http://drupalcode.org/sandbox/noahadler/1470838.git
- https://drupal.org/sandbox/e-atlas/1977200
- https://github.com/UKhive/media_thumbnails
- https://drupal.org/project/media_fevm
- https://drupal.org/project/views_media_browser
- https://drupal.org/project/media_browser_plus
Embedded Media Field
- http://drupal.org/project/emfield - create fields for content types that can be used to display video, image, and audio files from various third party providers. When entering the content, the user will simply paste the URL or embed code from the third party, and the module will automatically determine which content provider is being used. When displaying the content, the proper embedding format will be used.
Imagecache / filters
Lightbox
Gallery
- http://drupal.org/project/galleryformatter - provides a CCK formatter for image fields, which will turn any image field into a jQuery Gallery - takes a couple of seconds for jquery to format images, ugly.
- http://drupal.org/project/node_gallery - create multimedia galleries where both the galleries and the gallery items are nodes. (as opposed to gallery items being file fields, like Media Gallery)
- Galerie provides (hopefuly) easy to use and clean galleries based on an API/submodules model. galerie itself provides a "galerie" node type and manages the display of galleries (classic thumbnails and large images view, and slideshow mode) while submodules retrieve content from different sources: local files, Flickr or Tumblr for now.
other
- http://drupal.org/project/insert - needs File widget type
- http://drupal.org/project/wysiwyg_mediaembed - integration of the CKEditor MediaEmbed plugin for the Wysiwyg module
- http://drupal.org/sandbox/DevinCarlson/1823634 - Media WYSIWYG View Mode - Enables files inside of the WYSIWYG editor to be displayed using a separate view mode.
- http://drupal.org/sandbox/yanniboi/1579876 - Media Block
- http://drupal.org/project/files_undo_remove - undo remove file before submit
- File Lock - gives the possibility to "lock" files. Locking files means adding an extra file_usage entry, because Drupal will delete files which aren't used anymore. But by now there is no possibility to keep "unused" files.
- http://drupal.org/project/plupload - API module for plupload lib
- http://drupal.org/project/plup - doesn't use plupload module. straight attaches image to end of node, no display config other than image field manage display settings. very basic media integration - broken preview and no way to hide otherwise attached images on per node basis.
- http://drupal.org/project/bulk_media_upload - completely separate upload page from node create/edit..
untested;
- http://drupal.org/project/filefield_sources_plupload - uses filefield_sources
- http://drupal.org/sandbox/fangel/1652676 - Media Multiselect - replacement media widget
- http://drupal.org/project/multiform - an API module which lets you put several forms into one <form>.
- https://drupal.org/project/rwdimages
- https://drupal.org/project/borealis
- https://drupal.org/project/resp_img
- https://drupal.org/project/picture
Adaptive/responsive
Retina
Flickr
- http://drupal.org/project/flickr - Access photos on Flickr's site via their API. The module provides a filter for inserting photos and photosets and allows the creation of blocks for rendering a user's recent photos and photosets. The filter format is: [flickr-photo:id=230452326,size=s] and [flickr-photoset:id=72157594262419167,size=m]
- doesn't use image styles
- http://drupal.org/project/flickrgallery - This module will show all your sets and pictures from your Flickr account. There's no need to create extra content types or feeds. Just fill in your settings and your gallery is done. views??
- requires https://code.google.com/p/phpflickr/ library
- http://drupal.org/project/media_flickr - The Media: Flickr project currently offers Flickr Photoset capabilities to the Embedded Media Field module, upon which this module is dependent. To use it, enable the Embedded Video Field module, and add a Third Party Video field to a content type.
- http://drupal.org/project/flickrrippr
- requires Oauth_common which is out of date
- http://drupal.org/project/bean_flickr - for use with the bean block replacement module
- small, just flickr sizes?
Scald
- https://drupal.org/node/1895554
- https://drupal.org/project/scald_gallery
- https://drupal.org/project/scald_file
- https://drupal.org/project/scald_pdf
- https://drupal.org/project/scald_flickr
- https://drupal.org/project/scald_twitter
- https://drupal.org/project/scald_soundcloud
- https://drupal.org/project/scald_og
- https://drupal.org/sandbox/gifad/2029897 - gallery extra
- https://drupal.org/sandbox/gifad/2029937 - imce
Audio
- http://drupal.org/project/audio - allows users with proper permissions to upload audio files into drupal. Each audio item is created as its own individual audio node. The audio module uses the getID3 library to read and write ID3 meta-tag information to and from the audio file. Pages that display the most recent audio files submitted to the site, as well as the most recent audio files uploaded by individual users are also generated. Feeds from these pages are 'podcast friendly'. The module also comes with the handy XSPF Flash player that is (by default) embedded in your site.
- http://drupal.org/project/filefield_audio_insert - extends the functionality of the cck filefield module. It allows you to insert flash playable audio into textareas/body's of nodes. It works in conjunction with the mp3player module for audio playback.
- http://drupal.org/project/ffpc - delivers a way to podcast with nodes that have CCK FileFields included as RSS file enclosures.
- http://drupal.org/project/debut_audio - A baseline embedded audio feature.Audio content type with embedded audio field supporting multiple external providers. Audio view with page listing, recent audio files block, and RSS feed. etc.
- http://drupal.org/project/audiofield - allows you to upload audio files and automatically displays them in a selected audio player. Currently it supports 6 players and it provides API for easy addition of new players.
- http://drupal.org/project/audiorecorderfield - field that enables both the recording and playing of .wav audio files directly from the web browser.
- http://drupal.org/project/audioconverter - converts audio files from supported CCK fields (AudioField, AudioRecorderField) to the mp3 format using FFMPEG. Depending on the need, files can be converted on cron or whenever new audio content is submitted.
- http://drupal.org/project/jplayer - provides a wrapper around the jPlayer JavaScript library. This library provides an HTML5-based player, that uses a Flash fallback for browsers that do not yet support it. This module provides a default presentation for the player, as well as integration with CCK file fields and a display style for Views.
- http://drupal.org/project/mp3player - WordPress Audio Player to Drupal. Easily enable the MP3 Player on a CCK FileField. Setup multiple players each with their own settings and appearance. FileField and Views support.
Forms
- http://drupal.org/project/options_element
- http://drupal.org/project/select_or_other
- http://drupal.org/node/1205532 - other field optional bug
Webform
- http://drupal.org/project/select_or_other
- http://drupal.org/project/webform_countdown
- http://drupal.org/project/webform_draggable_list
Events
- Date contains both a flexible date/time field type Date field and a Date API that other modules can use.
- Calendar will display any Views date field in calendar formats, including CCK date fields, node created or updated dates, etc. Switch between year, month, and day views. Back and next navigation is provided for all views. Lots of the Calendar functionality comes from the Date module, so any time you update the Calendar module you should be sure you also update to the latest version of the Date module at the same time.
- partial_date provides date and time fields that allows any individual component to be left blank, while still providing a sortable listing of the fields. Useful if you need to handle dates like "8:46 a.m Sep 11, 2001 EST", "12 noon 25 May, Early 16th Century" or "May 20000 BC" in the one field.
- Scheduler allows nodes to be published and unpublished on specified dates.
- Signup allows users to sign up (or register, as in register for a class) for nodes of any type. Includes options for sending a notification email to a selected email address upon a new user signup (good for notifying event coordinators, etc.) and a confirmation email to users who sign up.
- http://drupal.org/project/date_picker_formatter - Doodle clone
Timeline
Tracker
Mapping
Spreadsheets
Books
- https://drupal.org/project/outline_designer - easy book editing
- http://drupal.org/project/issues/bookblock - all books in one block
Shortcodes
- http://drupal.org/project/shortcode - api with examples/macros
Files
Extras
Search
Notification
- Messaging allows message sending in a channel independent way. It will provide a common API for message composition and sending while allowing plug-ins for multiple messaging methods.
- Notifications is a complete Subscriptions/Notifications Framework aiming at extendability and scalability. It allows any number of plug-ins defining new event types or subscription types or a different user interface.
- anon d6 only
- Notify allows users to subscribe to periodic emails which include all new or revised content and/or comments much like the daily news letters sent by some websites. Even if this feature is not configured for normal site users, it can be a useful feature for an administrator of a site to receive notification of new content submissions and comment posts.
- Subscriptions enables users to subscribe to be notified of changes to nodes or taxonomies, such as new comments in specific forums, or additions to some category of blog. Once enabled, all nodes will have an additional link that allows the user to change their subscriptions. Users have tab on their user screen to manage their own subscriptions. Users can also set an auto-subscribe function which notifies the user if anyone comments on posts they have made. Admins can turn this on by default.
Simplenews
- Simplenews publishes and sends newsletters to lists of subscribers. Both anonymous and authenticated users can opt-in to different mailing lists. HTML email can be sent by adding Mime mail module.
- http://drupal.org/project/simplenews_content_selection
- http://drupal.org/project/simplenews_scheduler
- http://drupal.org/project/simplenews_linkchecker
- http://drupal.org/project/webform_simplenews
Creating
WYSIWYG
See also WYSIWYG
Editing
Inplace / Inline
Embedding
External
Syndication
Semantic
External sources
- http://drupal.org/project/sparql
- https://drupal.org/project/sparql_views
- http://drupal.org/project/varql
Graphing
Attention
Interface
Booking
Taxonomy
- http://drupal.org/project/content_taxonomy - D6, This module provides a CCK field type for referencing taxonomy terms. The fields are independent from vocabulary settings. For every field you can specify settings. D7,
- http://drupal.org/project/hierarchical_select - This module defines the "hierarchical_select" form element, which is a greatly enhanced way for letting the user select items in a hierarchy.
- http://drupal.org/project/hs_user_terms - d6, for user, not content profile compatible
- http://drupal.org/project/hierarchical_term_formatter hs taxonomy formatter - d7
to sort;
- http://drupal.org/project/taxonomy_manager - easier taxonomy management
- http://drupal.org/project/batch_add_terms
- http://drupal.org/project/batax
- http://drupal.org/project/tagging
- http://drupal.org/project/autotag - auto-tagging via third party services
- http://drupal.org/project/autocategorise - set a vocab to categorise nodes by matching the body and title against its own terms and synonyms
- http://drupal.org/project/textmining_api - simple pluggable framework module that handle node/taxonomy terms/text fields association process for tagging/metadata services with submodules providing OpenCalais and Tagthe.net support
- http://drupal.org/project/autotagging
- http://drupal.org/project/opencalais
- http://drupal.org/project/calais_marmoset - browse tag semantic info
Token
- http://drupal.org/node/1515978 - certain tokens don't work in block title
- Token Filter is a very simple module to make token values available as an input filter.
Users
Registration
Permissions
Spam and captchas
- http://drupal.org/project/mollom - antispam service, no free ssl api tho
- http://drupal.org/project/hidden_captcha
- http://drupal.org/project/spamicide - hidden field
- http://drupal.org/project/honeypot - hidden field + min time
- http://drupal.org/project/captcha-free - blocks no js/cookies. hmm..
Login
Cookies
- https://drupal.org/project/cookiecontrol - ssl geo patch?
Passwords
Social
Profiles
use relationship in views to access fields [6]
Content: Author, (author) User: Profile
- http://drupal.org/project/contactinfo - hcard, works with invisimail
- http://drupal.org/project/realname - display name in d6 core/content profile/d7 core+token
- http://drupal.org/project/follow - user profile social links
Groups
D6 OG
- http://drupal.org/project/og_subgroups - enables a user with the proper permissions to build group hierarchies (or tree) by nesting groups under other groups. Simple or complex group hierarchies can be easily created.
- http://drupal.org/project/og_features - allow group owners and site administrators to disable certain features/functionality within a given group (without the use of the Spaces module).
- http://drupal.org/project/og_user_roles - allow group administrators of organic groups to grant additional user roles to individual members of a certain group.
- http://drupal.org/project/og_user_roles_access - extends OGUR 4+ (OG User Roles) and introduces group roles specific node access realms. Thus you can specify assign group sp
- http://drupal.org/project/og_privacy - define the rules by which organic groups posts will be visible to non-group members. It is an API module which allows developers to create access policies which override the default behavior of OG Access and Spaces OG.
- http://drupal.org/project/og_access_admins - to restrict permissions to change audience/visibility of posts belonging to a group to only administrators of this group.
- http://drupal.org/project/og_invite_link - OG Invite Link overrides the user invitation form that comes with OG - used to invite non-members to a given group. The key difference is that invitation emails contains a special tokenized invitation link, meant specifically for that user.
- http://drupal.org/project/og_titles - extends group membership to include arbitrary titles with which you can add to Organic groups views. Titles are per member and arbitrary strings. Examples of titles are strings such as "Chairman", "Secretary", or "Really Cool Dude". These can be accessed via Views.
- http://drupal.org/project/og_access_roles - extends the reach of Organic Groups' bundled Organic groups access control module by allowing node authors finer control over who can see their posts. Organic groups access control gives node authors the option of making their posts Public, meaning anyone can view the node, even anonymous users; or Private, meaning only group members can view the node. For Private posts, OG Access Roles gives node authors the ability to let users in selected roles view nodes even if those users are not in the group (or groups) where the node is posted.
- http://drupal.org/project/og_perm - In the OG module all group admins currently have the same set of capabilities within their group. They can add/ remove members, broadcast messages, and create/remove group admins. This module requires that group admins also have a certain permission to get those capabilities.
- http://drupal.org/project/og_massadd - Overrides the internal "add users" page of Organic Groups with a more powerful alternative. Takes a list where each row can be either: username - mail address - firstname, lastname, mail address - firstname, lastname, mail address, desired username.
- In case 1 or if there is an mail address provided, the module first checks if it matches an existing user, and adds that user to the group.
- In case 2-4, if there is no matching user, the user will be created (as long as the person submitting the form has permissions to do so). Newly created users will also have a content profile node created for them if enabled (has a settings page).
- http://drupal.org/project/og_read_only - allow group administrators to set some content types as "read-only". Read only types can't be posted by simple group members, but still can be posted by group managers and users with "administer nodes" permission. Wiki group types can't be set to read only.
- http://drupal.org/project/og_node_approval - offers content review between group members allowing them to approve or reject content. When creating or updating content simply choose the audience for the content (including multiple groups), save the node, and the module will insert group members from those respective audiences into the a node approval table.
- http://drupal.org/project/og_audience - allows Organic Groups (OG) users to change a node's audience without having to edit the node. This module works by providing a new change audience permission, and an Audience tab and/or block on node pages that allows users to change the audience of existing content. A user can add any node to one or more of the groups he/she has subscribed to. A group manager can remove a node from his/her group(s). A node's author can remove the node from one or more of the groups he/she has subscribed to.
- http://drupal.org/project/og_teams - create groups of users (teams) that can be subscribed to organic groups just like regular users. Teams are like user roles, you can create new teams and you can assign multiple users to any team.
- http://drupal.org/project/og_mandatory_group - makes one group mandatory for all new users and/or requires new users to pick a group. Choose one group that all new users will be put into. You can chose either an open or a closed group. Any new user will be auto-approved as member of the group. The group manager(s) of groups that a new user joins will get an automatic e-mail notice.
- http://drupal.org/project/og_multiple_mandatory_groups_by_role - extend the capabilities of the original og_mandatory_group module to allow as many mandatory groups as the user wants for: 1) All users, 2) Group administrators/owners, 3) any role
- http://drupal.org/project/og_announce - allow creation of announcement only groups, into which only group administrators may post. not updated?
- http://drupal.org/project/og_manage - added tab to user account where administranor can select groups user belong to and make user of this groups or remove membership on one page.
- http://drupal.org/project/ctog - Running Case Tracker and Organic Groups on the same site raises some questions - but CTOG helps solving them by utilizing some rules to tie them together in a way which makes them easier to use.
- http://drupal.org/project/og_mailinglist - OG Mailinglist allows users to start new discussions by email and post comments on existing discussions by simply replying to emails. You get the best of both worlds: a browser-based discussion site and an email-based list.
Party
Internal network
- http://drupal.org/project/flag
- http://drupal.org/project/flag_weights
- http://drupal.org/project/views_flag_refresh
- http://drupal.org/project/rpx - lazy multiservice login
Private messaging
- http://drupal.org/project/privatemsg - allows your site's visitors to send private messages to each other. Perfect for community oriented sites, such as forums and social networking sites. Many additional features are available as separate modules.
- http://drupal.org/project/message
- http://drupal.org/project/messaging
Comments
Groups
- http://drupal.org/project/og
- http://drupal.org/project/og_forum
- http://drupal.org/project/forum_access
Social and sharing
- http://drupal.org/project/rss_feeds_block - breaks site
- http://drupal.org/project/widgets - manage service codes
- http://drupal.org/project/socialmedia - profile and share links, only large count
- http://drupal.org/project/service_links - comprehensive service coverage
- http://drupal.org/project/addtoany - uses http://share.lockerz.com/ - popup with icons.
- http://drupal.org/project/social_count - monochrome, onmouseover loading for non-blocking js
- http://drupal.org/project/socialitejs - nice basic result, small
- http://drupal.org/project/social_buttons - basic result, gives access to individual code use
- http://drupal.org/project/social-share - basic list of services
- http://drupal.org/project/share_this_thing - share links and numbers in popup
- http://drupal.org/project/easy_social - post like/save numbers for twitter, fb, g+, linkedin. unbalanced graphically.
- http://drupal.org/project/social_seek - widget to display service follower totals
- http://drupal.org/project/jasm - provices blocks with service profile postings
- http://drupal.org/project/share_count - gathers statistics on social shares, views support.
- http://drupal.org/project/forward - email share
External integration
- http://drupal.org/project/twitter_block
- http://drupal.org/project/riveroftweets
- http://drupal.org/project/twitter_profile_widget - bit naff
- http://drupal.org/project/twitter_follow - facebook likebox like
- http://drupal.org/project/twitter_pull Twitter Pull is a small module, the only purpose of which is to allow super-easy embedding of public twitter data like: a user timeline or twitter search results by hashtag or a search term. The emphasis is on making these very specific tasks as easy and straightforward as possible. The purpose of the module is not to be an end-all solution for Twitter.
Google Plus
Sharing
External
- http://drupal.org/project/sharethis
- http://drupal.org/project/shareaholic
- http://drupal.org/project/post
Social service
- http://drupal.org/project/facebook_status - d6 (other d7)
- http://drupal.org/project/fbsmp - d6/d7
- http://drupal.org/project/twitter - posting, login and moar
- http://drupal.org/project/facebook_comments
- http://drupal.org/project/tumblr_connect - post to tumblr
- http://drupal.org/project/disqus
Comms
to sort
- http://drupal.org/project/socialshareprivacy - doubleclick-to-activate share widget
Federation
DiSo, etc
- http://drupal.org/project/discovery
- http://drupal.org/project/activitystream / http://drupal.org/project/activity
- http://drupal.org/project/push_hub
- http://drupal.org/project/sioc
Other
- Drupalcon Copenhagen: 15 modules to help you build a community website
- Drupalcon Copenhagen: Connect Drupal
Eye candy
- http://drupal.org/project/impress - integrates impress.js to create 3D html5 presentations while using Drupal node system and Views to manage the slides.
Countdown
- http://drupal.org/project/jquery_countdown_timer
- http://drupal.org/project/jstimer - supersedes above
External links
- http://drupal.org/project/extlink
- http://drupal.org/project/extlink_extra
- http://drupal.org/project/ext_link_page
Aggregation
Feeds
Views owner node title - http://drupal.org/node/1257170
OpenCalais
E-commerce
See also Drupal Distros#E-commerce
Payment
- Payment is a general payment platform which allows other modules to use any of the payment methods that plug into Payment. With Payment we only need one one Paypal, one credit card and one iDEAL module to use with every single webshop or payment form that you want (applies to any payment method that works with Payment). This shortens development time and improves support, because only one instead of three Paypal modules need to be maintained, and simplifies UX, because all payment (method) information is now located in one place.
Payment method controller modules;
- https://drupal.org/project/paypal_payment
- https://drupal.org/project/ogone
- https://drupal.org/project/stripe
- https://drupal.org/project/pay_realex - xml request
Other
- https://drupal.org/sandbox/jlyon/1472346 - stripe/drupal webform
Performance
Boost
- Boost provides static page caching for Drupal enabling a very significant performance and scalability boost for sites that receive mostly anonymous traffic. For shared hosting this is your best option in terms of improving performance. On dedicated servers, you may want to consider Varnish instead. Apache is fully supported, with Nginx, Lighttpd and IIS 7 semi-supported. Boost will cache & gzip compress html, xml, ajax, css, & javascript. Boosts cache expiration logic is very advanced; it's fairly simple to have different cache lifetimes for different parts of your site. The built in crawler makes sure expired content is quickly regenerated for fast page loading.
CloudFlair
Other
SEO
Analytics
Humour
Project
- http://drupal.org/project/merci - can extend any content type into a list of unique reservable items (like studios) or buckets of interchangeable items (like DV cameras). We followed the approach used by Organic Groups, Feed API, and Scheduler and added MERCI's configuration to the Edit tab of those content types.