I see many implementations of hook_block who declare
global $user
but none with
global $node
I tried it but $node is still not set, so I cannot access the node object
directly.
That is because there is no global $node. There is a global $user viewing the page, but not every page has a $node that it needs to display (eg all kinds of "listing" pages or the admin pages etc). Blocks can appear on any page, not only node-pages. So hook_block() doesn't have direct access to a $node variable.
Note that the functions that need $node always have a $node parameter passed. There is no global $node that I'm aware of (with maybe the exception of theming, but that is then handled by phptemplate).
the solution would be to do like in book_hook() and check on arg():
if (arg(0) == 'node' && is_numeric(arg(1)))
but it looks like a hack and for what I have in mind, it makes things more
complicated.
I think this is the correct way of doing this. And I don't really see how this makes things more complicated. The test checks if we are on a node-page, and if you are you can load the node needed.
node.module makes sure the node is loaded only once, so there is no overload either.
Isn't there a possibility to have directly access to the $node object?
How?
Don't think so.
Kind regards,
Robrecht