web-dev-qa-db-fra.com

Comment mettre à jour une valeur de champ pour un nœud?

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?

22
hpn
$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!

42
kyvour

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.

10
zaibatsu
$node = node_load($nid); 
$field_language = field_language('node', $node, 'field_myfield');
$node->field['field_myfield'][$field_language][0]['value'] = 1;
node_save($node);
6
lenni

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

4
milkovsky

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

2
Niccolo