36
CMS + framework + Community

Drupal Module Development

Embed Size (px)

Citation preview

Page 1: Drupal Module Development

CMS+

framework+

Community

Page 2: Drupal Module Development

Getting Involved!

Page 3: Drupal Module Development

do (drupal_module_development) or die(a_noob);

/* Btw.. That is the official title of this talk. */

Page 4: Drupal Module Development

Hooks

Page 5: Drupal Module Development

Drupal APIhttp://api.drupal.org/

Page 6: Drupal Module Development

Seek the purpose

You got to answer some questions.|

a good starting point|

What do I want to do?

Page 7: Drupal Module Development

Answers to be found

1. The end user should be able to do this ___________ .

2. __________ be done to the end user.

3. All corollaries of #1 and #2

After all..

Page 8: Drupal Module Development

end user

Page 9: Drupal Module Development

Lets say we want…User account page

Member Since:3weeks 2days

Has role ‘lucky’:expires in 13 more days

Has role ‘geek’:Never expires

BLAH.. BLAH…

<Username>

Role ‘rookie’:expires in 14 days

Role ‘content contributor’:expires in 100 days

This is how user profile page should look like to anybody visiting it.

Block displaying currently logged in users “role length” details

** we also want the user to receive ‘n’ number of automated mail notifications as he is approaching a particular role expiry.

Page 10: Drupal Module Development

Some more answers to be found

1. Does the admin need to be bothered?

2. What settings/configurations ought to be exposed to the admin?

3. What is the right place (drupal path) to do this?

4. Okay.. So how should the form(s) look like?

Page 11: Drupal Module Development

Lets say we want…

Page 12: Drupal Module Development

Lets say we want…

Page 13: Drupal Module Development

Try all PnC

Highly recommended to evaluate if the requirements can be fulfilled by PnC of drupal core + “killer modules”

Drupal core Core – Optional modules Cck, Views, Panels et al

Page 14: Drupal Module Development

Contributions!! Where? How?

There are very high chances that what you are looking for has already been developed

http://drupal.org/project/Modules http://drupalmodules.com/module-f

inder Google -> site:drupal.org/project

<search keywords> -cvs

Page 15: Drupal Module Development

No Luck!!

Page 16: Drupal Module Development

Time to get hands dirty !!

How?

Page 17: Drupal Module Development

Make sure to look inside related modules

Related =>Modules that do things which are only slightly different or slightly similar to the things that you wound want your module to do.

Page 18: Drupal Module Development

Indispensable development help

Page 19: Drupal Module Development

Indispensable development help

CoderSchema

Form BuilderDevel

Page 20: Drupal Module Development

Determine the schema

Requirement collection starts form the user. Development should start from the database.

Map the schema to all/any mock ups you have prepared.

Page 21: Drupal Module Development

Schema mockup

role_length

rid int

rlength int

exprid int

asg_mail text

exp_mail text

role_length_user_ roles

rid tinyint

uid int

asg_time timestamp

expmail_sent text

Page 22: Drupal Module Development

Map schema to everything else in the UI mockups just created

Page 23: Drupal Module Development

role_length

rid int

rlength int

exprid int

asg_mail text

exp_mail text

role_length_user_roles

rid tinyint

uid int

asg_time timestamp

expmail_sent text

User account page

Member Since:3weeks 2days

Has role ‘lucky’:expires in 13 more days

Has role ‘geek’:Never expires

BLAH.. BLAH…

<Username>

Role ‘rookie’:expires in 14 days

Role ‘content contributor’:expires in 100 days

** we also want the user to receive ‘n’ number of mail notifications as he is approaching a particular role expiry.

Check if we have all the data that we need. * Avoid redundancy. There is a lot of data in tables not created by the module being developed.

Page 24: Drupal Module Development

Creating .info and .install files Use dependencies only when core functionality of your module

depends upon other modules ELSE use module_exists()

Schema API ? http://api.drupal.org/api/function/hook_install http://api.drupal.org/api/function/hook_uninstall http://api.drupal.org/api/function/hook_install_schema http://api.drupal.org/api/function/hook_schema

Page 25: Drupal Module Development

Creating .module file http://api.drupal.org/api/function/hook_help http://api.drupal.org/api/function/hook_menu

Form API ? http://api.drupal.org/api/file/form_api_reference.html/6 http://api.drupal.org/api/function/hook_form_alter AHAH !!

Page 26: Drupal Module Development

Best practices to structure $form

Why are they called “best practices” ?

Page 27: Drupal Module Development

How to:dynamic forms

and forms that “grow”

what is the difference!!??

Page 28: Drupal Module Development

jQueryTo jazz up your forms with tool tips, pop-ins, char count et al.

AHAH FAPI + menu callbackTo ajaxify forms without changing the types of or number of elements in the form. (eg: username availability)

AHAH FAPI + menu callback + form rebuildingTo asynchronously grow the form. Adding/Removing elements or changing types of elements.

Page 29: Drupal Module Development

Initially requests for the form

Build the form > Send out the rendered form > Save form state in the cache

Acts upon the AHAH element

“AHAH callback” fetches form from the cache > build it using $_POST values > Add/Removes/Modifies elements > Set the cache > Output changes as JSON

AHAH grabs the JSON response and does the magic.

Changing forms asynchronously

Page 30: Drupal Module Development

Major hooks

http://api.drupal.org/api/function/hook_user Gotcha: Not implementing the case delete.

Especially dangerous when modules own tables have user related data. Just do it in the memory of node/8

http://api.drupal.org/api/function/hook_cron http://api.drupal.org/api/function/hook_block

Page 31: Drupal Module Development

Tools we can use… DATABASE API http://api.drupal.org/api/function/drupal_write_records http://api.drupal.org/api/function/user_roles http://api.drupal.org/api/function/format_interval http://api.drupal.org/api/function/user_multiple_role_edit http://api.drupal.org/api/function/user_load http://api.drupal.org/api/function/drupal_mail http://api.drupal.org/api/function/watchdog

~ 2200 more

Page 32: Drupal Module Development

Ain’t Drupal beautiful ?!

To keep it that waydon’t spit out your output,

theme it.

Page 33: Drupal Module Development

Ta-Da!! ®

Lets go to node/59

Page 34: Drupal Module Development

http://drupal.org/node/100748

1. Add code to CVS2. Create the project on drupal.org3. Create a release4. Add a handbook page

Page 35: Drupal Module Development

May the force be with you

Page 36: Drupal Module Development

? Sumeet Pareek aka WikidKaka

positivecharge (at) gmail (dot) comhttp://sumeetpareek.com http://drupal.org/user/301925