---
url: 'https://dxpr.com/es/hc/documentacion/aprender-dxpr-builder/desarrollo/submodulos'
title: 'Submódulos | DXPR'
author:
  name: Jurriaan
  url: 'https://dxpr.com/users/jurriaan'
date: '2026-10-24T11:18:39+00:00'
updated: '2026-10-24T17:19:22+00:00'
copyright: 'Copyright DXPR. All rights reserved.'
type: article
summary: |-
  El directorio modules/ tiene tres submódulos. Dos son pequeños
  paquetes de configuración: un tipo de contenido y un tipo de bloque conectados al
  constructor. El tercero es el selector de medios Entity Browser heredado que
  precede a la compatibilidad con Media Library. Esta página documenta
  lo que cada uno instala, de qué depende y cómo habilitarlo o
  retirarlo.
tags:
  - 'Architecture and APIs'
image: 'https://dxpr.com/themes/custom/dxpr_com/images/dxpr-share-card.jpg'
published: true
og:
  site_name: DXPR
  updated_time: '2026-10-24T17:19:22+0000'
  'image:alt': 'DXPR, powered by Drupal: AI-powered Drupal for marketers.'
schema:
  '@context': 'https://schema.org'
  '@graph':
    -
      mainEntity: {  }
    -
      '@type': TechArticle
      headline: Submódulos
      description: |-
        El directorio modules/ tiene tres submódulos. Dos son pequeños
        paquetes de configuración: un tipo de contenido y un tipo de bloque conectados al
        constructor. El tercero es el selector de medios Entity Browser heredado que
        precede a la compatibilidad con Media Library. Esta página documenta
        lo que cada uno instala, de qué depende y cómo habilitarlo o
        retirarlo.
      image:
        '@type': ImageObject
        url: 'https://dxpr.com/themes/custom/dxpr_com/images/dxpr-share-card.jpg'
        width: '1200'
        height: '630'
      datePublished: '2026-10-24T11:18:39+0000'
      dateModified: '2026-10-24T17:19:22+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/documentacion/aprender-dxpr-builder/desarrollo/submodulos'
      articleSection: 'Arquitectura y API'
    -
      '@type': WebPage
      '@id': 'https://dxpr.com/es/hc/documentacion/aprender-dxpr-builder/desarrollo/submodulos'
      description: |-
        El directorio modules/ tiene tres submódulos. Dos son pequeños
        paquetes de configuración: un tipo de contenido y un tipo de bloque conectados al
        constructor. El tercero es el selector de medios Entity Browser heredado que
        precede a la compatibilidad con Media Library. Esta página documenta
        lo que cada uno instala, de qué depende y cómo habilitarlo o
        retirarlo.
      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
---
[Centro de ayuda](/es/hc)/[Documentación](/es/hc/documentacion) /[Aprende DXPR Builder](/es/hc/documentation/learn-dxpr-builder) /[Extender](/es/hc/documentation/learn-dxpr-builder/extend) /[Arquitectura y API](/es/hc/documentation/learn-dxpr-builder/extend/architecture) # Submódulos.

 Aprende DXPR BuilderExtenderArquitectura y API

   ## En esta guía

 Guías relacionadas

- [Tipos de contenido](/es/hc/documentacion/aprender-dxpr-builder/integraciones/tipos-contenido)
- [Pon una imagen de tu biblioteca de medios](/es/hc/documentacion/aprender-dxpr-builder/integraciones/biblioteca-medios)

El directorio `modules/` tiene tres submódulos. Dos son pequeños paquetes de configuración: un tipo de contenido y un tipo de bloque conectados al constructor. El tercero es el selector de medios Entity Browser heredado que precede a la compatibilidad con Media Library. Esta página documenta lo que cada uno instala, de qué depende y cómo habilitarlo o retirarlo.

| Módulo | Nombre de máquina | Ofrece | Estado |
|---|---|---|---|
| DXPR Builder Drag and Drop Page | `dxpr_builder_page` | `drag_and_drop_page` como tipo de contenido | Admitido |
| DXPR Builder Block Type | `dxpr_builder_block` | `drag_and_drop_block` como tipo de bloque | Admitido |
| DXPR Builder Media | `dxpr_builder_media` | Selector de medios Entity Browser | Heredado; oculto en la página Extend |

Ninguno es obligatorio. El constructor funciona en cualquier campo de texto cuya presentación usa el formato **DXPR Builder**(`dxpr_builder_text`); consulta [Instalación en tipos de contenido existentes](/es/hc/documentacion/aprender-dxpr-builder/primeros-pasos/instalacion-tipos-contenido-existentes).

## DXPR Builder Drag and Drop Page

`modules/dxpr_builder_page` instala el tipo de contenido **Drag and Drop Page** (`node.type.drag_and_drop_page`) desde `config/optional/`:

- El campo `body`, con la presentación predeterminada usando el formato `dxpr_builder_text` y la presentación de formulario agrupada con Field Group.
- Tres campos de DXPR Theme: `field_dth_hide_regions`, `field_dth_main_content_width` y `field_dth_page_layout`. Se instalan solo cuando existen sus almacenamientos de campo, que el módulo DXPR Theme Helper ofrece.

