Architettura.
DXPR Builder ha tre parti: un formatter di campo in PHP, un editor che gira nel browser e una serie di route che l’editor chiama per salvare e leggere dati. Questa pagina spiega come stanno insieme.
Formatter di campo
Il contenuto è HTML memorizzato in un normale campo di testo Drupal (text,
text_long o text_with_summary). Un campo diventa modificabile quando
la sua visualizzazione usa il formatter DXPR Builder
(dxpr_builder_text, in
src/Plugin/Field/FieldFormatter/DxprBuilderFormatter.php).
Il formatter carica l’editor solo quando valgono tutte queste condizioni:
- chi guarda è fatturabile: l’user 1, o un account attivo con
edit with dxpr buildernon escluso dalla modifica con DXPR Builder; - chi guarda può aggiornare l’entità;
- l’account ha un indirizzo email;
- i limiti di utenti e contenuti della licenza non sono superati;
- il sito non è nella blocklist del server delle licenze e la pagina non è una pagina di revisioni.
Tutti gli altri ricevono l’HTML elaborato: token di percorso espansi, blocchi
e viste Drupal renderizzati nei loro segnaposto, attributi editor data-az*
rimossi e librerie necessarie al contenuto collegate. L’output per gli utenti collegati
non è in cache (max-age 0), perché contiene impostazioni per utente.
Editor
L’editor è un insieme di file JavaScript caricati come libreria
dxpr_builder/editor.builder. Provengono dalla CDN di DXPR,
oppure dalla cartella dxpr_builder/ del modulo quando contiene una
build locale; l’impostazione Asset source in General Settings
compare solo allora. L’editor analizza l’HTML del campo in un albero di
oggetti elemento e lo riscrive in HTML quando salva.
I tipi di elemento provengono da due posti in dxpr_builder/build/:
| Cartella | Tipi di elemento |
|---|---|
dxpr-builder/core-elements/ |
Container, Section, Row, Column, Tabs e i loro pannelli tab, toggle e slide |
dxpr-elements/elements/ |
Elementi di contenuto e gli elementi di layout Collapsibles, Carousel e Positioned Layers |
Ogni elemento conserva le sue impostazioni nel proprio HTML: attributi data-azat-*,
classi e stili inline. L’HTML memorizzato è l’unico record del layout; non esiste
un archivio layout separato.
Elementi personalizzati mostra il formato.
Analisi dell’HTML esistente
Il markup senza attributi builder è mappato in elementi quando l’editor lo carica. Contenitori,
righe e colonne Bootstrap diventano sezioni, righe e colonne. I componenti riconosciuti
diventano i loro elementi, ad esempio pulsanti, avvisi, card, citazioni, immagini,
icone, barre di avanzamento, tab e collapsible. Testo, tabelle e altro
markup inline diventano elementi Text, e un <iframe> diventa un
elemento HTML. Tag <script> e <style> isolati e i commenti sono
scartati. Le regole sono in dxpr-builder/base-element/parse-html.js.
Route chiamate dall’editor
L’editor salva tramite /dxpr_builder/ajax, carica i file tramite
/dxpr_builder/ajax/file_upload e raggiunge l’AI tramite
/dxpr_builder/ajax/ai/*. La maggior parte delle route verifica il controllo di accesso
dell’utente fatturabile e un token CSRF; l’elenco completo con i requisiti di accesso
è nel Riferimento API.
Entità di configurazione
| Tipo di entità | Prefisso di configurazione | Contiene |
|---|---|---|
dxpr_builder_page_template |
dxpr_builder.page_template |
Layout di pagine intere |
dxpr_builder_user_template |
dxpr_builder.user_template |
Sezioni salvate dagli editor per il riutilizzo |
dxpr_builder_profile |
dxpr_builder.dxpr_builder_profile |
Limiti per ruolo su elementi, blocchi, viste, modelli, set di icone e pulsanti dell’editor di testo |
Verifica della licenza
La chiave prodotto è un JWT. DxprBuilderLicenseService lo invia al
server delle licenze DXPR, che restituisce lo stato della licenza e i suoi
limiti di utenti e contenuti; il risultato è in cache. Senza chiave prodotto
vale il piano gratuito: un utente e 100 elementi di contenuto. Il servizio
mantiene anche sincronizzato l’elenco degli editor di questo sito sul server.