Drupal 9 image field migration

Faced up with migration form Drupal 7 to 8(9). Migration process was processed with standart module "upgrade" from UI. The task was to migrate an old image field to media.

Solution was found with hook_update.

First of all check if the image is already present in DB. It could be by the previous runs etc

$medias_thumb = \Drupal::entityTypeManager()

->getStorage('media')

->loadByProperties([

'bundle' => [$convert['media_bundle']],

'name' => $node->{$old_field}->entity->label()]

);


if (!empty($medias_thumb)) {

$new_field = $convert['new_node_image_field'];

$node->{$new_field}->entity = reset($medias_thumb);

$node->save();


\Drupal::logger('image_to_media')->notice(

sprintf('Reuse IMAGE_THUMB for node "%s".', $node->getTitle())

);

}

 

If there is no image in the DB load it and create a copy in new field.

if (!empty($medias)) {

$media = reset($medias);

$file_id = $media->field_media_image->target_id;

$file = File::load($file_id);

$new_field = $convert['new_node_image_field'];

$node->{$new_field}->entity = _mymodule_create_media_image_entity(

$convert['media_bundle'],

$file,

$node->{$old_field}->alt

);

$node->save();


$media_ids_remove[] = $media->id();

\Drupal::logger('image_to_media')->notice(

sprintf('Reuse media for node "%s".', $node->getTitle())

);

}

 

Full version of script located here https://gist.github.com/onesixromcom/d8be7e86c25821aea30a6fb5f380ddf2

To run this hook use drush command:

drush php-eval "module_load_install('mymodule_custom'); mymodule_custom_update_8801();"

Коментувати

Вміст цього поля є приватним і не буде доступний широкому загалу.
  • Не дозволено жодних HTML теґів.
CAPTCHA
                            .o    oooooooooo.                   o8o 
.d88 `888' `Y8b `"'
.oooo.o .oooo. .d'888 888 888 .ooooo oo oooo
d88( "8 `P )88b .d' 888 888oooo888' d88' `888 `888
`"Y88b. .oP"888 88ooo888oo 888 `88b 888 888 888
o. )88b d8( 888 888 888 .88P 888 888 888
8""888P' `Y888""8o o888o o888bood8P' `V8bod888 888
888. 888
8P' .o. 88P
" `Y888P
Уведіть код, зображений у стилі Ascii-Арт.
Мета цього запитання — довести, що ви є реальним відвідувачем і запобігти автоматизованим розсиланням спаму.