web-dev-qa-db-fra.com

Migration d'images et de fichiers

J'essaie de migrer un site Drupal 7 vers un site Drupal 8. J'ai déjà créé mon module pour la migration et j'ai un type de contenu qui a un titre , field_picture et un field_text dans Drupal 7.

Je veux le migrer vers Drupal 8 où field_text = field_description et field_picture est field_image.

J'ai essayé ce qui suit:

id: drupal7_fruit
label: "Test migration"
migration_group: drupal7
source:
  plugin: d7_node
  node_type: fruit
process:
  nid: nid
  vid: vid
  langcode:
    plugin: default_value
    source: language
    default_value: und
  title: title
  uid: node_uid
  status: status
  created: created
  changed: changed
  promote: promote
  sticky: sticky
  revision_uid: revision_uid
  revision_log: log
  revision_timestamp: timestamp
  field_description: field_text
  field_image:
    plugin: iterator
    source: field_picture
    process:
      target_id: fid
      alt: alt
      title: title
      width: width
      height: height
destination:
  plugin: 'entity:node'
  default_bundle: fruit
migration_dependencies: {}

Je pourrais migrer la description et le titre, mais l'image n'est jamais migrée.

Qu'est-ce que je fais mal?

ÉDITER

migrate_plus.migration.drupal7_fruit.yml

    id: drupal7_fruit
label: "Migrate Fruit Content Type"
migration_group: drupal7
source:
  plugin: d7_node
  node_type: fruit
process:
  nid: nid
  vid: vid
  langcode:
    plugin: default_value
    source: language
    default_value: und
  title: title
  uid: node_uid
  status: status
  created: created
  changed: changed
  promote: promote
  sticky: sticky
  revision_uid: revision_uid
  revision_log: log
  revision_timestamp: timestamp
  field_descricao: field_body
destination:
  plugin: 'entity:node'
  default_bundle: fruit
  migration_dependencies:
    optional: drupal7_image

migrate_plus.migration.drupal7_image.yml

 id: drupal7_image
label: Images
migration_tags:
  - Drupal 7
source:
  plugin: d7_file
  constants:
    source_base_path: ''
process:
  fid: fid
  filename: filename
  source_full_path:
    -
      plugin: concat
      delimiter: /
      source:
        - constants/source_base_path
        - filepath
    -
      plugin: urlencode
  uri:
    plugin: file_copy
    source:
      - '@source_full_path'
      - uri
  filemime: filemime
  status: status
  created: timestamp
  changed: timestamp
  uid: uid
destination:
  plugin: entity:file

Modifié ma question parce que @ Berdir dans les commentaires a dit que les images ou les fichiers doivent avoir un fichier de migration différent mais ne peuvent toujours pas migrer les images. J'ai restauré ma base de données de site D8 pour tout recommencer à zéro.

6
Henrique Alho

Merci pour l'aide de Berdir mais j'ai remarqué qu'il me manquait des informations sur mon fichier de migration drupal7_fruit comme les valeurs pour field_image et les dépendances de migration.

La solution de travail:

migrate_plus.migration.drupal7_image.yml

id: drupal7_image
label: Images
migration_group: drupal7
migration_tags:
  - Drupal 7
source:
  plugin: d7_file
  constants:
    source_base_path: '/var/www/username/drupal7/' # Full location of your drupal7 site
process:
  fid: fid
  filename: filename
  source_full_path:
    -
      plugin: concat
      delimiter: /
      source:
        - constants/source_base_path
        - filepath
    -
      plugin: urlencode
  uri:
    plugin: file_copy
    source:
      - '@source_full_path'
      - uri
  filemime: filemime
  status: status
  created: timestamp
  changed: timestamp
  uid: uid
destination:
  plugin: entity:file
migration_dependencies: {}

migration_plus.migration.drupal7_fruit.yml

id: drupal7_fruta
label: "Migrate Fruit Content Type"
migration_group: drupal7
migration_tags:
  - Drupal 7
source:
  plugin: d7_node
  node_type: fruit
process:
  nid: nid
  vid: vid
  langcode:
    plugin: default_value
    source: language
    default_value: und
  title: title
  uid: node_uid
  status: status
  created: created
  changed: changed
  promote: promote
  sticky: sticky
  revision_uid: revision_uid
  revision_log: log
  revision_timestamp: timestamp
  field_description: field_body
  field_image: # Image field name in Drupal 8 site
    plugin: iterator
    source: field_photo # Image field name in Drupal 7 site
    process:
      target_id: fid
      alt: alt
      title: title
      width: width
      height: height
destination:
  plugin: 'entity:node'
  default_bundle: fruit    

migration_dependencies:
  required: 
    - drupal7_image

J'espère que cela pourra aider toute personne ayant le même problème à l'avenir!

8
Henrique Alho

les images et les fichiers sont leur propre type d'entité. La table des nœuds contient simplement l'ID du fichier, essentiellement une référence d'entité.

Vous avez besoin d'une migration de fichier distincte que vous devez d'abord exécuter. Vous pouvez le créer sur la base du modèle de migration d7_file.

Remarque: Si vous migrez le nid et le vid (et le fid) existants, vous devez être certain que vous n'avez aucune donnée existante avec des identifiants conflictuels sur votre site D8 ou vous obtiendrez des conflits. Vous pouvez les laisser de côté, puis il utilisera automatiquement les identifiants d'incrémentation automatique comme lorsque vous créez du contenu manuellement. Mais vous devez ensuite configurer un plug-in de processus de migration pour mapper l'ancien au nouvel identifiant de fichier.

5
Berdir