Quiero actualizar el valor de un campo de nodo cuando se actualiza un nodo.
Intenté usar el código mencionado aquí Actualización programática de un nodo 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();
}
}
Pero no funcionó. Me sale un error 500 después de guardar el nodo. También intenté sacar la declaración if y especificar un id de nodo$node = Node::load(1);
También intenté usar la actualización de un nodo / entidad mediante programación en 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();
}
pero tampoco suerte.
Además, intenté usar diferentes ganchos entity_presave, entity_update, node_update, pero no hice ninguna diferencia.
Esta es otra variación con el uso del gancho que originalmente intentó usar.
Creo que el problema con su código es que intenta cargar una nueva instancia del nodo, pero debe usar el nodo que se proporciona como parámetro
$entity
:Editar:
Se agregó la declaración de uso al código.
fuente
The website encountered an unexpected error. Please try again later.
use Drupal\node\NodeInterface;
código ya no rompe automáticamente el sitio, pero después de guardar el nodo, recibo el error 500 como si estuviera recibiendo mi pregunta y los registros no registran nada al respecto.Los títulos en Drupal 8 no se configuran como campos estándar; Tienen su propia función. Úselo
$node->setTitle('New Title');
para un nodo o$entity->setLabel('New Title');
para una entidad genérica. Ver Nodo :: setTitle para más información.fuente