I'm trying to add a hero image and text when a node goes from unpublished to published. The things include:
- Add an image from my media library to a media field on the node
- Add a page title to the node, drawing upon a field already saved on the node
I'm attempting to build a hook on hook_node_update() but it's not working. I'm not sure why.
The code I am using, part of the running_event_adding_header.module file, is the following.
namespace Drupal\Core\Field\EntityReferenceFieldItemList;
namespace Drupal\node\Entity;
function running_event_adding_header_node_update(Drupal\Core\Entity\EntityInterface $entity) {
if ($entity->bundle() !== 'event') {
return;
}
if ($entity->bundle() === 'event' && $entity->get('field_event_type')->getString() != '30') {
return;
}
if ($entity->get('moderation_state')->getString() === 'published') {
if ($entity->get('field_hero_image')->isEmpty()) {
$media = Media::load(53);
$entity->set('field_hero_image', $media);
}
if ($entity->get('field_tagline')->isEmpty()) {
$entity->set('field_tagline', $entity->label());
}
$entity->save();
}
}
Updated code (29 July).
Per @sonfd's recommendation, this uses hook_node_presave(), but is still not changing the node pages:
<?php
namespace Drupal\Core\Field\EntityReferenceFieldItemList;
namespace Drupal\node\Entity;
function running_event_add_default_node_presave(Drupal\node\NodeInterface $entity) {
if ($entity->bundle() === 'event' && $entity->get('field_event_type')->toString()=== '30') {
if ($entity->get('field_hero_tagline')->isEmpty()) {
$entity->set('field_hero_tagline', $entity->label());
}
if ($entity->get('field_hero_image')->isEmpty()) {
$media = Media::load(53);
$entity->set('field_hero_image', $media);
}
}
}