рУССКИЙ
ИДИ НАХУЙ
Drupal 9 image field migration

Столкнулся с задачей при миграции с 7го на 8й (9) Drupal. Миграция производилась стандартным модулем upgrade из админки. Задача состояла в том, чтоб перенести все изображения из поля image на использование модулем media.

Нашлось решение через hook_update.

Для начала, проверяем, возможно картинка уже есть в базе с прошлых запусков или по-другим причинам.

$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 (!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())

);

}

 

Полная версия скрипта доступна по ссылке https://gist.github.com/onesixromcom/d8be7e86c25821aea30a6fb5f380ddf2

Для запуска этого хука через драш можно использовать комманду:

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

Добавить комментарий

Содержимое данного поля является приватным и не предназначено для показа.
  • HTML-теги не обрабатываются и показываются как обычный текст
 ooooooooo.                 .oooooo.    oooooooooooo  oooo               .o8  
`888 `Y88. d8P' `Y8b `888' `8 `888 "888
888 .d88' .oooo. 888 888 888 .oo. .oooo888
888ooo88P' `P )88b 888 888oooo8 888P"Y88b d88' `888
888 .oP"888 888 888 " 888 888 888 888
888 d8( 888 `88b ooo 888 888 888 888 888
o888o `Y888""8o `Y8bood8P' o888o o888o o888o `Y8bod88P"


Введите код, изображенный в стиле ASCII-арт.
рУССКИЙ
ИДИ НАХУЙ