---
url: 'https://dxpr.com/pt-pt/hc/documentation/learn-dxpr-builder/getting-started/migration-1x-to-3x'
title: 'Migrar do DXPR Builder 1.x ou 2.x | DXPR'
author:
  name: Jurriaan
  url: 'https://dxpr.com/users/jurriaan'
date: '2026-10-24T14:11:56+00:00'
copyright: 'Copyright DXPR. All rights reserved.'
type: article
summary: |-
  O DXPR Builder 3.x atualiza no local a partir de qualquer versão 1.x ou
  2.x. O Composer troca o código, e
  drush updatedb corre os hooks de atualização em
  dxpr_builder.install que convertem configuração
  e conteúdo. Esta página lista o que esses hooks fazem,
  o que mudou para código personalizado e como verificar
  o resultado. As datas de versão vêm das etiquetas git; veja
  Versões anteriores.
tags:
  - 'Move from another builder'
image: 'https://dxpr.com/themes/custom/dxpr_com/images/dxpr-share-card.jpg'
published: true
og:
  site_name: DXPR
  updated_time: '2026-10-24T14:11:56+0000'
  'image:alt': 'DXPR, powered by Drupal: AI-powered Drupal for marketers.'
schema:
  '@context': 'https://schema.org'
  '@graph':
    -
      mainEntity: {  }
    -
      '@type': TechArticle
      headline: 'Migrar do DXPR Builder 1.x ou 2.x'
      description: |-
        O DXPR Builder 3.x atualiza no local a partir de qualquer versão 1.x ou
        2.x. O Composer troca o código, e
        drush updatedb corre os hooks de atualização em
        dxpr_builder.install que convertem configuração
        e conteúdo. Esta página lista o que esses hooks fazem,
        o que mudou para código personalizado e como verificar
        o resultado. As datas de versão vêm das etiquetas git; veja
        Versões anteriores.
      image:
        '@type': ImageObject
        url: 'https://dxpr.com/themes/custom/dxpr_com/images/dxpr-share-card.jpg'
        width: '1200'
        height: '630'
      datePublished: '2026-10-24T14:11:56+0000'
      dateModified: '2026-10-24T14:11:56+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/pt-pt/hc/documentation/learn-dxpr-builder/getting-started/migration-1x-to-3x'
      articleSection: 'Mudar de outro construtor'
    -
      '@type': WebPage
      '@id': 'https://dxpr.com/pt-pt/hc/documentation/learn-dxpr-builder/getting-started/migration-1x-to-3x'
      description: |-
        O DXPR Builder 3.x atualiza no local a partir de qualquer versão 1.x ou
        2.x. O Composer troca o código, e
        drush updatedb corre os hooks de atualização em
        dxpr_builder.install que convertem configuração
        e conteúdo. Esta página lista o que esses hooks fazem,
        o que mudou para código personalizado e como verificar
        o resultado. As datas de versão vêm das etiquetas git; veja
        Versões anteriores.
      breadcrumb:
        '@type': BreadcrumbList
        itemListElement:
          -
            '@type': ListItem
            position: 1
            name: Início
            item: 'https://dxpr.com/pt-pt'
      publisher:
        '@type': Organization
        '@id': 'https://dxpr.com/#organization'
        name: DXPR
      inLanguage: pt-pt
---
[Centro de ajuda](/pt-pt/node/75)/[Documentação](/pt-pt/hc/documentation) /[Aprender DXPR Builder](/pt-pt/hc/documentation/learn-dxpr-builder) /[Comece aqui](/pt-pt/hc/documentation/learn-dxpr-builder/start-here) /[Mudar de outro construtor](/pt-pt/hc/documentation/learn-dxpr-builder/migration) # Migrar do DXPR Builder 1.x ou 2.x.

 Aprender DXPR BuilderComece aquiMudar de outro construtor

   ## Neste guia

 Guias relacionados

