24
My first Drupal module! Why not?

Gajendra sharma Drupal Module development

Embed Size (px)

Citation preview

Page 1: Gajendra sharma Drupal Module development

My first Drupal module!

Why not?

Page 2: Gajendra sharma Drupal Module development

About @ Gajendra Sharma

• Started as PHP developer with custom CMS •“You need Linux” they said •I know Drupal since version 5.x

Email: gajen.ksharma@gmail Skype: gajendrakumarsharma1688 LinkedIn: www.linkedin.com/in/gajendrasharma

Page 3: Gajendra sharma Drupal Module development

Drupal

•  Available from drupal.org.

•  Runs on every machine with

PHP, supported database

and web server.

•  Very customizable

(themes, modules).

•  Good documented.

•  No limits.

Page 4: Gajendra sharma Drupal Module development

A whole bunch of modules

Page 5: Gajendra sharma Drupal Module development

Which one to use?

Page 6: Gajendra sharma Drupal Module development

Missing a module?

Page 7: Gajendra sharma Drupal Module development

Three kinds of modules (3 Cs)

•  Core

–  Shipped with Drupal

–  Approved by core developers and community

•  Contributed

–  Written by community

–  Shared under the same GNU Public License

•  Custom

–  Created by website developer

Page 8: Gajendra sharma Drupal Module development

Where to?

Drupal

Core Modules Core Themes

Contributed

Contributed Themes

Modules

Custom Module Custom Theme

/sites/[all|mysite.com]/custom

Page 9: Gajendra sharma Drupal Module development

Module name

•  Should be a UNIQUE “short name”

•  Used in all file and function names

•  Must start with a letter

•  Only lower-case letters and underscores

•  We will use name: “dc_stat”

–  For display current node/user stats

Page 10: Gajendra sharma Drupal Module development

Create a folder + module file

•  Module name “dc_stats”.

•  Create empty folder:

–  /sites/*/modules/custom/dc_stats/

•  Create new file “dc_stats.module” with

opening PHP tag and NO closing tag!!

•  Create new file “dc_stats.info” for

meta information.

Page 11: Gajendra sharma Drupal Module development

*.info

•  Required for every module!

•  Standard .ini file format – key/value pairs

name = Drupal statistic!

description = Provides some statistic data.!

core = 7.x!

package = Damjan Cvetan!

Other optional keys:

stylesheets, scripts, files, dependencies, …

Page 12: Gajendra sharma Drupal Module development

Checkpoint

•  Navigate to Modules section on your site

•  You should see your module

•  Enable it!

Page 13: Gajendra sharma Drupal Module development

Coding standards

•  Use an indent of 2 spaces, no tabs!

•  UNIX line ending (\n)

•  Omit closing “?>” PHP tag

•  Constants should be all-uppercase

•  Comments are your friends!

Page 14: Gajendra sharma Drupal Module development

Half way there

Hook(s)

hook – [hoo k], noun Ÿ a

curved or angular piece of

metal or other hard

substance for catching,

pulling, holding, or

suspending something.

•  Fundamental to Drupal

Page 15: Gajendra sharma Drupal Module development

How does it work?

Foreach (enabled_module):!

module_name_menu();!

end foreach;!

Cal

l dis

pat

ch

Call for hook: hook_menu()

Drupal runFme

locale_menu()!

user_menu()!

contact_menu()!

help_menu()!

…!

…!

dc_stats_menu()!

…!

…!

trigger_menu()!

path_menu()!

Drupal runFme

Page 16: Gajendra sharma Drupal Module development

Hooks line up!

•  hook_help() – Provides

available documentation.

•  hook_menu() – For paths registration in order to define how URL request are handled.

•  hook_init() – Run at the beginning of

page request.

•  hook_cron() – Called whenever a cron

run happens.

•  More at http://api.drupal.org/

Page 17: Gajendra sharma Drupal Module development

API.drupal.org

•  Drupal developer’s documentation.

•  Doc for Drupal 4.6+.

•  Describes function calls, their

parameters and return values.

•  You can see the code and “who” is

calling this code within Drupal.

•  http://api.drupal.org

Page 18: Gajendra sharma Drupal Module development

Let’s code

•  Define callback function dc_stats_page()

as follows:

funcFon dc_stats_page(){

return "Hello world! You’re awesome!”;

}

•  This will return defined string on call.

•  Put this code in dc_stats.module file.

Page 19: Gajendra sharma Drupal Module development

Hey Drupal! Come in!

•  Register path with hook_menu().

•  We will use basic return array structure.

funcFon dc_stats_menu(){ $items['dc/stats-page'] = array( 'Ftle' => 'Stats info page',

'page callback' => 'dc_stats_page', 'access arguments' => array('access content'), 'type' => MENU_CALLBACK,

);

return $items;

}

Visit URL: /dc/stats-page to see if it works.

(You might need to clear cache first.)

Page 20: Gajendra sharma Drupal Module development

Get some real data

funcFon dc_stats_page(){ drupal_set_Ftle("Drupal staFsFcs"); $node_count = $db_node_count; $user_count = $db_users_count; $header = array("InformaFon", "Value");

$rows[] = array('Number of nodes:', $node_count);

$rows[] = array('Number of users:', $user_count);

return theme_table(array( 'header' => $header,

'rows' => $rows,

)); // return

}

Page 21: Gajendra sharma Drupal Module development

Happy ending

•  Refresh your page and see your work.

•  You can do much more – I’m certain!

•  Use your PHP + any other knowledge

with existing Drupal functions, hooks

and variables!

Page 22: Gajendra sharma Drupal Module development

Links to consider

•  http://api.drupal.org

http://drupalcontrib.org/

•  http://buildamodule.com/

•  http://drupal.org/project/devel

–  A suit of modules containing fun for

module developers and themers.

Page 23: Gajendra sharma Drupal Module development

Books

•  Drupal 7 Development by Example

•  Beginning Drupal 7

•  Drupal 7 Module Development

•  …

•  …

Page 24: Gajendra sharma Drupal Module development

Q & A