Je souhaite modifier la valeur d'un champ pour un nœud. J'ai utilisé le code suivant:
$node = node_load($nid); // $nid is the function's parameter
$node->field['field_myfield'][$node->language][0]['value'] = 1;
node_save($node);
Le problème est que $node->language
Renvoie es
tandis que dans print_r($node)
c'est und
. Pourquoi $node->language
Est différent de ce qui se trouve dans le tableau $ node et comment puis-je l'obtenir?
$node = node_load($nid);
$node_wrapper = entity_metadata_wrapper('node', $node);
$node_wrapper->field_myfield->set(1);
$node_wrapper->save();
L'encapsuleur de métadonnées d'entité est un excellent moyen de définir ou de lire les valeurs des champs dans le nœud!
Essayez la fonction field_attach_update()
.
$node = node_load($nid); // $nid is the function's parameter
$node->field['field_myfield'][LANGUAGE_NONE][0]['value'] = 1;
field_attach_update('node', $node);
Il mettra à jour la valeur du champ et il fonctionne mieux que node_save
.
$node = node_load($nid);
$field_language = field_language('node', $node, 'field_myfield');
$node->field['field_myfield'][$field_language][0]['value'] = 1;
node_save($node);
Si vous souhaitez mettre à jour uniquement la valeur du champ (sans mettre à jour les métadonnées de noeud sur l'heure mise à jour, les révisions), utilisez la fonction field_attach_update()
.
Exemple:
$node = node_load($nid);
$field_language = field_language('node', $node, 'field_myfield');
$node->field_fieldname[$field_language][0]['value'] = 'some value';
field_attach_update('node', $node);
Parfois, en outre, vous devrez peut-être réinitialiser le cache statique du nœud avec resetCache(array($nid))
:
entity_get_controller('node')->resetCache(array($node->nid));
Source: Enregistrement des champs du nœud sans enregistrer le nœud lui-même
Je viens de l'implémenter et j'ai constaté que ce code fonctionnait pour moi.
$node = node_load($nid);
if (isset($node)) {
$field_language = field_language('node', $node, 'field_myfield');
$node->field_fieldname[$field_language][0]['value'] = 'some value';
node_save($node);
}
Notez que lors de la mise à jour de field_fieldname, j'ai trouvé que l'utilisation de ceci à la ligne 4
$node->field['field_myfield'][0]['value'] = 'some value';
n'a pas marché.