- [Atualizar o DXPR Builder](/pt-pt/hc/documentation/learn-dxpr-builder/getting-started/updating)
- [Registo de alterações](/pt-pt/hc/documentation/learn-dxpr-builder/getting-started/changelog)
- [Referência de configuração](/pt-pt/hc/documentation/learn-dxpr-builder/reference/config-reference)

O DXPR Builder 3.x atualiza no local a partir de qualquer versão 1.x ou 2.x. O Composer troca o código, e `drush updatedb` corre os hooks de atualização em `dxpr_builder.install` que convertem configuração e conteúdo. Esta página lista o que esses hooks fazem, o que mudou para código personalizado e como verificar o resultado. As datas de versão vêm das etiquetas git; veja [Versões anteriores](/hc/documentation/learn-dxpr-builder/getting-started/changelog-older).

## Histórico de versões em resumo

| Série | Drupal | Notas |
|---|---|---|
| 7.x-1.x | Drupal 7 | Vendido como Glazed Builder, depois renomeado. |
| 1.x (8.x-1.x) | Drupal 8 e 9 | Nome de máquina do módulo `dxpr_builder` desde a primeira versão 1.x em maio de 2020. Última versão 1.8.8. |
| 2.x | Drupal 9.3 a 11 | CKEditor 5, suporte de módulo Key, primeiras funcionalidades de IA. Última versão 2.8.1. |
| 3.x | Drupal 10.2 e 11 | Só Bootstrap 5, módulo Key obrigatório, migrações de conteúdo, geração de páginas e imagens por IA. |

O nome de máquina não mudou entre 1.x e 3.x. Conteúdo ainda com marcação da era Glazed tem de ser migrado em 1.x ou 2.x antes de atualizar; o 3.x já não reescreve o nome Glazed (veja abaixo).

## Requisitos antes de começar

- Drupal 10.2 ou posterior, ou Drupal 11 (`core_version_requirement` em `dxpr_builder.info.yml`).
- O módulo Key. É dependência obrigatória em 3.x; `dxpr_builder_update_9020()` instala-o se `drush updatedb` o encontrar em falta.
- Uma chave de produto emitida para o DXPR Builder 2.0.0 ou posterior. Chaves sem declaração `dxpr_tier` são rejeitadas pelo formulário de definições.
- Um tema que forneça Bootstrap 5, ou a opção de sideload **Bootstrap 5**. Sideload de Bootstrap 3 e 4 já não existe.

## Passos de migração

1. Faça cópia de segurança da base de dados e ficheiros:

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

    ```
2. Atualize o código com Composer. A 3.x é atualmente publicada como pré-versões, por isso permita-as:

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

    ```
3. Corra os hooks de atualização e reconstrua caches:

    ```bash
    drush updatedb
    drush cache:rebuild

    ```

    Vários hooks 3.x processam cada valor de campo DXPR Builder em lotes (veja abaixo). Em sites grandes demoram minutos, não segundos.
4. Abra `/admin/dxpr_studio/dxpr_builder/settings`e verifique a secção **License**. Depois da atualização 9020 o **Storage method** é **Key module**e a **Key** é `DXPR Builder JWT`(`dxpr_builder_jwt`).
5. Verifique **Sideload Bootstrap files** na mesma página. Sites que tinham Bootstrap 3 ou 4 selecionado estão agora em **Bootstrap 5**.
6. Abra `/admin/dxpr_studio/dxpr_builder/ai_settings`e decida se os três interrutores de IA, que vêm ligados por predefinição, devem ficar ligados.
7. Visite páginas que usam DXPR Builder e confirme que apresentam e editam corretamente.

## O que os hooks de atualização fazem

Hooks numerados 8005 a 8025 vieram em 1.x. Um site 1.x corre tudo de 8026 em diante; um site 2.8.0 ou 2.8.1 corre 8040 e 9014 em diante. Os nomes de função são `dxpr_builder_update_NNNN()`.

