Definitively slay the mythology that module-making is a mystic domain of Drupal druids. https://api.drupal.org/api/drupal/core%21core.api.php/group/extending/ https://api.drupal.org/api/drupal/core!core.api.php/group/hooks/ Use Git: don't be afraid to change things. Use a debugger. ### Hooks work by naming convention. To implement a hook, take the 'hook' part off the hook name and replace it with your module's (machine) name. ### When to Contribute? When your module fills a need larger than your precise use case. Note: If you just want to build a module, finding a module idea that one or more people have been asking for is a good way to meet a need and avoid duplication. See also http://groups.drupal.org/ contributed-module-ideas ### Finding a Drupal Function that Does What You Need * Identify a page that produces output like what you want to see. * Look up the page callback function for that page's menu item. * See what functions are used (or database queries made) in the page callback function. `grep -nHR --include=*.module 'admin/appearance' modules` ### Error messages mean progress! `Parse error: syntax error, unexpected ';', expecting ')'` You are having an effect on the world. Or at least your local site. ## Getting help The Internet. It's good. ### Tip: Looking up Hooks We can look up hook definitions and their function signatures the same way we look up Drupal functions, at api.drupal.org: api.drupal.org/hook_help api.drupal.org drupalcontrib.org ### Examples project [drupal.org/project/examples](https://www.drupal.org/project/examples) Tip: grep grep -nHR module_implements_alter . ./includes/module.inc:646: if ($hook != 'module_implements_alter') { ./modules/system/system.api.php:1775:function hook_module_implements_alter(&$implementations, $hook) { ### Tip: Clear Caches If something you do has no effect... `drush cr` ## Coding Standards drupal.org/coding-standards Automated Nagging drupal.org/project/coder Automatic Adherence drupal.org/project/grammar_parser (obsolete?) The most important thing about this code is that i stole it. I looked at how another module did it. Implementing hooks is simply following patterns, it would be crazy not to copy.