drupal-header

Combo: Importar y sincronizar productos con Migrate + Drupal commerce + product display desde CSV/XML/JSON

Hola!. Todos los post que escribí hasta ahora sobre Migrate se debieron a que quería hacer esto.

Hoy les presento una clase basada en Migrate para importar productos a Drupal Commerce y crear al mismo tiempo un product display.
NOTA: los múltiples productos para un solo product display lo dejamos para otro día 🙁

Un poco de intro

  • Necesitamos el modulo Commerce Migrate para poder crear productos con Migrate.
  • El machine name del tipo de producto que vamos a importar se llama “gorras
  • El machine name del product display que vamos a importar se llama “display_gorra
  • Indistintamente del formato a importar (xml, json, csv) existen dos clases linkeadas: la que crea el producto y la que crea el porduct display y asigna el producto creado.
  • La fuente de información para cada una de las clases es la misma siempre, solo que cada clase toma lo que necesita.
  • El linkeo entre clases se hace referenciando el machine name que usaste para registrar la clase (machine-name != class name). Si no lo tenés claro lee este post

Bueno vamos a hacer una cosa, en lugar de repetir las dos clases necesarias para la importación por cada tipo de source, voy a dejar aqui solo la que importa CSV, porque el resto de las clases funcionan practicamente igual, y seria repetir en vano.

LAS CLASES

Lo importante aquí es notar que la segunda clase “dice” que depende de la primera al indicar $this->dependencies = array($product_machine_name);. De esta forma, Migrate sabe que la segunda clase no se puede poner a importar hasta que el primer migrador haya sido procesado.
Y para establecer la relación con el producto creado asociamos el field “field_product” al identificador que a su vez lo obtiene de la relación que Migrate estableció en una tabla en la DB (relación identificador del CSV < -> commerce product ID) por medio de ->sourceMigration()

Uso:

La verdad que fui un iluso cuando pensé que por estar linkeadas, las clases se iban a ejecutar en cadena :S La realidad es que siguen siendo migrators independientes con la salvedad de que hay que ejecutarlos en orden:

Y recién ahora podemos invocar al migrator que crea los product display:

That’s all.
Chau!