Je veux comparer par programme une valeur de champ d'un nœud dans hook_node_update()
. Comment puis-je obtenir les valeurs déjà enregistrées et mises à jour?
Ma suggestion consiste à utiliser un moyen simple, enregistrer le gestionnaire de soumission personnalisé, puis avant de sauvegarder les éléments, comparer la valeur du champ soumis avec la valeur enregistrée.
function yourmodule_form_alter(&$form, &$form_state, $form_id) {
if ($form_id === 'contenttype_node_form') { // Replace contenttype
array_unshift($form['#submit'], 'my_custom_submit_handler')
}
}
function my_custom_submit_handler($form, &$form_state) {
if(!empty($form_state['values']['nid'])){
// Load the current node object
$node = node_load($form_state['values']['nid']);
// Display the current node object's values
// dsm($node);
// Display the submitted values
//dsm($form_state['values']);
if($form_state['values']['yourfield']['und'][0]['value'] != $node->yourfield['und'][0]['value']){
// do what you want here
}
}
}
node_save()
, qui appelle hook_node_update()
, contient le code suivant.
// Load the stored entity, if any.
if (!empty($node->nid) && !isset($node->original)) {
$node->original = entity_load_unchanged('node', $node->nid);
}
Ainsi, chaque fois qu'un nœud est mis à jour, $node->original
contiendra l'objet nœud avant sa mise à jour.
Pour obtenir, par exemple, la valeur du champ champ_exemple avant la mise à jour, vous utilisez le code suivant.
$old_value = field_get_items('node', $node->original, 'field_example');
Pour obtenir la valeur mise à jour pour le même champ, vous utilisez le code suivant.
$new_value = field_get_items('node', $node, 'field_example');