The description for hook_load says that It is called to allow the module a chance to load extra information that it stores about a node.
and that the returned object will be merged with the passed-in $node to result in an object containing both sets of properties
.
This is not exactly what happens: node.module/node_load does not exactly return the node containing both sets of properties
, but the passed-in properties, plus the extra properties added by the hook_load implementation, which can replace the passed-in properties if the returned object contains keys having the same name as the passed-in properties, which means they are not only "extra" properties.
This means existing properties loaded in the first part of node_load can be overwritten, or even removed by hook_load (using unset), which should be
- either documented if this is the desired behaviour for the code,
- or avoided by sanitizing the return value of hook_load through checking for duplicates with the passed-in values.
Page affected:
http://drupaldocs.org/api/head/function/node_load
http://drupaldocs.org/api/4.6/function/node_load
| Comment | File | Size | Author |
|---|---|---|---|
| #5 | node.php_0.patch | 1.11 KB | fgm |
| #2 | node.php.patch | 1.11 KB | fgm |
Comments
Comment #1
fgmError in description: they can't be removed by using unset, but giving them a null value effectively erases the previous value without leaving any usable value.
Comment #2
fgmHere is a suggested patch with a more accurate wording.
Comment #3
gábor hojtsyThis is intended. This is the feature used by excerpt module to inject the proper teaser for example AFAIR.
Comment #4
Bèr Kessels commented@Goba: yes, intended, but undocumented. Documents say they are *inserted*, while in fact they are *inserted* OR *replaced*. This patch changes that documentation error, only.
A +1
Comment #5
fgmPrevious version contained a typo.
Comment #6
drewish commentedlooks good +1
Comment #7
dries commentedCommitted to HEAD.
Comment #8
(not verified) commented