Chcę zaktualizować wartość pola węzła, gdy węzeł zostanie zaktualizowany.
Próbowałem przy użyciu kodu wymienionego tutaj Programowo aktualizując węzeł 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();
}
}
ale to nie zadziałało. Po zapisaniu węzła pojawia się błąd 500. Próbowałem także wyjąć instrukcję if i podać identyfikator węzła$node = Node::load(1);
Próbowałem także użyć aktualizacji programowej węzła / encji w 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();
}
ale też nie ma szczęścia.
Ponadto próbowałem użyć różnych haczyków entity_presave, entity_update, node_update, ale nie zrobiłem żadnej różnicy.
To kolejna odmiana z użyciem haka, którego pierwotnie próbowałeś użyć.
Myślę, że problem z twoim kodem polega na tym, że próbujesz załadować nową instancję węzła, ale powinieneś użyć węzła podanego jako parametr
$entity
:Edytować:
Dodano instrukcję use do kodu.
źródło
The website encountered an unexpected error. Please try again later.
use Drupal\node\NodeInterface;
kodu nie powoduje już automatycznego zepsucia witryny, ale po zapisaniu węzła pojawia się błąd 500, jak w odpowiedzi na moje pytanie, a dzienniki nic nie logują.Tytuły w Drupal 8 nie są ustawione jak standardowe pola; mają swoją funkcję. Użyj
$node->setTitle('New Title');
dla węzła lub$entity->setLabel('New Title');
dla ogólnej jednostki. Aby uzyskać więcej informacji, zobacz Node :: setTitle .źródło