{"id":33003,"date":"2025-05-26T15:16:00","date_gmt":"2025-05-26T13:16:00","guid":{"rendered":"https:\/\/www.codemotion.com\/magazine\/?p=33003"},"modified":"2025-05-26T15:16:02","modified_gmt":"2025-05-26T13:16:02","slug":"migrando-a-drupal-una-guia-practica","status":"publish","type":"post","link":"https:\/\/www.codemotion.com\/magazine\/es\/backend-es\/migrando-a-drupal-una-guia-practica\/","title":{"rendered":"Migrando a Drupal: una gu\u00eda pr\u00e1ctica"},"content":{"rendered":"\n<p>En el art\u00edculo anterior de esta serie hicimos un recorrido por<a href=\"https:\/\/www.codemotion.com\/magazine\/es\/?p=32990\"> los conceptos claves y la arquitectura base de Drupal<\/a>. Ahora abordaremos una de las tareas m\u00e1s desafiantes \u2014y tambi\u00e9n m\u00e1s comunes\u2014 en proyectos reales: migrar contenido desde otros sistemas a Drupal. <\/p>\n\n\n\n<p>Ya sea desde un CMS heredado, una base de datos externa o incluso un conjunto de hojas de c\u00e1lculo, la necesidad de conservar estructura, integridad y relaciones entre datos es cr\u00edtica.<\/p>\n\n\n\n<p>Este art\u00edculo te guiar\u00e1 a trav\u00e9s de los fundamentos del sistema de migraci\u00f3n de Drupal, con un enfoque eminentemente pr\u00e1ctico: veremos ejemplos reales, buenas pr\u00e1cticas y enlaces que puedes explorar por tu cuenta para poner en marcha tu primer proceso de migraci\u00f3n.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-que-es-el-sistema-de-migracion-de-drupal\">\u00bfQu\u00e9 es el sistema de migraci\u00f3n de Drupal?<\/h2>\n\n\n\n<p>Desde Drupal 8, el n\u00facleo del sistema incluye el m\u00f3dulo <a href=\"https:\/\/www.drupal.org\/docs\/migrate-api\/migrate-overview\">Migrate<\/a>, que ofrece una arquitectura robusta y extensible para importar datos desde m\u00faltiples or\u00edgenes hacia entidades de Drupal (como nodos, usuarios, taxonom\u00edas o archivos).<\/p>\n\n\n\n<p>Se basa en tres conceptos clave:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Source<\/strong>: el origen de los datos (CSV, base de datos, XML, JSON, etc.).<\/li>\n\n\n\n<li><strong>Process<\/strong>: c\u00f3mo se transforman o adaptan los datos al nuevo modelo.<\/li>\n\n\n\n<li><strong>Destination<\/strong>: la entidad de Drupal donde se almacenar\u00e1n los datos.<\/li>\n<\/ul>\n\n\n\n<p>Esta arquitectura permite importar de forma declarativa (v\u00eda YAML) o program\u00e1tica, y es compatible tanto con migraciones simples como con escenarios complejos.<\/p>\n\n\n\n<p>El ecosistema de m\u00f3dulos enfocados a tareas de migraci\u00f3n es muy amplio, pero hay dos m\u00f3dulos que no te pueden faltar:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li> <a href=\"https:\/\/dgo.to\/migrate_plus\">Migrate Plus<\/a>: extiende el soporte de nativo de Migrate agregando plugins muy \u00fatiles de or\u00edgenes, procesamiento y almacenamiento de los datos.<\/li>\n\n\n\n<li><a href=\"https:\/\/dgo.to\/migrate_tools\">Migrate Tools<\/a>: provee una interfaz y comandos Drush para gestionar y ejecutar las migraciones.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1280\" height=\"797\" src=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/05\/pexels-mahmoud-yahyaoui-32072167.jpg\" alt=\"Muestra una bandada de flamencos volando, en plena migraci\u00f3n.\n\nCr\u00e9ditos a Mahmoud Yahyaoui  en pexels.com\" class=\"wp-image-33185\" srcset=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/05\/pexels-mahmoud-yahyaoui-32072167.jpg 1280w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/05\/pexels-mahmoud-yahyaoui-32072167-300x187.jpg 300w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/05\/pexels-mahmoud-yahyaoui-32072167-1024x638.jpg 1024w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/05\/pexels-mahmoud-yahyaoui-32072167-768x478.jpg 768w\" sizes=\"auto, (max-width: 1280px) 100vw, 1280px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-el-punto-de-partida-analizando-el-origen\">El punto de partida: analizando el origen<\/h2>\n\n\n\n<p>Antes de escribir una sola l\u00ednea de configuraci\u00f3n, el primer paso es <strong>entender la estructura del sistema de origen<\/strong>. \u00bfTienes acceso a una base de datos? \u00bfO te han pasado un Excel? \u00bfEs un CMS antiguo que exporta en XML?<\/p>\n\n\n\n<p>Algunos ejemplos t\u00edpicos:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/www.droptica.com\/blog\/how-migrate-wordpress-drupal-step-step-guide\/\">Migrar desde WordPress<\/a>: puedes usar el plugin WP All Export para generar archivos XML o CSV y luego procesarlos desde Drupal.<\/li>\n\n\n\n<li><a href=\"https:\/\/www.drupal.org\/drupalorg\/blog\/its-time-to-migrate-from-drupal-7-let-me-show-you-how-to-start\">Desde Drupal 7<\/a>: existe soporte completo para migraciones automatizadas de entidades b\u00e1sicas.<\/li>\n\n\n\n<li><a href=\"https:\/\/www.drupal.org\/docs\/8\/api\/migrate-api\/migrate-source-plugins\/migrating-data-from-a-csv-source\">Desde archivos CSV<\/a>: uno de los casos m\u00e1s comunes, ideal para comenzar.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-escribiendo-una-migracion-simple\">Escribiendo una migraci\u00f3n simple<\/h2>\n\n\n\n<p>Supongamos que tenemos un archivo CSV con una lista de art\u00edculos y queremos convertirlos en nodos del tipo <em>&#8220;Noticia&#8221;<\/em>. Lo primero es definir el archivo <code>.yml<\/code> correspondiente (por ejemplo, <code>migrate_plus.migration.articulos.yml<\/code>).<\/p>\n\n\n\n<p>Aqu\u00ed un ejemplo de una migraci\u00f3n de CSV:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">id: articulos_csv\nlabel: Art\u00edculos desde CSV\nmigration_group: migracion_csv\nsource:\n  plugin: csv\n  path: modules\/custom\/migracion_csv\/data\/articulos.csv\n  header_row_count: 1\n  keys:\n    - id\n  column_names:\n    - id\n    - titulo\n    - cuerpo\nprocess:\n  title: titulo\n  body\/value: cuerpo\ndestination:\n  plugin: entity:node\n  default_bundle: noticia<\/code><\/span><\/pre>\n\n\n<p>Este archivo indica c\u00f3mo leer el archivo CSV, c\u00f3mo procesar sus columnas y a qu\u00e9 tipo de entidad en Drupal volcar el resultado.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-migraciones-mas-avanzadas-relaciones-y-transformaciones\">Migraciones m\u00e1s avanzadas: relaciones y transformaciones<\/h2>\n\n\n\n<p>En proyectos reales, rara vez los datos son planos. Es com\u00fan tener que relacionar contenidos con categor\u00edas, referenciar usuarios o archivos, o simplemente limpiar y transformar datos en el proceso para ajustarlos a nuestro modelo.<\/p>\n\n\n\n<p>Para esto, puedes usar <a href=\"https:\/\/www.drupal.org\/docs\/8\/api\/migrate-api\/migrate-process-plugins\">plugins de transformaci\u00f3n<\/a>. Algunos ejemplos comunes son:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>get<\/code>: para acceder a un campo concreto.<\/li>\n\n\n\n<li><code>concat<\/code>: para combinar cadenas.<\/li>\n\n\n\n<li><code>callback<\/code>: para aplicar funciones personalizadas.<\/li>\n\n\n\n<li><code>migration_lookup<\/code>: para enlazar con otros registros previamente importados.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-ejecutar-depurar-repetir\">Ejecutar, depurar, repetir<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><\/li>\n<\/ul>\n\n\n\n<p>Una vez que tienes definida tu migraci\u00f3n en archivos <code>.yml<\/code>, es hora de ponerla en marcha. Para esto, Drupal ofrece una integraci\u00f3n muy s\u00f3lida con <strong>Drush<\/strong>, la herramienta de consola por excelencia en el ecosistema Drupal.<\/p>\n\n\n\n<p>Los comandos m\u00e1s habituales para gestionar migraciones son:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><code>drush migrate:status<\/code><\/pre>\n\n\n\n<p>Este comando muestra un resumen de todas las migraciones disponibles, su estado (pendiente, importada, fallida) y si est\u00e1n habilitadas.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><code>drush migrate:import articulos_csv<\/code><\/pre>\n\n\n\n<p>Ejecuta la migraci\u00f3n con el ID indicado. Si todo est\u00e1 correcto, ver\u00e1s c\u00f3mo se importan los registros uno por uno.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><code>drush migrate:rollback articulos_csv<\/code><\/pre>\n\n\n\n<p>Revierte los registros que fueron importados, \u00fatil para probar diferentes configuraciones sin llenar la base de datos de duplicados.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><code>drush migrate:reset-status articulos_csv<\/code><\/pre>\n\n\n\n<p>A veces una migraci\u00f3n se queda &#8220;bloqueada&#8221; si se interrumpe a mitad de ejecuci\u00f3n. Este comando la desbloquea para volver a intentarlo.<\/p>\n\n\n\n<p>Durante la ejecuci\u00f3n puedes encontrarte errores como:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Columnas faltantes.<\/li>\n\n\n\n<li>Tipos de dato incorrectos.<\/li>\n\n\n\n<li>Referencias a entidades inexistentes.<\/li>\n<\/ul>\n\n\n\n<p>En esos casos, contar el m\u00f3dulo <a href=\"https:\/\/dgo.to\/migrate_devel\">Migrate Devel<\/a> para obtener m\u00e1s informaci\u00f3n detallada del proceso, incluyendo los valores procesados, los mapeos de ID, y los errores espec\u00edficos de cada fila.<\/p>\n\n\n\n<p>Y si est\u00e1s desarrollando tus propios <strong>plugins de transformaci\u00f3n<\/strong>, es muy \u00fatil combinar Drush con herramientas de depuraci\u00f3n como <code>xdebug<\/code>, o incluso <code>watchdog<\/code> y <code>dpm()<\/code> para imprimir valores en tiempo de ejecuci\u00f3n.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-estrategias-para-proyectos-reales\">Estrategias para proyectos reales<\/h2>\n\n\n\n<p>En entornos reales, la migraci\u00f3n rara vez es un proceso de \u201cuna sola vez\u201d. Los datos evolucionan, los errores aparecen con el tiempo, y los or\u00edgenes pueden ser inconsistentes o inestables. Por eso, m\u00e1s que ejecutar una migraci\u00f3n, lo que necesitas es <strong>dise\u00f1ar un proceso de migraci\u00f3n mantenible y repetible<\/strong>.<\/p>\n\n\n\n<p>Aqu\u00ed algunos enfoques y buenas pr\u00e1cticas:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Desarrollo iterativo<\/strong>: comienza con un conjunto de datos reducido y campos esenciales. Haz pruebas frecuentes, documenta decisiones y permite a los usuarios revisar los primeros resultados antes de importar todo.<\/li>\n\n\n\n<li><strong>Migraciones encadenadas<\/strong>: divide el contenido en migraciones l\u00f3gicas: usuarios, taxonom\u00edas, nodos, archivos, relaciones. Usa <code>migration_lookup<\/code> para conectar entre ellas. Esto permite aislar errores y reusar componentes.<\/li>\n\n\n\n<li><strong>Importaciones incrementales<\/strong>: si el sistema de origen sigue activo, puedes dise\u00f1ar migraciones que s\u00f3lo actualicen los registros nuevos o modificados, usando claves primarias (<code>keys<\/code>) y campos de control como <code>updated_at<\/code>.<\/li>\n\n\n\n<li><strong>Entornos separados<\/strong>: ejecuta la migraci\u00f3n primero en local, luego en staging, y finalmente en producci\u00f3n. Mant\u00e9n los archivos YAML versionados con Git y crea scripts automatizados que documenten cada paso.<\/li>\n\n\n\n<li><strong>Control de calidad<\/strong>: valida los resultados importados con tests manuales y automatizados. Verifica relaciones, integridad de campos y comportamiento editorial.<\/li>\n\n\n\n<li><strong>Mantenimiento<\/strong>: si tu sitio necesita importar contenido peri\u00f3dicamente, considera usar m\u00f3dulos como <a href=\"https:\/\/dgo.to\/migrate_cron\">Migrate Cron<\/a> o tareas personalizadas que reimporten desde el origen con un cron programado.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-migrando-que-es-gerundio\">Migrando, que es gerundio<\/h2>\n\n\n\n<p>Migrar contenido a Drupal puede parecer complejo, pero el sistema <strong>Migrate<\/strong> ofrece una base s\u00f3lida y flexible para abordar cualquier escenario. Lo importante es entender la fuente, planificar bien los datos de destino y apoyarse en la comunidad: hay documentaci\u00f3n, m\u00f3dulos y ejemplos disponibles para casi todos los casos imaginables.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>En el art\u00edculo anterior de esta serie hicimos un recorrido por los conceptos claves y la arquitectura base de Drupal. Ahora abordaremos una de las tareas m\u00e1s desafiantes \u2014y tambi\u00e9n m\u00e1s comunes\u2014 en proyectos reales: migrar contenido desde otros sistemas a Drupal. Ya sea desde un CMS heredado, una base de datos externa o incluso&#8230; <a class=\"more-link\" href=\"https:\/\/www.codemotion.com\/magazine\/es\/backend-es\/migrando-a-drupal-una-guia-practica\/\">Read more<\/a><\/p>\n","protected":false},"author":328,"featured_media":28342,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_editorskit_title_hidden":false,"_editorskit_reading_time":0,"_editorskit_is_block_options_detached":false,"_editorskit_block_options_position":"{}","_uag_custom_page_level_css":"","_genesis_hide_title":false,"_genesis_hide_breadcrumbs":false,"_genesis_hide_singular_image":false,"_genesis_hide_footer_widgets":false,"_genesis_custom_body_class":"","_genesis_custom_post_class":"","_genesis_layout":"","footnotes":""},"categories":[10606,10644,10648,10654],"tags":[],"collections":[12939,13315,11860],"class_list":{"0":"post-33003","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-backend-es","8":"category-desarrollo-web","9":"category-lenguajes-de-programacion","10":"category-open-source-es","11":"collections-desarrollo-web-es","12":"collections-drupal","13":"collections-php","14":"entry"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.9 (Yoast SEO v26.9) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Migrando a Drupal: una gu\u00eda pr\u00e1ctica - Codemotion Magazine<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.codemotion.com\/magazine\/es\/backend-es\/migrando-a-drupal-una-guia-practica\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Migrando a Drupal: una gu\u00eda pr\u00e1ctica\" \/>\n<meta property=\"og:description\" content=\"En el art\u00edculo anterior de esta serie hicimos un recorrido por los conceptos claves y la arquitectura base de Drupal. Ahora abordaremos una de las tareas m\u00e1s desafiantes \u2014y tambi\u00e9n m\u00e1s comunes\u2014 en proyectos reales: migrar contenido desde otros sistemas a Drupal. Ya sea desde un CMS heredado, una base de datos externa o incluso&#8230; Read more\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.codemotion.com\/magazine\/es\/backend-es\/migrando-a-drupal-una-guia-practica\/\" \/>\n<meta property=\"og:site_name\" content=\"Codemotion Magazine\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Codemotion.Italy\/\" \/>\n<meta property=\"article:published_time\" content=\"2025-05-26T13:16:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-05-26T13:16:02+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/06\/DALL\u00b7E-2024-06-24-14.11.28-8-bit-nerdy-aesthetic-depicting-a-developer-running-a-code-review.-The-developer-is-sitting-at-a-desk-with-a-computer-surrounded-by-coding-books-a-.webp\" \/>\n\t<meta property=\"og:image:width\" content=\"1792\" \/>\n\t<meta property=\"og:image:height\" content=\"1024\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/webp\" \/>\n<meta name=\"author\" content=\"Dennis Torres Rodriguez\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@CodemotionIT\" \/>\n<meta name=\"twitter:site\" content=\"@CodemotionIT\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Dennis Torres Rodriguez\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/es\/backend-es\/migrando-a-drupal-una-guia-practica\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/es\/backend-es\/migrando-a-drupal-una-guia-practica\/\"},\"author\":{\"name\":\"Dennis Torres Rodriguez\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/86fad8f766535345f8a09d7959bbc5b4\"},\"headline\":\"Migrando a Drupal: una gu\u00eda pr\u00e1ctica\",\"datePublished\":\"2025-05-26T13:16:00+00:00\",\"dateModified\":\"2025-05-26T13:16:02+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/es\/backend-es\/migrando-a-drupal-una-guia-practica\/\"},\"wordCount\":1064,\"publisher\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/es\/backend-es\/migrando-a-drupal-una-guia-practica\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/06\/DALL\u00b7E-2024-06-24-14.11.28-8-bit-nerdy-aesthetic-depicting-a-developer-running-a-code-review.-The-developer-is-sitting-at-a-desk-with-a-computer-surrounded-by-coding-books-a-.webp\",\"articleSection\":[\"Backend\",\"Desarrollo web\",\"Lenguajes de programaci\u00f3n\",\"Open source\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/es\/backend-es\/migrando-a-drupal-una-guia-practica\/\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/es\/backend-es\/migrando-a-drupal-una-guia-practica\/\",\"name\":\"Migrando a Drupal: una gu\u00eda pr\u00e1ctica - Codemotion Magazine\",\"isPartOf\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/es\/backend-es\/migrando-a-drupal-una-guia-practica\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/es\/backend-es\/migrando-a-drupal-una-guia-practica\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/06\/DALL\u00b7E-2024-06-24-14.11.28-8-bit-nerdy-aesthetic-depicting-a-developer-running-a-code-review.-The-developer-is-sitting-at-a-desk-with-a-computer-surrounded-by-coding-books-a-.webp\",\"datePublished\":\"2025-05-26T13:16:00+00:00\",\"dateModified\":\"2025-05-26T13:16:02+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/es\/backend-es\/migrando-a-drupal-una-guia-practica\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.codemotion.com\/magazine\/es\/backend-es\/migrando-a-drupal-una-guia-practica\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/es\/backend-es\/migrando-a-drupal-una-guia-practica\/#primaryimage\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/06\/DALL\u00b7E-2024-06-24-14.11.28-8-bit-nerdy-aesthetic-depicting-a-developer-running-a-code-review.-The-developer-is-sitting-at-a-desk-with-a-computer-surrounded-by-coding-books-a-.webp\",\"contentUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/06\/DALL\u00b7E-2024-06-24-14.11.28-8-bit-nerdy-aesthetic-depicting-a-developer-running-a-code-review.-The-developer-is-sitting-at-a-desk-with-a-computer-surrounded-by-coding-books-a-.webp\",\"width\":1792,\"height\":1024,\"caption\":\"Code reviews, revisione del codice\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/es\/backend-es\/migrando-a-drupal-una-guia-practica\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.codemotion.com\/magazine\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Backend\",\"item\":\"https:\/\/www.codemotion.com\/magazine\/es\/backend-es\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Migrando a Drupal: una gu\u00eda pr\u00e1ctica\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#website\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/\",\"name\":\"Codemotion Magazine\",\"description\":\"We code the future. Together\",\"publisher\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.codemotion.com\/magazine\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#organization\",\"name\":\"Codemotion\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png\",\"contentUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png\",\"width\":225,\"height\":225,\"caption\":\"Codemotion\"},\"image\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/Codemotion.Italy\/\",\"https:\/\/x.com\/CodemotionIT\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/86fad8f766535345f8a09d7959bbc5b4\",\"name\":\"Dennis Torres Rodriguez\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/9bd13561d39f288f4ae529b6c913853f5f0e1d4f72eee52278038a184b56a214?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/9bd13561d39f288f4ae529b6c913853f5f0e1d4f72eee52278038a184b56a214?s=96&d=mm&r=g\",\"caption\":\"Dennis Torres Rodriguez\"},\"description\":\"Soy un profesional del desarrollo de software con trayectoria consolidada en proyectos de gesti\u00f3n de contenidos y comercio electr\u00f3nico. Me apasiona transformar ideas en experiencias digitales eficientes y escalables. He contribuido a iniciativas de c\u00f3digo abierto y he participado como ponente y formador en conferencias, compartiendo buenas pr\u00e1cticas y experiencias. Adem\u00e1s, colaboro activamente en comunidades online como Stack Overflow y Drupal.org, ayudando a resolver desaf\u00edos t\u00e9cnicos y fomentando el aprendizaje colectivo.\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/author\/d70rr3s\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Migrando a Drupal: una gu\u00eda pr\u00e1ctica - Codemotion Magazine","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.codemotion.com\/magazine\/es\/backend-es\/migrando-a-drupal-una-guia-practica\/","og_locale":"en_US","og_type":"article","og_title":"Migrando a Drupal: una gu\u00eda pr\u00e1ctica","og_description":"En el art\u00edculo anterior de esta serie hicimos un recorrido por los conceptos claves y la arquitectura base de Drupal. Ahora abordaremos una de las tareas m\u00e1s desafiantes \u2014y tambi\u00e9n m\u00e1s comunes\u2014 en proyectos reales: migrar contenido desde otros sistemas a Drupal. Ya sea desde un CMS heredado, una base de datos externa o incluso&#8230; Read more","og_url":"https:\/\/www.codemotion.com\/magazine\/es\/backend-es\/migrando-a-drupal-una-guia-practica\/","og_site_name":"Codemotion Magazine","article_publisher":"https:\/\/www.facebook.com\/Codemotion.Italy\/","article_published_time":"2025-05-26T13:16:00+00:00","article_modified_time":"2025-05-26T13:16:02+00:00","og_image":[{"width":1792,"height":1024,"url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/06\/DALL\u00b7E-2024-06-24-14.11.28-8-bit-nerdy-aesthetic-depicting-a-developer-running-a-code-review.-The-developer-is-sitting-at-a-desk-with-a-computer-surrounded-by-coding-books-a-.webp","type":"image\/webp"}],"author":"Dennis Torres Rodriguez","twitter_card":"summary_large_image","twitter_creator":"@CodemotionIT","twitter_site":"@CodemotionIT","twitter_misc":{"Written by":"Dennis Torres Rodriguez","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.codemotion.com\/magazine\/es\/backend-es\/migrando-a-drupal-una-guia-practica\/#article","isPartOf":{"@id":"https:\/\/www.codemotion.com\/magazine\/es\/backend-es\/migrando-a-drupal-una-guia-practica\/"},"author":{"name":"Dennis Torres Rodriguez","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/86fad8f766535345f8a09d7959bbc5b4"},"headline":"Migrando a Drupal: una gu\u00eda pr\u00e1ctica","datePublished":"2025-05-26T13:16:00+00:00","dateModified":"2025-05-26T13:16:02+00:00","mainEntityOfPage":{"@id":"https:\/\/www.codemotion.com\/magazine\/es\/backend-es\/migrando-a-drupal-una-guia-practica\/"},"wordCount":1064,"publisher":{"@id":"https:\/\/www.codemotion.com\/magazine\/#organization"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/es\/backend-es\/migrando-a-drupal-una-guia-practica\/#primaryimage"},"thumbnailUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/06\/DALL\u00b7E-2024-06-24-14.11.28-8-bit-nerdy-aesthetic-depicting-a-developer-running-a-code-review.-The-developer-is-sitting-at-a-desk-with-a-computer-surrounded-by-coding-books-a-.webp","articleSection":["Backend","Desarrollo web","Lenguajes de programaci\u00f3n","Open source"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.codemotion.com\/magazine\/es\/backend-es\/migrando-a-drupal-una-guia-practica\/","url":"https:\/\/www.codemotion.com\/magazine\/es\/backend-es\/migrando-a-drupal-una-guia-practica\/","name":"Migrando a Drupal: una gu\u00eda pr\u00e1ctica - Codemotion Magazine","isPartOf":{"@id":"https:\/\/www.codemotion.com\/magazine\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.codemotion.com\/magazine\/es\/backend-es\/migrando-a-drupal-una-guia-practica\/#primaryimage"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/es\/backend-es\/migrando-a-drupal-una-guia-practica\/#primaryimage"},"thumbnailUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/06\/DALL\u00b7E-2024-06-24-14.11.28-8-bit-nerdy-aesthetic-depicting-a-developer-running-a-code-review.-The-developer-is-sitting-at-a-desk-with-a-computer-surrounded-by-coding-books-a-.webp","datePublished":"2025-05-26T13:16:00+00:00","dateModified":"2025-05-26T13:16:02+00:00","breadcrumb":{"@id":"https:\/\/www.codemotion.com\/magazine\/es\/backend-es\/migrando-a-drupal-una-guia-practica\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.codemotion.com\/magazine\/es\/backend-es\/migrando-a-drupal-una-guia-practica\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/es\/backend-es\/migrando-a-drupal-una-guia-practica\/#primaryimage","url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/06\/DALL\u00b7E-2024-06-24-14.11.28-8-bit-nerdy-aesthetic-depicting-a-developer-running-a-code-review.-The-developer-is-sitting-at-a-desk-with-a-computer-surrounded-by-coding-books-a-.webp","contentUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/06\/DALL\u00b7E-2024-06-24-14.11.28-8-bit-nerdy-aesthetic-depicting-a-developer-running-a-code-review.-The-developer-is-sitting-at-a-desk-with-a-computer-surrounded-by-coding-books-a-.webp","width":1792,"height":1024,"caption":"Code reviews, revisione del codice"},{"@type":"BreadcrumbList","@id":"https:\/\/www.codemotion.com\/magazine\/es\/backend-es\/migrando-a-drupal-una-guia-practica\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.codemotion.com\/magazine\/"},{"@type":"ListItem","position":2,"name":"Backend","item":"https:\/\/www.codemotion.com\/magazine\/es\/backend-es\/"},{"@type":"ListItem","position":3,"name":"Migrando a Drupal: una gu\u00eda pr\u00e1ctica"}]},{"@type":"WebSite","@id":"https:\/\/www.codemotion.com\/magazine\/#website","url":"https:\/\/www.codemotion.com\/magazine\/","name":"Codemotion Magazine","description":"We code the future. Together","publisher":{"@id":"https:\/\/www.codemotion.com\/magazine\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.codemotion.com\/magazine\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.codemotion.com\/magazine\/#organization","name":"Codemotion","url":"https:\/\/www.codemotion.com\/magazine\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/","url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png","contentUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png","width":225,"height":225,"caption":"Codemotion"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/Codemotion.Italy\/","https:\/\/x.com\/CodemotionIT"]},{"@type":"Person","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/86fad8f766535345f8a09d7959bbc5b4","name":"Dennis Torres Rodriguez","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/9bd13561d39f288f4ae529b6c913853f5f0e1d4f72eee52278038a184b56a214?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/9bd13561d39f288f4ae529b6c913853f5f0e1d4f72eee52278038a184b56a214?s=96&d=mm&r=g","caption":"Dennis Torres Rodriguez"},"description":"Soy un profesional del desarrollo de software con trayectoria consolidada en proyectos de gesti\u00f3n de contenidos y comercio electr\u00f3nico. Me apasiona transformar ideas en experiencias digitales eficientes y escalables. He contribuido a iniciativas de c\u00f3digo abierto y he participado como ponente y formador en conferencias, compartiendo buenas pr\u00e1cticas y experiencias. Adem\u00e1s, colaboro activamente en comunidades online como Stack Overflow y Drupal.org, ayudando a resolver desaf\u00edos t\u00e9cnicos y fomentando el aprendizaje colectivo.","url":"https:\/\/www.codemotion.com\/magazine\/author\/d70rr3s\/"}]}},"featured_image_src":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/06\/DALL\u00b7E-2024-06-24-14.11.28-8-bit-nerdy-aesthetic-depicting-a-developer-running-a-code-review.-The-developer-is-sitting-at-a-desk-with-a-computer-surrounded-by-coding-books-a--600x400.webp","featured_image_src_square":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/06\/DALL\u00b7E-2024-06-24-14.11.28-8-bit-nerdy-aesthetic-depicting-a-developer-running-a-code-review.-The-developer-is-sitting-at-a-desk-with-a-computer-surrounded-by-coding-books-a--600x600.webp","author_info":{"display_name":"Dennis Torres Rodriguez","author_link":"https:\/\/www.codemotion.com\/magazine\/author\/d70rr3s\/"},"uagb_featured_image_src":{"full":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/06\/DALL\u00b7E-2024-06-24-14.11.28-8-bit-nerdy-aesthetic-depicting-a-developer-running-a-code-review.-The-developer-is-sitting-at-a-desk-with-a-computer-surrounded-by-coding-books-a-.webp",1792,1024,false],"thumbnail":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/06\/DALL\u00b7E-2024-06-24-14.11.28-8-bit-nerdy-aesthetic-depicting-a-developer-running-a-code-review.-The-developer-is-sitting-at-a-desk-with-a-computer-surrounded-by-coding-books-a--150x150.webp",150,150,true],"medium":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/06\/DALL\u00b7E-2024-06-24-14.11.28-8-bit-nerdy-aesthetic-depicting-a-developer-running-a-code-review.-The-developer-is-sitting-at-a-desk-with-a-computer-surrounded-by-coding-books-a--300x171.webp",300,171,true],"medium_large":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/06\/DALL\u00b7E-2024-06-24-14.11.28-8-bit-nerdy-aesthetic-depicting-a-developer-running-a-code-review.-The-developer-is-sitting-at-a-desk-with-a-computer-surrounded-by-coding-books-a--768x439.webp",768,439,true],"large":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/06\/DALL\u00b7E-2024-06-24-14.11.28-8-bit-nerdy-aesthetic-depicting-a-developer-running-a-code-review.-The-developer-is-sitting-at-a-desk-with-a-computer-surrounded-by-coding-books-a--1024x585.webp",1024,585,true],"1536x1536":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/06\/DALL\u00b7E-2024-06-24-14.11.28-8-bit-nerdy-aesthetic-depicting-a-developer-running-a-code-review.-The-developer-is-sitting-at-a-desk-with-a-computer-surrounded-by-coding-books-a--1536x878.webp",1536,878,true],"2048x2048":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/06\/DALL\u00b7E-2024-06-24-14.11.28-8-bit-nerdy-aesthetic-depicting-a-developer-running-a-code-review.-The-developer-is-sitting-at-a-desk-with-a-computer-surrounded-by-coding-books-a-.webp",1792,1024,false],"small-home-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/06\/DALL\u00b7E-2024-06-24-14.11.28-8-bit-nerdy-aesthetic-depicting-a-developer-running-a-code-review.-The-developer-is-sitting-at-a-desk-with-a-computer-surrounded-by-coding-books-a--100x100.webp",100,100,true],"sidebar-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/06\/DALL\u00b7E-2024-06-24-14.11.28-8-bit-nerdy-aesthetic-depicting-a-developer-running-a-code-review.-The-developer-is-sitting-at-a-desk-with-a-computer-surrounded-by-coding-books-a--180x128.webp",180,128,true],"genesis-singular-images":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/06\/DALL\u00b7E-2024-06-24-14.11.28-8-bit-nerdy-aesthetic-depicting-a-developer-running-a-code-review.-The-developer-is-sitting-at-a-desk-with-a-computer-surrounded-by-coding-books-a--896x504.webp",896,504,true],"archive-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/06\/DALL\u00b7E-2024-06-24-14.11.28-8-bit-nerdy-aesthetic-depicting-a-developer-running-a-code-review.-The-developer-is-sitting-at-a-desk-with-a-computer-surrounded-by-coding-books-a--400x225.webp",400,225,true],"gb-block-post-grid-landscape":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/06\/DALL\u00b7E-2024-06-24-14.11.28-8-bit-nerdy-aesthetic-depicting-a-developer-running-a-code-review.-The-developer-is-sitting-at-a-desk-with-a-computer-surrounded-by-coding-books-a--600x400.webp",600,400,true],"gb-block-post-grid-square":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/06\/DALL\u00b7E-2024-06-24-14.11.28-8-bit-nerdy-aesthetic-depicting-a-developer-running-a-code-review.-The-developer-is-sitting-at-a-desk-with-a-computer-surrounded-by-coding-books-a--600x600.webp",600,600,true]},"uagb_author_info":{"display_name":"Dennis Torres Rodriguez","author_link":"https:\/\/www.codemotion.com\/magazine\/author\/d70rr3s\/"},"uagb_comment_info":0,"uagb_excerpt":"En el art\u00edculo anterior de esta serie hicimos un recorrido por los conceptos claves y la arquitectura base de Drupal. Ahora abordaremos una de las tareas m\u00e1s desafiantes \u2014y tambi\u00e9n m\u00e1s comunes\u2014 en proyectos reales: migrar contenido desde otros sistemas a Drupal. Ya sea desde un CMS heredado, una base de datos externa o incluso&#8230;&hellip;","lang":"es","_links":{"self":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/33003","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/users\/328"}],"replies":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/comments?post=33003"}],"version-history":[{"count":2,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/33003\/revisions"}],"predecessor-version":[{"id":33187,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/33003\/revisions\/33187"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/media\/28342"}],"wp:attachment":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/media?parent=33003"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/categories?post=33003"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/tags?post=33003"},{"taxonomy":"collections","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/collections?post=33003"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}