---
url: 'https://dxpr.com/fr/hc/documentation/learn-dxpr-builder/development/architecture'
title: 'Architecture | DXPR'
author:
  name: Jurriaan
  url: 'https://dxpr.com/users/jurriaan'
date: '2026-10-24T11:00:36+00:00'
copyright: 'Copyright DXPR. All rights reserved.'
type: article
summary: 'DXPR Builder a trois parties : un formateur de champ en PHP, un éditeur qui tourne dans le navigateur, et un jeu de routes que l’éditeur appelle pour enregistrer et récupérer des données. Cette page explique comment ils s’articulent.'
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-24T11:00:36+0000'
  'image:alt': 'DXPR, powered by Drupal: AI-powered Drupal for marketers.'
schema:
  '@context': 'https://schema.org'
  '@graph':
    -
      mainEntity: {  }
    -
      '@type': TechArticle
      headline: Architecture
      description: 'DXPR Builder a trois parties : un formateur de champ en PHP, un éditeur qui tourne dans le navigateur, et un jeu de routes que l’éditeur appelle pour enregistrer et récupérer des données. Cette page explique comment ils s’articulent.'
      image:
        '@type': ImageObject
        url: 'https://dxpr.com/themes/custom/dxpr_com/images/dxpr-share-card.jpg'
        width: '1200'
        height: '630'
      datePublished: '2026-10-24T11:00:36+0000'
      dateModified: '2026-10-24T11:00:36+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/fr/hc/documentation/learn-dxpr-builder/development/architecture'
      articleSection: 'Architectuur en API’s'
    -
      '@type': WebPage
      '@id': 'https://dxpr.com/fr/hc/documentation/learn-dxpr-builder/development/architecture'
      description: 'DXPR Builder a trois parties : un formateur de champ en PHP, un éditeur qui tourne dans le navigateur, et un jeu de routes que l’éditeur appelle pour enregistrer et récupérer des données. Cette page explique comment ils s’articulent.'
      breadcrumb:
        '@type': BreadcrumbList
        itemListElement:
          -
            '@type': ListItem
            position: 1
            name: Accueil
            item: 'https://dxpr.com/fr'
      publisher:
        '@type': Organization
        '@id': 'https://dxpr.com/#organization'
        name: DXPR
      inLanguage: fr
---
[Help Center](/fr/hc)/[Documentation](/fr/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) # Architecture.

 Learn DXPR BuilderExtendArchitectuur en API’s

   ## In this guide

DXPR Builder a trois parties : un formateur de champ en PHP, un éditeur qui tourne dans le navigateur, et un jeu de routes que l’éditeur appelle pour enregistrer et récupérer des données. Cette page explique comment ils s’articulent.

## Formateur de champ

Le contenu est du HTML stocké dans un champ de texte Drupal ordinaire (`text`, `text_long` ou `text_with_summary`). Un champ devient modifiable quand son affichage utilise le formateur **DXPR Builder** (`dxpr_builder_text`, dans `src/Plugin/Field/FieldFormatter/DxprBuilderFormatter.php`).

Le formateur ne charge l’éditeur que quand tout ceci est vrai :

- le visiteur est facturable : utilisateur 1, ou un compte actif avec `edit with dxpr builder` qui n’est pas exclu de la modification DXPR Builder ;
- le visiteur peut mettre à jour l’entité ;
- le compte a une adresse e-mail ;
- les limites d’utilisateurs et de contenus de la licence ne sont pas dépassées ;
- le site n’est pas sur la liste de blocage du serveur de licences, et la page n’est pas une page de révisions.

Les autres reçoivent le HTML traité : jetons de chemin étendus, blocs Drupal et vues rendus dans leurs espaces réservés, attributs d’éditeur `data-az*` retirés, et bibliothèques requises par le contenu jointes. La sortie pour les utilisateurs connectés n’est pas mise en cache (`max-age` 0), car elle transporte des réglages par utilisateur.

## Éditeur

L’éditeur est un jeu de fichiers JavaScript chargés comme la bibliothèque `dxpr_builder/editor.builder`. Ils viennent du CDN de DXPR, ou du propre dossier `dxpr_builder/` du module quand il contient un build local ; le réglage **Asset source** sur General Settings n’apparaît qu’alors. L’éditeur analyse le HTML du champ en arbre d’objets éléments et le réécrit en HTML à l’enregistrement.

Les types d’élément viennent de deux endroits dans `dxpr_builder/build/` :

| Dossier | Types d’élément |
|---|---|
| `dxpr-builder/core-elements/` | Container, Section, Row, Column, Tabs et leurs panneaux d’onglet, de toggle et de slide |
| `dxpr-elements/elements/` | Éléments de contenu et les éléments de mise en page Collapsibles, Carousel et Positioned Layers |

Chaque élément garde ses réglages dans son propre HTML : attributs `data-azat-*`, classes et styles en ligne. Le HTML stocké est le seul enregistrement de la mise en page ; il n’y a pas de stockage de mise en page séparé. [Éléments personnalisés](/hc/documentation/learn-dxpr-builder/development/custom-elements) montre le format.

### Analyser du HTML existant

Le balisage sans attributs builder est mappé vers des éléments quand l’éditeur le charge. Les conteneurs, lignes et colonnes Bootstrap deviennent sections, lignes et colonnes. Les composants reconnus deviennent leurs éléments, par exemple boutons, alertes, cartes, citations, images, icônes, barres de progression, onglets et collapsibles. Texte, tableaux et autre balisage en ligne deviennent des éléments Text, et un `<iframe>` devient un élément HTML. Les balises `<script>` et `<style>` isolées et les commentaires sont retirés. Les règles sont dans `dxpr-builder/base-element/parse-html.js`.

## Routes appelées par l’éditeur

L’éditeur enregistre via `/dxpr_builder/ajax`, téléverse des fichiers via `/dxpr_builder/ajax/file_upload` et atteint l’IA via `/dxpr_builder/ajax/ai/*`. La plupart des routes vérifient la vérification d’accès de l’utilisateur facturable et un jeton CSRF ; la liste complète avec les conditions d’accès est dans la [Référence de l’API](/hc/documentation/learn-dxpr-builder/development/api#editor-routes).

## Entités de configuration

| Type d’entité | Préfixe de config | Contient |
|---|---|---|
| `dxpr_builder_page_template` | `dxpr_builder.page_template` | Mises en page complètes |
| `dxpr_builder_user_template` | `dxpr_builder.user_template` | Sections enregistrées par les contributeurs pour réemploi |
| `dxpr_builder_profile` | `dxpr_builder.dxpr_builder_profile` | Limites par rôle sur éléments, blocs, vues, modèles, jeux d’icônes et boutons d’éditeur de texte |

## Vérification de licence

La clé de produit est un JWT. `DxprBuilderLicenseService` l’envoie au serveur de licences DXPR, qui renvoie le statut de licence et ses limites d’utilisateurs et de contenus ; le résultat est mis en cache. Sans clé de produit, le palier gratuit s’applique : un utilisateur et 100 contenus. Le service tient aussi à jour la liste des contributeurs de ce site côté serveur.