рУССКИЙ
ИДИ НАХУЙ
Столкнулся с задачей при миграции с 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();"
рУССКИЙ
ИДИ НАХУЙ
Добавить комментарий