2. About @Cvetko
• Started as PHP developer with
custom CMS
• “You need Linux” they said
• I know Drupal since version 4.x
Twitter
@Cvetko
• Working as Sys admin, Drupal
Skype developer, iOS developer, etc.
damjan.cvetan
Email
damjan@agiledrop.com
3. Drupal
• Available from drupal.org.
• Runs on every machine with
PHP, supported database and
web server.
• Very customizable (themes,
modules).
• Good documented.
• No limits.
7. 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
9. 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
10. 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.
11. *.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, …
13. 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!
15. 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 modules.
• A way to interact with the core code.
• Occur at various points in execution thread.
• An event listener.
• Names as foo_bar()
– foo : module name, bar : hook name
16. How does it work?
Foreach (enabled_module):!
module_name_menu();!
locale_menu()!
end foreach;! user_menu()!
contact_menu()!
help_menu()!
Call
dispatch
…!
…!
dc_stats_menu()!
…!
…!
trigger_menu()!
Call
for
hook:
path_menu()!
hook_menu()
Drupal
runFme
Drupal
runFme
17. 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/
18. 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
19. 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.
20. 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.)
21. 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
}
22. 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!
23. 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.
24. Books
• Drupal 7 Development by Example
• Beginning Drupal 7
• Drupal 7 Module Development
• …
• …