Estou usando o módulo Migrate para uma migração D7 para D8 e estou escrevendo toda a migração manualmente no código (em vez de usar o módulo de migração D7 interno, pois queria um controle mais granual na migração).
Eu tenho a seguinte estrutura: o site D7 tem um campo de imagem onde as imagens são armazenadas como entidades de arquivo. No site D8, o campo de imagem é uma referência de entidade para uma entidade de Mídia (e a entidade de Mídia, por sua vez, possui um campo de Imagem).
Originalmente, eu tinha o seguinte para minha migração de imagens:
id: image_files
source:
plugin: legacy_images
constants:
source_base_path: http://example.com/
destination:
plugin: 'entity:file'
process:
fid: fid
filename: filename
source_full_path:
-
plugin: concat
delimiter: /
source:
- constants/source_base_path
- uri
-
plugin: urlencode
uri:
plugin: file_copy
source:
- '@source_full_path'
- uri
filemime: filemime
status: status
No arquivo de migração do nó do artigo, eu tinha o seguinte:
'field_article_image/target_id':
plugin: migration
migration: image_files
source: field_article_image
mas percebi que isso não funcionaria. O target_id proveniente da migração de image_files era realmente um ID de entidade de arquivo, não um ID de entidade de mídia. No mundo ideal, eu gostaria de encontrar uma maneira de criar uma terceira migração, que criaria essa etapa intermediária, e migrar entidades de arquivo para entidades de mídia e, em seguida, mapear essa migração para a migração de artigos. No entanto, não consigo descobrir uma boa maneira de fazer isso.
O plano B será simplesmente criar um plug-in de processo para a migração de imagens, que criará manualmente entidades de arquivo, anexará-as a entidades de mídia e passará essa migração para o Articles (isso remove a etapa intermediária). Isso significaria, porém, que, embora as entidades de Mídia possam ser revertidas, as Entidades de Arquivo não podem.
field_media_image
.Apreciei bastante a resposta aceita, mas ela já tinha algumas definições obsoletas e não suportava a publicação de propriedades de imagem alt e title. Assim, aprimorei-o um pouco para dar suporte a isso e funcionar sem problemas com o Drupal 8.6.x. mais recente. Aqui está o código do MediaGenerate.php (a sintaxe apropriada do Yaml está dentro do comentário do documento):
fonte
Como Mídia é um tipo de entidade, você deve criar sua própria migração. Você pode gerar uma nova fonte a partir da tabela de arquivos. Aqui está um exemplo
https://gist.github.com/jibran/8e7cd2319e873858dd49a272227a4fd2
Depois,
migration_lookup
você pode mapear os campos como este.fonte
Se você deseja migrar arquivos no Drupal 8 para entidades de mídia, pode usar este módulo: https://www.drupal.org/project/migrate_file_to_media
Possui um script drush, que cria automaticamente os campos de referência de mídia. Além disso, ele detecta imagens duplicadas usando um hash binário. E suporta traduções.
fonte