---
url: 'https://dxpr.com/es/hc/documentation/learn-dxpr-builder/getting-started/migration-1x-to-3x'
title: 'Migración desde DXPR Builder 1.x o 2.x | DXPR'
author:
  name: Jurriaan
  url: 'https://dxpr.com/users/jurriaan'
date: '2026-10-24T00:14:10+00:00'
updated: '2026-10-24T09:09:48+00:00'
copyright: 'Copyright DXPR. All rights reserved.'
type: article
summary: 'DXPR Builder 3.x se actualiza en su sitio desde cualquier versión 1.x o 2.x. Composer cambia el código, y drush updatedb ejecuta los hooks de actualización en dxpr_builder.install que convierten configuración y contenido. Esta página lista qué hacen esos hooks, qué cambió para código personalizado, y cómo verificar el resultado. Las fechas de versión vienen de etiquetas git; consulta Versiones anteriores.'
tags:
  - 'Verhuizen vanaf een andere builder'
image: 'https://dxpr.com/themes/custom/dxpr_com/images/dxpr-share-card.jpg'
published: true
og:
  site_name: DXPR
  updated_time: '2026-10-24T09:09:48+0000'
  'image:alt': 'DXPR, powered by Drupal: AI-powered Drupal for marketers.'
schema:
  '@context': 'https://schema.org'
  '@graph':
    -
      mainEntity: {  }
    -
      '@type': TechArticle
      headline: 'Migración desde DXPR Builder 1.x o 2.x'
      description: 'DXPR Builder 3.x se actualiza en su sitio desde cualquier versión 1.x o 2.x. Composer cambia el código, y drush updatedb ejecuta los hooks de actualización en dxpr_builder.install que convierten configuración y contenido. Esta página lista qué hacen esos hooks, qué cambió para código personalizado, y cómo verificar el resultado. Las fechas de versión vienen de etiquetas git; consulta Versiones anteriores.'
      image:
        '@type': ImageObject
        url: 'https://dxpr.com/themes/custom/dxpr_com/images/dxpr-share-card.jpg'
        width: '1200'
        height: '630'
      datePublished: '2026-10-24T00:14:10+0000'
      dateModified: '2026-10-24T09:09:48+0000'
      author:
        '@type': Organization
        '@id': 'https://dxpr.com/#organization'
        name: DXPR
        url: 'https://dxpr.com/'
        logo:
          '@type': ImageObject
          url: 'https://dxpr.com/themes/custom/dxpr_com/dxpr-logo-dark.svg'
          width: '1348'
          height: '501'
      publisher:
        '@type': Organization
        '@id': 'https://dxpr.com/#organization'
        name: DXPR
        url: 'https://dxpr.com/'
        logo:
          '@type': ImageObject
          url: 'https://dxpr.com/themes/custom/dxpr_com/dxpr-logo-dark.svg'
          width: '1348'
          height: '501'
      mainEntityOfPage: 'https://dxpr.com/es/hc/documentation/learn-dxpr-builder/getting-started/migration-1x-to-3x'
      articleSection: 'Verhuizen vanaf een andere builder'
    -
      '@type': WebPage
      '@id': 'https://dxpr.com/es/hc/documentation/learn-dxpr-builder/getting-started/migration-1x-to-3x'
      description: 'DXPR Builder 3.x se actualiza en su sitio desde cualquier versión 1.x o 2.x. Composer cambia el código, y drush updatedb ejecuta los hooks de actualización en dxpr_builder.install que convierten configuración y contenido. Esta página lista qué hacen esos hooks, qué cambió para código personalizado, y cómo verificar el resultado. Las fechas de versión vienen de etiquetas git; consulta Versiones anteriores.'
      breadcrumb:
        '@type': BreadcrumbList
        itemListElement:
          -
            '@type': ListItem
            position: 1
            name: Inicio
            item: 'https://dxpr.com/es'
      publisher:
        '@type': Organization
        '@id': 'https://dxpr.com/#organization'
        name: DXPR
      inLanguage: es
