Arquitectura.
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 builderno 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.