Drupal Module Development

Preview:

Citation preview

CMS+

framework+

Community

Getting Involved!

do (drupal_module_development) or die(a_noob);

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

Hooks

Drupal APIhttp://api.drupal.org/

Seek the purpose

You got to answer some questions.|

a good starting point|

What do I want to do?

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..

end user

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.

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?

Lets say we want…

Lets say we want…

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

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

No Luck!!

Time to get hands dirty !!

How?

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.

Indispensable development help

Indispensable development help

CoderSchema

Form BuilderDevel

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.

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

Map schema to everything else in the UI mockups just created

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.

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

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 !!

Best practices to structure $form

Why are they called “best practices” ?

How to:dynamic forms

and forms that “grow”

what is the difference!!??

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.

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

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

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

Ain’t Drupal beautiful ?!

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

theme it.

Ta-Da!! ®

Lets go to node/59

http://drupal.org/node/100748

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

May the force be with you

? Sumeet Pareek aka WikidKaka

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

Recommended