Arquitectura.

Aprende DXPR BuilderExtenderArquitectura y API

DXPR Builder tiene tres partes: un formato de campo en PHP, un editor que funciona en el navegador y un conjunto de rutas que el editor llama para guardar y obtener datos. Esta página explica cómo encajan.

Formato de campo

El contenido es HTML guardado en un campo de texto ordinario de Drupal (text, text_long o text_with_summary). Un campo pasa a ser editable cuando su presentación usa el formato DXPR Builder (dxpr_builder_text, en src/Plugin/Field/FieldFormatter/DxprBuilderFormatter.php).

El formato carga el editor solo cuando se cumple todo esto:

  • quien mira es facturable: el usuario 1, o una cuenta activa con edit with dxpr builder no excluida de la edición con DXPR Builder;
  • quien mira puede actualizar la entidad;
  • la cuenta tiene una dirección de correo;
  • los límites de personas usuarias y contenidos de la licencia no se superan;
  • el sitio no está en la lista de bloqueo del servidor de licencias, y la página no es una página de revisiones.

Las demás reciben el HTML procesado: tokens de ruta expandidos, bloques y vistas de Drupal renderizados en sus marcadores, los atributos de editor data-az* quitados, y las bibliotecas que el contenido necesita adjuntas. La salida para personas con sesión iniciada no se guarda en caché (max-age 0), porque lleva ajustes por persona.

Editor

El editor es un conjunto de archivos JavaScript cargados como la biblioteca dxpr_builder/editor.builder. Vienen de la CDN de DXPR, o de la propia carpeta dxpr_builder/ del módulo cuando contiene una compilación local; el ajuste Asset source en General Settings solo aparece entonces. El editor analiza el HTML del campo en un árbol de objetos de elemento y lo escribe de vuelta a HTML cuando guarda.

Los tipos de elementos vienen de dos sitios en dxpr_builder/build/:

Carpeta Tipos de elementos
dxpr-builder/core-elements/ Container, Section, Row, Column, Tabs y sus paneles de pestaña, toggle y slide
dxpr-elements/elements/ Elementos de contenido y los elementos de diseño Collapsibles, Carousel y Positioned Layers

Cada elemento guarda sus ajustes en su propio HTML: atributos data-azat-*, clases y estilos en línea. El HTML guardado es el único registro del diseño; no hay otro almacén de diseño. Elementos personalizados muestra el formato.

Análisis de HTML existente

El marcado sin atributos del constructor se mapea a elementos cuando el editor lo carga. Los contenedores, filas y columnas Bootstrap pasan a ser secciones, filas y columnas. Los componentes reconocidos pasan a ser sus elementos, por ejemplo botones, alertas, tarjetas, citas, imágenes, iconos, barras de progreso, pestañas y plegables. Texto, tablas y otro marcado en línea pasan a ser elementos Text, y un <iframe> pasa a ser un elemento HTML. Etiquetas <script> y <style> sueltas y comentarios se descartan. Las reglas están en dxpr-builder/base-element/parse-html.js.

Rutas que el editor llama

El editor guarda por /dxpr_builder/ajax, sube archivos por /dxpr_builder/ajax/file_upload y llega a la IA por /dxpr_builder/ajax/ai/*. La mayoría de las rutas comprueba la comprobación de acceso de persona facturable y un token CSRF; la lista completa con requisitos de acceso está en la Referencia de la API.

Entidades de configuración

Tipo de entidad Prefijo de configuración Guarda
dxpr_builder_page_template dxpr_builder.page_template Diseños de página completa
dxpr_builder_user_template dxpr_builder.user_template Secciones que las personas que editan guardaron para reutilizar
dxpr_builder_profile dxpr_builder.dxpr_builder_profile Límites por rol en elementos, bloques, vistas, plantillas, conjuntos de iconos y botones del editor de texto

Comprobación de licencia

La clave de producto es un JWT. DxprBuilderLicenseService la envía al servidor de licencias de DXPR, que devuelve el estado de licencia y sus límites de personas usuarias y contenidos; el resultado se guarda en caché. Sin clave de producto se aplica el nivel gratuito: una persona y 100 elementos de contenido. El servicio también mantiene sincronizada la lista de personas que editan de este sitio en el servidor.