[support] inter module communication, hooks and dependencies

Larry Garfield larry at garfieldtech.com
Fri Jan 2 16:56:45 UTC 2009


On Fri, 2 Jan 2009 17:42:39 +0100, Ivan Sergio Borgonovo <mail at webthatworks.it> wrote:

> Of course if what get into head (drupal_set_html_head()) was a
> structured object rather than a string... I wouldn't have to think
> to write a module so that each function can easily modify META...
> but that's another topic...
> 
> If there is no core global object and core global workflow and I
> need one... I wouldn't know how to build it in a module.
> That's what I'd like to learn.
> 
> thanks

I'd say you're on the right track with a hook.  It's probably easier to explain with examples.  I'd suggest something like:

hook_meta() {
  $info['keyword'] = array('foo', 'bar');

  $info['some_key'] = 'some value';

  return $info;
}

hook_meta_alter() {
  // Because when you have a structured array, an alter hook is so dead simple to add it seems pointless not to.
}

yourmodule_preprocess_page(&$vars) {
  // Invoke hook_meta_info() and the alter hook, get back the data from all modules, 
  // format it, and inject it into the $vars['head'] variable as appropriate.
}

Modules that need to do complex logic to figure out what tags to add can do so in their own hook_meta implementations.  It also means no module has a hard-dependency on your module or vice versa, weight doesn't matter, and other modules can inject whatever meta tag info they need that you haven't thought of before.

Make sense?  (Exact implementation is left as an exercise for the implementer.)

--Larry Garfield



More information about the support mailing list