Guía básica para migrar datos a Drupal 8

Publicado por el 20 de Abril de 2017

MTech se especializa en migraciones y actualizaciones de Drupal. El propietario de MTech y arquitecto líder, Lucas Hedding, es un mantenedor del sistema de migración de Drupal Core y se presentará este miércoles en Drupal Migrations en DrupalCon Baltimore.

El escenerio que usaremos en este post serán algunos datos de perfil para una persona. Su nombre y apellido, fecha de nacimiento, país de residencia. Con este tipo de datos, tenemos una buena mezcla de datos de source que incluye datos de términos, fechas y algunas imágenes.

El país de residencia es un término de taxonomía o un campo de referencia de entidad. Migramos ese plugin de proceso entity_generate usando el módulo de  contribución migrate_plus. Para obtener más información sobre un método simple para migrar datos de términos simples, consulte Entity Lookup & Generate plugins de procesos de migración.

La fecha de nacimiento es un campo de fecha. Un plugin de proceso para esto acaba de ser aceptado en 8.3.x. Para obtener más detalles sobre cómo migrar a los campos de fecha y date_range vea Migración de datos CSV a rangos de tiempo de fecha.

La foto del perfil es una migración de imágenes. Para obtener más detalles sobre cómo migrar imágenes, consulte ¿Cómo hacer una migración de csv file con imágenes?

Y por último, no lo incluimos en este ejemplo de modelo de datos, pero incluso puede ser complicado migrar datos a campos de párrafo. Para eso consulta  Migración de datos CSV a párrafos.

Y finalmente, aquí está una revisión rápida de cómo funciona todo el sistema de migración Drupal, en una cáscara de nuez. La estructura básica de una migración de contenido tiene tres puntos principales: origen, proceso y destino.

  • Origen (Source): Aquí se especifica el complemento donde la migración recopilará los datos.
source:
  plugin: csv
  path: modules/custom/custom_migrate/assets/csv/file.csv
  • Proceso (Process): En este punto se describe, propiedad por propiedad, cómo se va a construir el destino a partir de los datos de origen. El valor de la clave de proceso es una matriz asociativa, donde cada clave es una propiedad de destino. Los valores asociados a cada clave describen cómo se crea el valor de destino. La mayoría de los campos se pueden asignar directamente; Sólo especificamos el destino sin ninguna transformación de datos.
field_first_name: first_name
  • Destino (Destination): Aquí los datos procesados ​​(ajustados y manipulados) se almacenan o guardan en un destino. El destino siempre tiene un plugin de complemento obligatorio. 

Un ejemplo sencillo:

destination:
  plugin: 'entity:node'

Un proyecto completo de migración DEMO está en nuestro repositorio git. Pero si no quieres descargarlo, aquí tienes una copia completa del "process" simplificado. 

#migrate_plus.migration.person_csv.yml
dependencies:
  enforced:
    module:
      - custom_migrate
id: person_csv
label: Person csv migration
migration_tags:
  - CSV
source:
  plugin: csv
  path: /artifacts/people.csv
  header_row_count: 1
  keys:
    - id
  column_names:
    0:
      id: Identifier
    1:
      first_name: First Name
    2:
      last_name: Last Name
    3:
      email: Email Address
    4:
      country: Country
    5:
      ip_address: IP Address
    6:
      date_of_birth: Date of Birth
    7:
      filename: Profile photo
process:
  type:
    plugin: default_value
    default_value: person
  title:
    -
      plugin: concat
      source:
        - first_name
        - last_name
      delimiter: ' '
    -
      plugin: substr
      length: 255
  field_first_name:
    plugin: substr
    length: 60
    source: first_name
  field_last_name:
    plugin: substr
    length: 60
    source: last_name
  field_email: email
  field_country:
    plugin: entity_generate
    source: country
  field_ip_address:
    plugin: substr
    length: 16
    source: ip_address
  field_date_of_birth:
    plugin: format_date
    from_format: 'm/d/Y'
    to_format: 'Y-m-d'
    source: date_of_birth
  field_image/target_id:
    plugin: migration
    migration: person_file_csv
    source: filename
  field_image/alt:
      plugin: concat
      source:
        - first_name
        - last_name
      delimiter: ' '
destination:
  plugin: entity:node
migration_dependencies:
  required:
    - person_file_csv
  optional: {}
#migrate_plus.migration.person_csv.yml
dependencies:
  enforced:
    module:
      - custom_migrate
id: person_file_csv
label: Person file csv migration
migration_tags:
  - CSV
source:
  plugin: csv
  path: /artifacts/people.csv
  header_row_count: 1
  keys:
    - filename
  column_names:
    7:
      filename: Profile photo
  constants:
    source_base_path: /artifacts/photos
    destination: 'public://photos'
process:
  source_full_path:
    -
      plugin: concat
      delimiter: /
      source:
        - constants/source_base_path
        - filename
    -
      plugin: urlencode
  destination:
    -
      plugin: concat
      delimiter: /
      source:
        - constants/destination
        - filename
    -
      plugin: urlencode
  filename: filename
  uri:
    plugin: file_copy
    source:
      - '@source_full_path'
      - '@destination'
destination:
  plugin: entity:file
migration_dependencies:
  required: {}
  optional: {}

Si usted está en DrupalCon esta semana, echa un vistazo a Migrate with the Maintainer's Lab el miércoles y pregunta a Lucas cualquier cosa que tenga sobre la guía. Él es siempre muy amable y le gusta ayudar.

 

¿Está buscando ayuda para una migración o actualización de Drupal? Independientemente de la complejidad del sitio o de los datos, MTech puede ayudarle a pasar de un CMS privado o actualizarlo a la última versión: Drupal 8.

Escríbanos sobre su proyecto y nos pondremos en contacto con usted dentro de 48 horas.