---
[Help Center](/es/hc)/[Documentation](/es/hc/documentation) /[Learn DXPR Builder](/hc/documentation/learn-dxpr-builder) /[Start here](/hc/documentation/learn-dxpr-builder/start-here) /[Verhuizen vanaf een andere builder](/hc/documentation/learn-dxpr-builder/migration) # Migración desde DXPR Builder 1.x o 2.x.

 Learn DXPR BuilderStart hereVerhuizen vanaf een andere builder

   ## In this guide

 Related guides

- [Actualiza DXPR Builder](/es/hc/documentation/learn-dxpr-builder/getting-started/updating)
- [Registro de cambios](/es/hc/documentation/learn-dxpr-builder/getting-started/changelog)
- [Referencia de configuración](/es/hc/documentation/learn-dxpr-builder/reference/config-reference)

DXPR Builder 3.x se actualiza en su sitio desde cualquier versión 1.x o 2.x. Composer cambia el código, y `drush updatedb` ejecuta los hooks de actualización en `dxpr_builder.install` que convierten configuración y contenido. Esta página lista qué hacen esos hooks, qué cambió para código personalizado, y cómo verificar el resultado. Las fechas de versión vienen de etiquetas git; consulta [Versiones anteriores](/es/hc/documentation/learn-dxpr-builder/getting-started/changelog-older).

## Historial de versiones en breve

| Serie | Drupal | Notas |
|---|---|---|
| 7.x-1.x | Drupal 7 | Vendido como Glazed Builder, renombrado después. |
| 1.x (8.x-1.x) | Drupal 8 y 9 | Nombre máquina de módulo `dxpr_builder` desde la primera versión 1.x en mayo de 2020. Última versión 1.8.8. |
| 2.x | Drupal 9.3 a 11 | CKEditor 5, soporte de módulo Key, primeras funciones de IA. Última versión 2.8.1. |
| 3.x | Drupal 10.2 y 11 | Solo Bootstrap 5, módulo Key requerido, migraciones de contenido, generación de páginas e imágenes con IA. |

El nombre máquina no cambió entre 1.x y 3.x. Contenido que aún lleva marcado de la era Glazed debe migrarse en 1.x o 2.x antes de actualizar; 3.x ya no reescribe el nombre Glazed (ver abajo).

## Requisitos antes de empezar

- Drupal 10.2 o posterior, o Drupal 11 (`core_version_requirement` en `dxpr_builder.info.yml`).
- El módulo Key. Es una dependencia dura en 3.x; `dxpr_builder_update_9020()` lo instala si `drush updatedb` lo encuentra ausente.
- Una clave de producto emitida para DXPR Builder 2.0.0 o posterior. Claves sin claim `dxpr_tier` son rechazadas por el formulario de ajustes.
- Un tema que provee Bootstrap 5, o la opción de carga lateral **Bootstrap 5**. La carga lateral de Bootstrap 3 y 4 ya no existe.

## Pasos de migración

1. Haz una copia de seguridad de la base de datos y archivos:

    ```bash
    drush sql:dump --result-file=backup.sql

    ```
2. Actualiza el código con Composer. 3.x se publica ahora como preversiones, así que permítelas:

    ```bash
    composer require 'drupal/dxpr_builder:^3.0@beta' --with-all-dependencies

    ```
3. Ejecuta los hooks de actualización y reconstruye cachés:

    ```bash
    drush updatedb
    drush cache:rebuild

    ```

    Varios hooks 3.x procesan cada valor de campo DXPR Builder en lotes (ver abajo). En sitios grandes tardan minutos, no segundos.
4. Abre `/admin/dxpr_studio/dxpr_builder/settings` y comprueba la sección **License**. Tras la actualización 9020 el **Storage method** es **Key module** y la **Key** es `DXPR Builder JWT` (`dxpr_builder_jwt`).
5. Comprueba **Sideload Bootstrap files** en la misma página. Sitios que tenían Bootstrap 3 o 4 seleccionado están ahora en **Bootstrap 5**.
6. Abre `/admin/dxpr_studio/dxpr_builder/ai_settings` y decide si los tres interruptores de IA, que vienen activados por defecto, deben seguir activos.
7. Visita páginas que usan DXPR Builder y confirma que se generan y editan bien.

## Qué hacen los hooks de actualización

