J'irais certainement pour field_attach_update
.
L'idée est simple. Chargez simplement le nœud et enregistrez-le à l'aide de field_attach_update.
Ex:
$node = node_load($nid);
$node->field_name[LANGUAGE_NONE][0]['value'] = 'New value';
field_attach_presave('node', $node);
field_attach_update('node', $node);
// Clear the static loading cache.
entity_get_controller('node')->resetCache(array($node->nid));
Cela ne changera aucun horodatage ni aucun autre hook que node_save invoque habituellement. Le chargement du nœud invoquera également certains crochets, donc ce n'est probablement pas si efficace.
Si vous avez le nid et si la structure du nœud est simple, vous pouvez également le faire comme ceci:
$node = new stdClass();
$node->nid = $nid; // Enter the nid taken. Make sure it exists.
$node->type = 'article';
$node->field_name[LANGUAGE_NONE][0]['value'] = 'New value';
field_attach_presave('node', $node);
field_attach_update('node', $node);
// Clear the static loading cache.
entity_get_controller('node')->resetCache(array($node->nid));
Quoi qu'il en soit, si vous essayez de mettre à jour autre chose que des champs, cela ne fonctionnera pas (statut des commentaires, statut publié, etc.). De plus, si vous utilisez node_save, le cache pour le noeud particulier sera effacé automatiquement pour différentes méthodes, nous devons l'effacer avec 'entity_get_controller'.
Mise à jour:
Il semble que vous devriez également appeler field_attach_presave()
pour permettre aux autres modules de traiter correctement l'entrée de champ. Le module de fichiers, par exemple, l'utilise pour définir l'état du fichier sur permanent à l'aide de ce hook. J'ai mis à jour mes 2 exemples ci-dessus.
field_attach_update
?