Exportar e importar nodos entre sitios web con estructura similar en Drupal 7

Rojomorgan Drupal migracion de nodos en drupal 7
Exportar e importar nodos entre sitios web con estructura similar en Drupal 7

¿Alguna vez te has encontrado en la tesitura de mover miles y miles de contenidos de un drupal a otro, necesitando un proceso organizado que te solucionara la papeleta? Hoy es un buen día para aprender cómo. O al menos como lo hemos hecho en Rojomorgan sin acabar transfiriendo infinidad de nodos a mano de un drupal a otro, lo cual podría considerarse una tortura tipificada actualmente en la legislación internacional.

Durante uno de los proyectos llevados a cabo, hemos tenido que realizar un movimiento de datos entre drupales bastante masivo ( del orden de más de 5000 nodos). Cuando los sitios web manejan este volumen de datos y estos quieren ser exportados a otro sitio de características similares, normalmente por rediseño o clonación de la estructura de datos manteniendo ciertas características de apariencia, tener un método para mover los datos de manera consistente y rápida se convierte en primordial.

Este proceso consta de dos procesos claramente separados: Exportar los datos desde el drupal origen y exportar estos mismo en destino. 

 

Exportar

 

Este es el primer paso a la hora  de realizar el movimiento de nodos. Si bien existen diversas alternativas para drupal, la que nos ha parecido más consistente es Views Data Export (https://www.drupal.org/project/views_data_export). Hemos seleccionado para exportar datos este módulo fundamentalmente por lo robusto que es: Nos da la opción de  exportar cualquier campo (con  la salvedad de los metatags)  dentro de los tipos de contenido en prácticamente cualquier formato amigable para el usuario ya sea csv, doc, xml o xls con la extensión php para parsear documentos de excel. 

Qué necesitamos en origen

  • Ctools
  • Views (Recomendable activar también Views UI)
  • Views Data Export

Pasos para exportar

1) Habilitamos los módulos al uso.
Como es habitual, si no están activos, debemos habilitarlos para poder usarlos.

2) Creamos una nueva vista con los campos que queramos incluir en la exportación.
Si estáis familiarizados con el módulo views, nada diferente. Creamos una vista al uso.

3) Añadimos un nuevo display de tipo Data Export

4) Agregamos los campos de los cuales queramos realizar la exportación

5) Configuramos una ruta para llamar a la vista. Observa que si no marcamos la ruta, recibiremos un error.

Opcional: editar el tipo de separador y archivo que queremos:

NOTA IMPORTANTE: Debemos hacer que la vista muestre TODOS los elementos y sin paginador si lo que queremos es exportar todo el contenido.

6) Ejecutar la vista para extraer el archivo. Introducimos la url configurada en  el paso 5. Se nos descargará un archivo csv (en este caso, pero podemos elegir las extensiones antes vistas).

Caso especial: Imágenes

Para exportar las imágenes necesitaremos instalar el módulo Image Url Formatter. ( https://www.drupal.org/project/image_url_formatter ) , ya que lo que exportaremos sera el URI del campo imágen.

Para ello, añadimos la imágen como campo normal a la vista y posteriormente en Formatter seleccionamos Image URL y como formato URI, por ser un formato  de referencia independiente del servidor donde despleguemos.

Posteriormente, tendremos que copiar los archivos de imágen , respetando la ruta con respecto al origen al drupal destino, para que la URI sea coherente y la imágen pueda ser referenciada.

Al importar el campo, el proceso es exactamente igual que un campo de texto, sólo que habrá que poner como objetivo la URI.

Et voila!

NOTA: views_data_export no ha  permitido exportar metatags. En el caso de tener que exportarlos, existen alternativas como  https://www.drupal.org/project/metatag_import_export_csv para exportarlos en un csv independiente y luego  añadirlos.

Paso intermedio: En ocasiones, necesitaremos manipular los datos incluyendo más campos al csv o retirando , o bien ordenándolos. En este punto intermedio que  estamos entre la importación y la exportación es el punto de modificar esta información. 

Existe un módulo llamado Feeds Tamper ( https://www.drupal.org/project/feeds_tamper ), el cual te permitirá modificar la información durante la importación. Es una opción, aunque por lo general hemos preferido la manipulación de datos en csv a a antigua usanza: mediante hojas de cálculo.

 

Importar

El segundo paso del proceso. En este caso, el módulo más robusto para eso es Feeds: https://www.drupal.org/project/feeds

Módulos requeridos en destino:

  • Feeds
  • Ctools
  • Job Scheduler

Activar los módulos necesarios
Feeds, Feed importer, Feed Admin UI, Feed import base

1) Crear un importador

2) Modificar la configuración del importador: Por lo general, las modificaciones será pocas para una importación a un drupal vacio con un csv con coma como separador.

 