Los hooks numerados 8005 a 8025 salieron en 1.x. Un sitio 1.x ejecuta todo desde 8026 en adelante; un sitio 2.8.0 o 2.8.1 ejecuta 8040 y 9014 en adelante. Los nombres de función son `dxpr_builder_update_NNNN()`.

### Añadidos en 2.x (se ejecutan al venir de 1.x)

| Hook | Qué hace |
|---|---|
| 8026 | Actualiza el almacenamiento central de usuarios de DXPR Builder. |
| 8027 | Añade el bloque de info de licencia y una columna "DXPR Builder User" a la vista People. |
| 8028 | Crea la tabla `dxpr_lock` para bloqueo de contenido. |
| 8029 | Añade el bloque de licencias al panel de licencias de usuario. |
| 8030 | Cambia el ajuste Bootstrap tras eliminar la opción "Bootstrap 3 Light". |
| 8031 | Activa el bloque de info de licencia donde se instaló desactivado. |
| 8032 | Quita usuarios bloqueados del almacenamiento de licencias. |
| 8033 | Inicializa `drm_last_contact`. |
| 8034 | Instala el campo de usuario `dxpr_user_is_disavowed` y las acciones de usuario avow/disavow. |
| 8035 | Inicializa el ajuste `hide_reminders`. |
| 8036 | Migra nombres de botones de barra CKEditor 4 en perfiles a CKEditor 5. |
| 8037 | Añade un estilo de imagen predeterminado para imágenes de carga rápida. |
| 8038 | Limpia cachés para registrar los servicios de integración del módulo Key. |
| 8039 | Repara estilos de imagen con ajustes `image_scale_and_crop` incompletos. |
| 9007 | Crea los vocabularios `ai_tone_of_voice` y `ai_agent_commands` con términos predeterminados. |
| 9008 | Pone `ai_enabled` en true y quita la clave vieja `ai_page_enabled`. |
| 9009 | Mueve `drm_last_contact` de configuración a estado. |
| 9010 | Limpia cachés. |
| 9011 | Activa los botones AI Assistant y AI Tone of Voice en cada perfil. |
| 9012 | Restaura `ai_page_enabled` con true por defecto. |
| 9013 | Define los valores predeterminados de filtrado de salida de IA (`ai_output_allowed_domains`). |
| 9015 | Añade `ai_image_enabled` con true por defecto. |

### Añadidos en 3.x (se ejecutan al venir de 1.x o 2.x)

| Hook | Qué hace |
|---|---|
| 8040 | Normaliza `bootstrap` a `bs5`; los valores `1` (Bootstrap 3) y `bs4` se reescriben. |
| 9014 | Lotes: convierte marcado Owl Carousel en contenido al carrusel Bootstrap (`src/Migration/OwlCarouselMigration.php`). |
| 9016 | Añade `ai_user_model_selection` con true por defecto. |
| 9017 | Lotes: convierte contadores circulares circliful a marcado de progreso Bootstrap (`CircleCounterMigration.php`). |
| 9018 | Lotes: convierte marcado heredado de barra de progreso a la estructura de progreso Bootstrap (`ProgressBarMigration.php`). |
| 9020 | Instala el módulo Key, mueve `json_web_token` a la entidad Key `dxpr_builder_jwt`, pone `api_key_storage` en `key` y limpia el valor en texto claro. |
| 9021 | Rellena la propiedad `type` de plantillas de usuario desde su marcado. |
| 9022 | Lotes: añade `data-entity-type` y `data-entity-uuid` a enlaces internos `/node/N` (`EntityLinkMigration.php`). |
| 9023 | Lotes: repara formato de texto, resumen y deltas borrados que la actualización 9022 perdió en campos `text_with_summary`. |
| 9024 | Lotes: enriquece enlaces internos con alias igual que 9022 (`AliasLinkMigration.php`). |
| 9025 | Limpia `tone_of_voice_vocabulary` cuando apunta a un vocabulario que ya no existe. |
| 9026 | Limpia un `json_web_token` en texto claro quedado en los ajustes cuando la clave vive en una entidad Key. |

No hay actualización 9019.

### Migraciones de contenido