Dependencias desde `dxpr_builder_page.info.yml`: `field_group`, `text`, `node` y `dxpr_builder`. `hook_install()` crea el almacenamiento de campo `body` cuando no existe. Cuando la configuración opcional no puede instalarse, como en el perfil Minimal, instala el tipo, el campo body y las presentaciones por su cuenta, sin las partes `menu_ui` y `path`. `dxpr_builder_page_update_8001()` marca la configuración instalada como impuesta por el módulo.

`src/DXPRBuilderPageUninstallValidator.php` (registrado en `dxpr_builder_page.services.yml`) bloquea la desinstalación mientras existe algún nodo `drag_and_drop_page`. Elimina o cambia el tipo de esos nodos primero.

1. Habilita el módulo:

    ```bash
    drush en dxpr_builder_page -y

    ```
2. Crea una página en `/node/add/drag_and_drop_page`. El constructor arranca en el campo body cuando una persona que edita ve la página.

Si habilitar falla con "unmet dependencies", habilita Field Group y comprueba que existe un almacenamiento de campo `body`; consulta [Problemas tras actualizar](/es/hc/documentacion/aprender-dxpr-builder/solucion-problemas/tras-actualizar).

## DXPR Builder Block Type

`modules/dxpr_builder_block` instala el tipo de bloque **Drag and Drop Block** (`block_content.type.drag_and_drop_block`) desde `config/optional/`, con un campo `body`, el formato `dxpr_builder_text` en la presentación predeterminada, y la presentación de formulario. El tipo tiene **Create new revision** activado, y `dxpr_builder_block_update_8002()` lo activa para instalaciones viejas, así que cada guardado del constructor en un bloque crea una revisión (consulta [Staging de contenidos](/es/hc/documentation/learn-dxpr-builder/advanced/content-staging)).

Dependencias: `text`, `node` y `dxpr_builder`.

1. Habilita el módulo:

    ```bash
    drush en dxpr_builder_block -y

    ```
2. Crea un bloque en `/block/add/drag_and_drop_block`.
3. Ponlo en una región. Las personas que editan lo editan en su sitio en cualquier página donde aparece.

`dxpr_builder_entity_type_alter()` cambia a la propia clase `Drupal\dxpr_builder\Entity\BlockContent` del módulo, como hace para `Node`. La clase guarda una cadena vacía en campos del constructor vacíos, así que el editor siempre tiene algo a lo que unirse. Un tipo de bloque que creas por tu cuenta funciona igual una vez que su presentación usa el formato de DXPR Builder.

## DXPR Builder Media

`modules/dxpr_builder_media` es el selector de imágenes basado en Entity Browser que el módulo usaba antes de la compatibilidad con Media Library del núcleo. Está marcado `hidden: true` en su `.info.yml`, así que no aparece en **Extend**; aún puedes habilitarlo con Drush. Instala:

- `entity_browser.browser.dxpr_builder_media_modal`: un explorador modal etiquetado **DXPR Builder Image Browser** con dos widgets, una pestaña **Media Library** respaldada por la vista `dxpr_builder_media`y una pestaña **Upload new image** que crea una entidad media `image`con Inline Entity Form.
- `views.view.dxpr_builder_media`: la cuadrícula de medios para el primer widget.
- `image.style.dxpr_builder_media_thumbnail`: un estilo de escala y recorte de 300 por 300 píxeles para la cuadrícula.
- Bibliotecas `view`, `claro_style` y `gin_style`(`dxpr_builder_media.libraries.yml`). El módulo adjunta la hoja de estilos Gin a la vista cuando el tema activo es Gin o basado en él, y la hoja de estilos Claro si no.

Dependencias: `inline_entity_form`, `entity_browser`, `entity_browser_entity_form`, `media`, `media_library` y `views`. Al instalar, el módulo fija `media_browser` en `dxpr_builder.settings` a `dxpr_builder_media_modal`; al desinstalar lo fija a una cadena vacía (**Basic file upload**) y elimina el estilo de imagen.

El explorador recomendado es Media Library del núcleo, que no necesita submódulo:

1. Desinstala el módulo heredado si está habilitado:

    ```bash
    drush pm:uninstall dxpr_builder_media -y

    ```
2. Ve a **DXPR Studio &gt; DXPR Builder &gt; General Settings**(`/admin/dxpr_studio/dxpr_builder/settings`) y abre **Media**.
3. Fija **Browser type** en **Media Library** y haz clic en **Save settings**. La desinstalación lo restableció a **Basic file upload**.

Conserva el submódulo solo en un sitio que depende de un Entity Browser que devuelve ID de archivo; consulta [Las imágenes no se suben o desaparecen](/es/hc/documentacion/aprender-dxpr-builder/solucion-problemas/imagenes-medios)para los errores que produce un explorador no coincidente. El módulo lleva la única prueba PHPUnit del repositorio, `tests/src/FunctionalJavascript/MediaEntityBrowserTest.php`; consulta [Pruebas](/es/hc/documentacion/aprender-dxpr-builder/desarrollo/pruebas).

## Habilitar varios a la vez

```bash
drush en dxpr_builder_page dxpr_builder_block -y

```

Cada submódulo es independiente de los demás.

## ¿Qué sigue?

- [Tipos de contenido](/es/hc/documentacion/aprender-dxpr-builder/integraciones/tipos-contenido) para usar el constructor en tus propios tipos de contenido.
- [Integración con Media Library](/es/hc/documentacion/aprender-dxpr-builder/integraciones/biblioteca-medios) para el selector de imágenes recomendado.