Basic Settings
Aquí podremos editar nombre y descripción del importador. Igualmente podremos configurar el formulario de importación ( recomendado dejar formulario por defecto - Standalone Form ) Y la frecuencia de importación si se quiere tener un feed desde el cual el importador vaya bebiendo y actualizando. Si es una importación de cero, activar Import on Submission.

Fetcher

Tipo de importación que realizaremos. O bien subiendo un archivo mediante un gestor o bien dando una ruta en la cua se encuentra el archivo. Para una subida única , file upload se recomienda.

Si elegimos File Upload
Podremos configurar las extensiones permitidas para la subid del archivo. Por seguridad, recomendaría seleccionar Immediately delete uploaded file after import. Y el directorio de subida al gusto del consumidor.

Parser
Tipo de parseador que  vamos a usar para leer el archivo y extraer la info. En este caso, eligiríamos CSV.

Procesador
Seleccionar el procesador adaptado al caso del contenido que vamos a exportar. Por lo general exportamos nodos. Si bien tenemos la posibilidad de exportar tanto términos de taxonomía como usuarios del sitio.

Configuración del Procesador de Nodos
Toda la configuración relativa al procesador  de nodos. En Bundle deberemos seleccionar el tipo de contenido destino, que  debe de tener una correlación en campos similar en tipo a la del origen.

Por lo demás , configurar qué hacer en caso de encontrar nuevos nodos y nodos existentes. Especial atención en el punto de qué hacer cuando nodos previamente importados no están. Si se trata de un feed recargable en el tiempo, configurar este punto al gusto.

Igualmente prestar atención sobre el usuario de  los nodos importados y configurar tiempo de expiración de los nodos , si procede.

Mapeo de Campos
Tal vez el punto más importante. En  el caso de XML, los campos de origen estan predefinidos, pero en el caso de CSV , debemos marcar la equivalencia entre los campos origen (los que están en el CSV) con el nombre de los campos destino ( Los del Tipo de Contenido que recogerá el contenido del CSV).

Para el origen, debemos ser explícitos a la hora de escribir los campos en la caja de texto. Para el destino, bastará con seleccionar el campo en el desplegable, toda vez que ya hemos configurado el tipo de contenido que recibirá los datos.

Destacar que si  importamos algún campo relacionado con una taxonomía, podremos mantener la relación término - nodo si seleccionamos la opción de mantener el Term Id del origen, lo cual es importantísimo para grandes exportaciones.

 

Realizar la importación

Tenemos la opción de ir al link en content o ir directamente a la ruta /import:

 

Seleccionamos achivos (Y delimitador si hubiese cambiado en algún momento) e Importamos:

Y Voila! Tendremos nuestra importación lista para ser visitada , editada o lo que buenamente queramos.

 

11 Julio 2017 - 3:57pm
Total de votos: 5

Añadir nuevo comentario

Plain text

  • No se permiten etiquetas HTML.
  • Las direcciones de las páginas web y las de correo se convierten en enlaces automáticamente.
  • Saltos automáticos de líneas y de párrafos.
CAPTCHA
Esta pregunta es para probar si eres o no un visitante humano.