web-dev-qa-db-fra.com

Comment mettre à jour l'état du nœud?

J'utilise des données de JSON pour créer de nouveaux nœuds ou mettre à jour des champs sur des nœuds existants sur mon Drupal 8. Donc, lorsque j'utilise une méthode pour mettre à jour des nœuds, je dois enregistrer dans le tableau identifiant de nœud des nœuds mis à jour et clés des champs avec des valeurs modifiées dans ce nœud.

Une fois la mise à jour terminée, je dois imprimer un tableau avec tous les nœuds de ce type de contenu, où les champs des nœuds mis à jour doivent avoir un style différent (couleur, arrière-plan, etc.).

Donc, si mon ancien nœud a body = "body1" Et description = "description 1" Et le nouveau nœud a body = "body2" Et description = "description 1" Une fois la mise à jour terminée, je dois obtenir une sortie comme celle-ci:

enter image description here

Voici un exemple:

$node = \Drupal\node\Entity\Node::load($nid);
$node->set("body", 'New body text');
$node->set("description", 'New value');
$node->save();

Toute suggestion?

Remarque : lorsque j'utilise $node->save(); si toutes les valeurs mises à jour sont identiques, rien n'est changé (la date du nœud dans le contenu du panneau d'administration est la même) comme avant la mise à jour), mais si les valeurs sont différentes, je dois stocker l'identifiant du nœud, les clés et les valeurs uniquement des champs modifiés dans le tableau.

7
StevanRS

Pour définir le statut, vous pouvez utiliser la méthode setPublished () :

fonction publique Node :: setPublished

Définit le statut publié d'un nœud.

Paramètres

bool $ published: [~ # ~] true [~ # ~ ] pour définir ce nœud sur publié, [~ # ~] false [~ # ~] pour le définir sur non publié.

Dans ton cas:

$node = \Drupal\node\Entity\Node::load($nid);
$node->set("body", 'New body text');
$node->set("field_name", 'New value');
$node->setPublished(TRUE);
7

Enregistrez-vous une nouvelle révision du nœud mis à jour? Peut-être que vous pouvez utiliser le module diff pour voir les changements entre le nœud actuel et précédent? Ce n'est pas une solution approfondie, mais peut-être un pointeur utile pour vous.

2
absoludo

N'oubliez pas le nœud-> save () ou vos modifications de nœud seront ignorées.

$node = \Drupal\node\Entity\Node::load($nid);
$node->set("body", 'New body text');
$node->set("field_name", 'New value');
$node->setPublished(TRUE);
$node->save();
0
Blaine Lang