Je souhaite mettre à jour la valeur d'un champ de nœud lorsqu'un nœud est mis à jour.
Testé en utilisant le code mentionné ici Mise à jour par programme d'un nœud Drupal 8
use Drupal\node\Entity\Node;
function hello_world_entity_presave(Drupal\Core\Entity\EntityInterface $entity) {
$check = \Drupal::routeMatch()->getParameter('node');
if ($check) {
$node = Node::load($check->nid->value);
$node->title->value = 'testing'; //set value for field
$node->save();
}
}
Mais cela n'a pas fonctionné. J'obtiens une erreur 500 après avoir enregistré le nœud. J'ai également essayé de retirer l'instruction if et de spécifier un identifiant de nœud$node = Node::load(1);
J'ai également essayé d'utiliser la mise à jour d'un nœud / entité par programme dans Drupal 8
use Drupal\node\Entity\Node;
function hello_world_node_update(Drupal\node\NodeInterface $node) {
$node = Node::load(1);
$node->set("title", 'New value'); // also tried $node->setTitle('The new Title');
$node->save();
}
mais pas de chance non plus.
De plus, j'ai essayé d'utiliser différents hooks entity_presave, entity_update, node_update, mais cela n'a fait aucune différence.
Il s'agit d'une autre variante de l'utilisation du crochet que vous avez essayé d'utiliser à l'origine.
Je pense que le problème avec votre code est que vous essayez de charger une nouvelle instance du nœud, mais vous devez utiliser le nœud fourni comme paramètre
$entity
:Éditer:
Ajout de l'instruction use au code.
la source
The website encountered an unexpected error. Please try again later.
use Drupal\node\NodeInterface;
code n'interrompt plus automatiquement le site, mais après avoir enregistré le nœud, j'obtiens l'erreur 500 comme si je recevais ma question et les journaux n'enregistrent rien à ce sujet.Les titres dans Drupal 8 ne sont pas définis comme des champs standard; ils ont leur propre fonction. À utiliser
$node->setTitle('New Title');
pour un nœud ou$entity->setLabel('New Title');
pour une entité générique. Voir Node :: setTitle pour plus d'informations.la source