3.x ejecuta migraciones de contenido solo en lotes; ya no hay conversión en tiempo de generación. La página de estado de migración (`/admin/dxpr_studio/dxpr_builder/migration-status`) y el informe de estado listan contenido pendiente. Los hooks de actualización de arriba lo migran, y también las acciones **Run now** y **Run all pending migrations** en esa página. Las migraciones son servicios etiquetados `dxpr_builder.content_migration` (`dxpr_builder.services.yml`). Un lote que registra fallos no se marca completo; los elementos fallidos se registran y quedan pendientes.

La reescritura de cadenas `glazed_to_dxpr` que 1.x y 2.x aplicaban al generar se eliminó. El nombre Glazed se abandonó con 1.0.0 en mayo de 2020 y se asume que todo el contenido de la era Glazed y Carbide ya fue migrado por esas versiones. La reescritura era un reemplazo simple de cadenas. En sitios cuyo contenido solo menciona Glazed (artículos de soporte, enlaces de documentación), habría reescrito prosa y roto enlaces en lugar de migrar marcado. Sitios que aún guardan nombres de clase Glazed en contenido guardado deben ejecutar primero la versión 2.x.

## Cambios para código personalizado

### Formato de campo

El id del formato de campo es `dxpr_builder_text` (etiqueta "DXPR Builder", `src/Plugin/Field/FieldFormatter/DxprBuilderFormatter.php`), sin cambios desde 1.x. Tiene un ajuste, `profile`, que está vacío para el valor predeterminado basado en rol o un id de perfil. Comprueba que cada campo del constructor aún usa este formato en su presentación; la reparación de la actualización 9023 se limita a campos que lo hacen.

### Hooks

`dxpr_builder.api.php` documenta los hooks 3.x. Renombra los de Glazed Builder así:

| Hook de Glazed Builder | Hook de DXPR Builder 3.x |
|---|---|
| `hook_glazed_builder_classes()` | `hook_dxpr_builder_classes_alter(array &$dxpr_builder_classes)` |
| `hook_glazed_builder_buttons_folders()` | `hook_dxpr_builder_element_buttons_folders_alter(array &$dxpr_element_buttons_folders)` |
| `hook_glazed_builder_elements_folders()` | Eliminado; sin hook de reemplazo. |
| none | `hook_dxpr_builder_icon_sets_alter(array &$icon_sets)`, nuevo. Los conjuntos de iconos se declaran en archivos `MODULE.dxpr_icon_sets.yml`. |

### CSS y clases de utilidades

CSS personalizado que apunta nombres de clase Glazed debe usar los nombres DXPR, como `dxpr-theme-util`, `panel-dxpr` y `dxpr-builder`. Las clases de utilidades expuestas en el editor se proveen con `hook_dxpr_builder_classes_alter()`.

### Configuración y despliegue

- Quita `json_web_token` de cualquier configuración publicada; tras la actualización 9020 la clave vive en la entidad Key `dxpr_builder_jwt`. Esa Key usa el proveedor **Configuration**, así que la clave aún se exporta como `key.key.dxpr_builder_jwt`. Cámbiala al proveedor **File** o **Environment** en `/admin/config/system/keys` para mantenerla fuera de las exportaciones.
- Las exportaciones de configuración ahora incluyen los dos vocabularios de IA y sus términos.
- Los perfiles exportan nombres de botones CKEditor 5 en `inline_buttons` y `modal_buttons`.

## Solución de problemas

Si el contenido no se muestra bien tras la actualización:

1. Ejecuta `drush cache:rebuild`.
2. Comprueba `/admin/reports/dblog` para mensajes del canal `dxpr_builder`; las migraciones en lote registran los elementos que omiten.
3. Confirma que la presentación de vista de cada campo del constructor aún usa el formato **DXPR Builder**.
4. Confirma que el tema carga Bootstrap 5, o activa la carga lateral en `/admin/dxpr_studio/dxpr_builder/settings`.

## ¿Qué sigue?

- [Actualiza DXPR Builder](/es/hc/documentation/learn-dxpr-builder/getting-started/updating): actualizaciones rutinarias dentro de una serie
- [Registro de cambios](/es/hc/documentation/learn-dxpr-builder/getting-started/changelog): qué cambió cada versión
- [Referencia de configuración](/es/hc/documentation/learn-dxpr-builder/reference/config-reference): cada clave que tocan los hooks de actualización