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.