### Adicionados em 2.x (correm vindo de 1.x)

| Hook | O que faz |
|---|---|
| 8026 | Atualiza o armazenamento central de utilizadores DXPR Builder. |
| 8027 | Adiciona o bloco de informação de licença e uma coluna "DXPR Builder User" à vista People. |
| 8028 | Cria a tabela `dxpr_lock` para bloqueio de conteúdo. |
| 8029 | Adiciona o bloco de licenças ao painel de licenças de utilizador. |
| 8030 | Troca a definição Bootstrap depois de a opção "Bootstrap 3 Light" ser removida. |
| 8031 | Ativa o bloco de informação de licença onde foi instalado desligado. |
| 8032 | Remove utilizadores bloqueados do armazenamento de licenças. |
| 8033 | Inicializa `drm_last_contact`. |
| 8034 | Instala o campo de utilizador `dxpr_user_is_disavowed` e as ações de utilizador avow/disavow. |
| 8035 | Inicializa a definição `hide_reminders`. |
| 8036 | Migra nomes de botões de barra de ferramentas CKEditor 4 em perfis para CKEditor 5. |
| 8037 | Adiciona um estilo de imagem predefinido para imagens de carregamento rápido. |
| 8038 | Limpa caches para registar os serviços de integração do módulo Key. |
| 8039 | Repara estilos de imagem com definições `image_scale_and_crop` incompletas. |
| 9007 | Cria os vocabulários `ai_tone_of_voice` e `ai_agent_commands` com termos predefinidos. |
| 9008 | Define `ai_enabled` como true e remove a chave antiga `ai_page_enabled`. |
| 9009 | Move `drm_last_contact` de configuração para estado. |
| 9010 | Limpa caches. |
| 9011 | Ativa os botões AI Assistant e AI Tone of Voice em cada perfil. |
| 9012 | Repõe `ai_page_enabled` com predefinição true. |
| 9013 | Define as predefinições de filtragem de saída de IA (`ai_output_allowed_domains`). |
| 9015 | Adiciona `ai_image_enabled` com predefinição true. |

### Adicionados em 3.x (correm vindo de 1.x ou 2.x)

| Hook | O que faz |
|---|---|
| 8040 | Normaliza `bootstrap` para `bs5`; os valores `1` (Bootstrap 3) e `bs4` são reescritos. |
| 9014 | Lote: converte marcação Owl Carousel em conteúdo para o carrossel Bootstrap (`src/Migration/OwlCarouselMigration.php`). |
| 9016 | Adiciona `ai_user_model_selection` com predefinição true. |
| 9017 | Lote: converte contadores circulares circliful para marcação de progresso Bootstrap (`CircleCounterMigration.php`). |
| 9018 | Lote: converte marcação legada de barra de progresso para a estrutura de progresso Bootstrap (`ProgressBarMigration.php`). |
| 9020 | Instala o módulo Key, move `json_web_token` para a entidade Key `dxpr_builder_jwt`, define `api_key_storage` como `key` e limpa o valor em texto claro. |
| 9021 | Preenche a propriedade `type` de modelos de utilizador a partir da marcação. |
| 9022 | Lote: adiciona `data-entity-type` e `data-entity-uuid` a ligações internas `/node/N` (`EntityLinkMigration.php`). |
| 9023 | Lote: repara formato de texto, resumo e deltas apagados que a atualização 9022 perdeu em campos `text_with_summary`. |
| 9024 | Lote: enriquece da mesma forma ligações internas com alias como 9022 (`AliasLinkMigration.php`). |
| 9025 | Limpa `tone_of_voice_vocabulary` quando aponta para um vocabulário que já não existe. |
| 9026 | Limpa um `json_web_token` em texto claro deixado nas definições quando a chave vive numa entidade Key. |

Não há atualização 9019.

### Migrações de conteúdo

