when-not-a-module-for-that/blog-when-not-a-module-for-that-resources.md
2020-05-01 08:23:35 -04:00

2.8 KiB

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

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?)

Development Tips

  • When Something Isn't Working, Clear Caches
  • When Anything's Missing, Check Permissions
  • Set Your Site to Show All Errors

Lines to add to settings.php to show all notices and errors:

error_reporting(-1);
$conf['error_level'] = 2;
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);

These days i just look in the error log but it never hurts to have errors blared at your face.

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.

Best practices

  • Make dependenices optional when possible.
  • Provide granular suggestions in theme functions so people can override when they want to.