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

CommentFileSizeAuthor
#5 node.php_0.patch1.11 KBfgm
#2 node.php.patch1.11 KBfgm

Comments

fgm’s picture

Error 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.

fgm’s picture

StatusFileSize
new1.11 KB

Here is a suggested patch with a more accurate wording.

gábor hojtsy’s picture

This is intended. This is the feature used by excerpt module to inject the proper teaser for example AFAIR.

Bèr Kessels’s picture

Status: Active » Needs review

@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

fgm’s picture

StatusFileSize
new1.11 KB

Previous version contained a typo.

drewish’s picture

looks good +1

dries’s picture

Status: Needs review » Fixed

Committed to HEAD.

Anonymous’s picture

Status: Fixed » Closed (fixed)