A 3.x corre migrações de conteúdo só em lote; já não há conversão em tempo de apresentação. A página de estado de migração (`/admin/dxpr_studio/dxpr_builder/migration-status`) e o relatório de estado listam conteúdo pendente. Os hooks de atualização acima migram-no, tal como as ações **Run now** e **Run all pending migrations** nessa página. Migrações são serviços marcados `dxpr_builder.content_migration`(`dxpr_builder.services.yml`). Um lote que regista falhas não é marcado completo; os itens falhados são registados e ficam pendentes.

A reescrita de cadeias `glazed_to_dxpr` que 1.x e 2.x aplicavam em tempo de apresentação foi removida. O nome Glazed foi abandonado com 1.0.0 em maio de 2020 e todo o conteúdo da era Glazed e Carbide é assumido como migrado por essas versões. A reescrita era uma simples substituição de cadeia. Em sites cujo conteúdo apenas menciona Glazed (artigos de suporte, ligações de documentação), teria reescrito prosa e partido ligações em vez de migrar marcação. Sites que ainda têm nomes de classe Glazed em conteúdo guardado devem correr primeiro a versão 2.x.

## Mudanças para código personalizado

### Formatador de campo

O id do formatador de campo é `dxpr_builder_text`(rótulo "DXPR Builder", `src/Plugin/Field/FieldFormatter/DxprBuilderFormatter.php`), inalterado desde 1.x. Tem uma definição, `profile`, vazia para a predefinição baseada em funções ou um id de perfil. Verifique se cada campo de construtor ainda usa este formatador na apresentação; a reparação da atualização 9023 limita-se a campos que o usam.

### Hooks

`dxpr_builder.api.php` documenta os hooks 3.x. Renomeie os do Glazed Builder assim:

| Hook Glazed Builder | Hook 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()` | Removido; sem hook de substituição. |
| none | `hook_dxpr_builder_icon_sets_alter(array &$icon_sets)`, novo. Conjuntos de ícones são declarados em ficheiros `MODULE.dxpr_icon_sets.yml`. |

### CSS e classes utilitárias

CSS personalizado que aponta a nomes de classe Glazed tem de usar os nomes DXPR, como `dxpr-theme-util`, `panel-dxpr` e `dxpr-builder`. Classes utilitárias expostas no editor são fornecidas através de `hook_dxpr_builder_classes_alter()`.

### Configuração e implementação

- Remova `json_web_token` de qualquer configuração guardada; depois da atualização 9020 a chave vive na entidade Key `dxpr_builder_jwt`. Essa Key usa o fornecedor **Configuration**, por isso a chave ainda é exportada como `key.key.dxpr_builder_jwt`. Mude-a para o fornecedor **File** ou **Environment**em `/admin/config/system/keys` para a manter fora das exportações.
- Exportações de configuração incluem agora os dois vocabulários de IA e os seus termos.
- Perfis exportam nomes de botões CKEditor 5 em `inline_buttons` e `modal_buttons`.

## Resolução de problemas

Se o conteúdo não for apresentado corretamente após a atualização:

1. Corra `drush cache:rebuild`.
2. Verifique `/admin/reports/dblog` por mensagens do canal `dxpr_builder`; migrações em lote registam os itens que saltam.
3. Confirme que a apresentação de vista de cada campo de construtor ainda usa o formatador **DXPR Builder**.
4. Confirme que o tema carrega Bootstrap 5, ou ative o sideload em `/admin/dxpr_studio/dxpr_builder/settings`.

## E a seguir?

- [Atualizar o DXPR Builder](/hc/documentation/learn-dxpr-builder/getting-started/updating): atualizações de rotina dentro de uma série
- [Registo de alterações](/hc/documentation/learn-dxpr-builder/getting-started/changelog): o que cada versão mudou
- [Configuration reference](/hc/documentation/learn-dxpr-builder/reference/config-reference): cada chave que os hooks de atualização tocam