260 likes | 340 Views
Introduction to Module Development John Fiala and Ezra Barnett Gildesgame. What is a module?. Apollo Lunar Service and Excursion Modules. What is a module?. A piece of software that adds or extends functionality on a Drupal website. Adds functionality.
E N D
Introduction to Module DevelopmentJohn Fiala andEzra Barnett Gildesgame
What is a module? Apollo Lunar Service and Excursion Modules
What is a module? A piece of software that adds or extends functionality on a Drupal website
Adds functionality • Ubercart - Provides a sophisticated online store • Fivestar - Provides a star rating widget for rating content • Signup - Let's users sign up to attend events
Extends Functionality • UC_Signup - Allows people to to pay for Ubercart Events • Token - Many modules rely on Token to provide configurable messages including variable (like [user-name])
Often, adding a new feature entails extending or connecting existing featuresYou usually don't have to start from scratch :) • Fivestar stores data using the VotingAPI • UC_Signup connects Ubercart and Signup • Embedded Media Field provides a new field for use with the Content Construction Kit
Core, Contrib & Custom • Core - Part of the official Drupal package. Everyone using Drupal has it • Contrib - Publicly available optional download, not specific to a particular website. (Though sometimes specific to a kind of feature) • Custom - Specific to a particular website. Useful for that website, but not generally useful to the public.
Drupal Community • Check out the issue queue • Find a related group on groups.drupal.org
Custom Modules • Often avoidable • Often necessary • Usually cost more to maintain • API changes, version updates • Security • Feature additions • Friends you lose when you duplicate their module • (We still <8 you)
You usually don't have to start from scratch! Drupal Core and Contrib have nice systems that you can harness in your module • Displaying and processing forms for user input • Handling user accounts • Handling Content (Core node, contrib CCK) • Creating custom listings of content (Views)
With hooksI'm performing a particular action.Does anyone have anything to say about it? • Person A: I'm getting up to get napkins. Does anybody want me to get anything else? • Person B: Yes! Please get straws. • Module A: I'm presenting a form to the user. • Module B: Please add a checkbox to the form! A - The hook Definition B - The hook Implemenation
Examples of Hook Events • Displaying a form to the user (hook_form_alter) • Add a custom checkbox • A user signs up for an account (hook_user) • Display a friendly message • Submitting a node (hook_nodeapi) • Store custom data in the database • The website sends mail ( • Connect to an SMTP sever
Writing a module • Create a .info file - Tell Drupal your module exists • Create a .module file • Implement one or more hooks • Create a .install file (optional)
Go to http://drupal.org/node/231036 Your Basic Info File: ; $Id$name = Example moduledescription = "Gives an example of a module."core = 6.x Optional: package = Viewsdependencies[] = viewsdependencies[] = panels php = 5.1
How Do I Interact with a Form? hook_form_alter(&$form, $form_state, $form_id) The $form Array: (We'll get to this) The Form Status $form_state['values'] is what was entered Which Form Is This? Step 1: Use dpm($form_id); to find out! http://api.drupal.org/api/function/hook_form_alter/6
Form Array? What? $form['foo'] = array( '#type' => 'textfield', '#title' => t('bar'),'#default_value' => $object['foo'],'#size' => 60,'#maxlength' => 64, '#description' => t('baz'),); $form['submit'] = array( '#type' => 'submit','#value' => t('Save'),); Something like this: QuickStart: http://api.drupal.org/api/file/developer/topics/forms_api.html/6
How do you Interact with nodes? The node to change hook_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) What's happening to the node (There's a long list): delete/insert/update/view/validate Extra data: if 'view', then $teaser, if 'validate', then $form. Extra data: if 'view' then $page http://api.drupal.org/api/function/hook_nodeapi/6
What about interacting with User accouts. hook_user($op, &$edit, &$account, $category = NULL) What the User is Doing (Again, a list, but...) delete/insert/load/login/logout/register/update /etc, etc, etc Form Values submitted The User's User Object (Why isn't it $user?) $category - the category of User Info being changed
Image Credits • Tube Man • http://www.flickr.com/photos/redherring1up • NASA Toys http://www.silentthundermodels.com/nasa_space_models/apollo.html
Updating Modules from 5.x to 6.x http://drupal.org/node/114774 • Form API Reference - http://api.drupal.org/api/file/developer/topics/forms_api_reference.html/6 • Form API Quickstart - http://api.drupal.org/api/file/developer/topics/forms_api.html • "Easy" d.o Newbie tag http://drupal.org/project/issues/search?text=&projects=&assigned=&submitted=&participant=&status%5B%5D=Open&issue_tags=Newbie