---
url: 'https://dxpr.com/it/hc/documentation/learn-dxpr-builder/development/architecture'
title: 'Architettura | DXPR'
author:
  name: Jurriaan
  url: 'https://dxpr.com/users/jurriaan'
date: '2026-10-24T03:03:54+00:00'
updated: '2026-10-24T09:09:48+00:00'
copyright: 'Copyright DXPR. All rights reserved.'
type: article
summary: |-
  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.
tags:
  - 'Architectuur en API’s'
image: 'https://dxpr.com/themes/custom/dxpr_com/images/dxpr-share-card.jpg'
published: true
og:
  site_name: DXPR
  updated_time: '2026-10-24T09:09:48+0000'
  'image:alt': 'DXPR, powered by Drupal: AI-powered Drupal for marketers.'
schema:
  '@context': 'https://schema.org'
  '@graph':
    -
      mainEntity: {  }
    -
      '@type': TechArticle
      headline: Architettura
      description: |-
        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.
      image:
        '@type': ImageObject
        url: 'https://dxpr.com/themes/custom/dxpr_com/images/dxpr-share-card.jpg'
        width: '1200'
        height: '630'
      datePublished: '2026-10-24T03:03:54+0000'
      dateModified: '2026-10-24T09:09:48+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/it/hc/documentation/learn-dxpr-builder/development/architecture'
      articleSection: 'Architectuur en API’s'
    -
      '@type': WebPage
      '@id': 'https://dxpr.com/it/hc/documentation/learn-dxpr-builder/development/architecture'
      description: |-
        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.
      breadcrumb:
        '@type': BreadcrumbList
        itemListElement:
          -
            '@type': ListItem
            position: 1
            name: Home
            item: 'https://dxpr.com/it'
      publisher:
        '@type': Organization
        '@id': 'https://dxpr.com/#organization'
        name: DXPR
      inLanguage: it
---
[Help Center](/it/hc)/[Documentation](/it/hc/documentation) /[Learn DXPR Builder](/hc/documentation/learn-dxpr-builder) /[Extend](/hc/documentation/learn-dxpr-builder/extend) /[Architectuur en API’s](/hc/documentation/learn-dxpr-builder/extend/architecture) # Architettura.

 Learn DXPR BuilderExtendArchitectuur en API’s

   ## In this guide

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 builder` non 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](/it/hc/documentation/learn-dxpr-builder/development/custom-elements) 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](/it/hc/documentation/learn-dxpr-builder/development/api#editor-routes).

## 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.