[development] Hook ordering
Scott McLewin
drupal at mclewin.com
Thu Jan 4 06:13:06 UTC 2007
Karoly Negyesi wrote:
> I need to work on my reputation :)
> http://cvs.drupal.org/viewcvs/drupal/contributions/sandbox/chx/weights.php?view=markup
>
>
I never bound your handle to your name. Ok, I know where that sandbox is.
>> of hook_load() and friends as being 'first' for a module that defines
>> its own type. How about leaving that in place and only allowing
>> 'before' and 'after' designations in the proposed registry?
>>
>
> hook_load is not a real hook, it's a callback, because at any given time only one is called.
> hook_nodeapi is a hook, at any given time all implementations are called in order.
>
> For example, hook_form_alter. What happens when two modules try to be the first? Or the last for that matter?
>
I realize that, I was using hook and callback synonymously when I should
not have. Or rather Drupal is and I was sucked into the nomenclature. :)
My point still stands, don't deal with the 'first' or 'last' case in a
hook registry. I suggest that the registry only allow for 'before' and
'after', just as your sandbox code is authored. The module that 'owns'
the node type can declare callback_load() when it needs logic to be run
first.
I recognize that there is confusion on hook_nodeapi() vs
_load()/_update()/etc. The really do look like they overlap when one
first sees them, but that difference of one being called on every single
node type vs. being only called on the module's node type is important.
Somewhere else in this thread it was suggested that hook_nodeapi() be
renamed to hook_node_alter(). That is a simple change that is in line
with the _alter() pattern that is spreading through the Drupal API. I
think it also stands to clear up some of the confusion between
_nodeapi(op=operator) vs hook#operator() callbacks.
Larry Garfield states that he cannot understand the infatuation with
fewer functions and more switch() statements. I agree with him. The
callbacks we know as hook_load()/hook_update()/hook_insert()/etc are
much more in line with object patterns.
What do you all think about changing hook_nodeapi() to hook_node_alter()
in Drupal 6?
Scott
More information about the development
mailing list