---
url: 'https://dxpr.com/de/hc/dokumentation/dxpr-builder-lernen/entwicklung/architektur'
title: 'Architektur | DXPR'
author:
  name: Jurriaan
  url: 'https://dxpr.com/users/jurriaan'
date: '2026-10-24T04:04:35+00:00'
updated: '2026-10-24T17:19:22+00:00'
copyright: 'Copyright DXPR. All rights reserved.'
type: article
summary: |-
  DXPR Builder hat drei Teile: einen Feld-Formatierer in PHP, einen Editor,
  der im Browser läuft, und Routen, die der Editor aufruft, um Daten zu
  speichern und zu holen. Diese Seite erklärt, wie sie zusammenpassen.
tags:
  - 'Architecture and APIs'
image: 'https://dxpr.com/themes/custom/dxpr_com/images/dxpr-share-card.jpg'
published: true
og:
  site_name: DXPR
  updated_time: '2026-10-24T17:19:22+0000'
  'image:alt': 'DXPR, powered by Drupal: AI-powered Drupal for marketers.'
schema:
  '@context': 'https://schema.org'
  '@graph':
    -
      mainEntity: {  }
    -
      '@type': TechArticle
      headline: Architektur
      description: |-
        DXPR Builder hat drei Teile: einen Feld-Formatierer in PHP, einen Editor,
        der im Browser läuft, und Routen, die der Editor aufruft, um Daten zu
        speichern und zu holen. Diese Seite erklärt, wie sie zusammenpassen.
      image:
        '@type': ImageObject
        url: 'https://dxpr.com/themes/custom/dxpr_com/images/dxpr-share-card.jpg'
        width: '1200'
        height: '630'
      datePublished: '2026-10-24T04:04:35+0000'
      dateModified: '2026-10-24T17:19:22+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/de/hc/dokumentation/dxpr-builder-lernen/entwicklung/architektur'
      articleSection: 'Architektur und APIs'
    -
      '@type': WebPage
      '@id': 'https://dxpr.com/de/hc/dokumentation/dxpr-builder-lernen/entwicklung/architektur'
      description: |-
        DXPR Builder hat drei Teile: einen Feld-Formatierer in PHP, einen Editor,
        der im Browser läuft, und Routen, die der Editor aufruft, um Daten zu
        speichern und zu holen. Diese Seite erklärt, wie sie zusammenpassen.
      breadcrumb:
        '@type': BreadcrumbList
        itemListElement:
          -
            '@type': ListItem
            position: 1
            name: Startseite
            item: 'https://dxpr.com/de'
      publisher:
        '@type': Organization
        '@id': 'https://dxpr.com/#organization'
        name: DXPR
      inLanguage: de
---
[Hilfe-Center](/de/hc)/[Dokumentation](/de/hc/dokumentation) /[DXPR Builder lernen](/de/hc/documentation/learn-dxpr-builder) /[Erweitern](/de/hc/documentation/learn-dxpr-builder/extend) /[Architektur und APIs](/de/hc/documentation/learn-dxpr-builder/extend/architecture) # Architektur.

 DXPR Builder lernenErweiternArchitektur und APIs

   ## In diesem Leitfaden

DXPR Builder hat drei Teile: einen Feld-Formatierer in PHP, einen Editor, der im Browser läuft, und Routen, die der Editor aufruft, um Daten zu speichern und zu holen. Diese Seite erklärt, wie sie zusammenpassen.

## Feld-Formatierer

Inhalte sind HTML, gespeichert in einem gewöhnlichen Drupal-Textfeld (`text`, `text_long` oder `text_with_summary`). Ein Feld wird bearbeitbar, wenn seine Anzeige den Formatierer **DXPR Builder**nutzt (`dxpr_builder_text`, in `src/Plugin/Field/FieldFormatter/DxprBuilderFormatter.php`).

Der Formatierer lädt den Editor nur, wenn all dies zutrifft:

- die betrachtende Person ist abrechenbar: Benutzer 1, oder ein aktives Konto mit `edit with dxpr builder`, das nicht vom DXPR-Builder-Bearbeiten ausgeschlossen ist;
- die betrachtende Person darf die Entität aktualisieren;
- das Konto hat eine E-Mail-Adresse;
- die Lizenz- und Inhaltslimits sind nicht überschritten;
- die Website steht nicht auf der Blockliste des Lizenzservers, und die Seite ist keine Revisionsseite.

Alle anderen erhalten das verarbeitete HTML: Pfad-Token expandiert, Drupal-Blöcke und Ansichten in ihre Platzhalter gerendert, die `data-az*`-Editor-Attribute entfernt und die Bibliotheken angehängt, die der Inhalt braucht. Die Ausgabe für Angemeldete wird nicht zwischengespeichert (`max-age` 0), weil sie benutzerspezifische Einstellungen trägt.

## Editor

Der Editor ist eine Reihe JavaScript-Dateien, geladen als Bibliothek `dxpr_builder/editor.builder`. Sie kommen vom CDN von DXPR, oder aus dem eigenen `dxpr_builder/`-Ordner des Moduls, wenn er einen lokalen Build hält; die Einstellung **Asset source** auf General Settings erscheint nur dann. Der Editor parst das HTML des Felds in einen Baum aus Elementobjekten und schreibt es beim Speichern zurück nach HTML.

Elementtypen kommen aus zwei Orten in `dxpr_builder/build/`:

| Ordner | Elementtypen |
|---|---|
| `dxpr-builder/core-elements/` | Container, Section, Row, Column, Tabs und ihre Tab-, Toggle- und Folien-Panels |
| `dxpr-elements/elements/` | Inhaltselemente sowie die Layout-Elemente Collapsibles, Carousel und Positioned Layers |

Jedes Element hält seine Einstellungen in eigenem HTML: `data-azat-*`-Attribute, Klassen und Inline-Stile. Das gespeicherte HTML ist der einzige Nachweis des Layouts; es gibt keinen separaten Layout-Speicher. [Eigene Elemente](/de/hc/dokumentation/dxpr-builder-lernen/entwicklung/eigene-elemente) zeigt das Format.

### Bestehendes HTML parsen

Markup ohne Builder-Attribute wird beim Laden des Editors auf Elemente gemappt. Bootstrap-Container, -Zeilen und -Spalten werden zu Abschnitten, Zeilen und Spalten. Erkannte Komponenten werden zu ihren Elementen, zum Beispiel Schaltflächen, Hinweise, Karten, Blockzitate, Bilder, Icons, Fortschrittsbalken, Tabs und Ausklapp-Panels. Text, Tabellen und übriges Inline-Markup werden zu Textelementen, und ein `<iframe>` wird zu einem HTML-Element. Lose `<script>`- und `<style>`-Tags sowie Kommentare entfallen. Die Regeln stehen in `dxpr-builder/base-element/parse-html.js`.

## Routen, die der Editor aufruft

Der Editor speichert über `/dxpr_builder/ajax`, lädt Dateien über `/dxpr_builder/ajax/file_upload` hoch und erreicht KI über `/dxpr_builder/ajax/ai/*`. Die meisten Routen prüfen den abrechenbaren Zugang und ein CSRF-Token; die volle Liste mit Zugangsvoraussetzungen steht in der [API-Referenz](/de/hc/documentation/learn-dxpr-builder/development/api#editor-routes).

## Konfigurationsentitäten

| Entitätstyp | Konfigurationspräfix | Enthält |
|---|---|---|
| `dxpr_builder_page_template` | `dxpr_builder.page_template` | Ganzseitige Layouts |
| `dxpr_builder_user_template` | `dxpr_builder.user_template` | Abschnitte, die Bearbeitende zur Wiederverwendung gespeichert haben |
| `dxpr_builder_profile` | `dxpr_builder.dxpr_builder_profile` | Grenzen pro Rolle für Elemente, Blöcke, Ansichten, Vorlagen, Icon-Sets und Texteditor-Schaltflächen |

## Lizenzprüfung

Der Produktschlüssel ist ein JWT. `DxprBuilderLicenseService` sendet ihn an den DXPR-Lizenzserver, der Lizenzstatus sowie Lizenz- und Inhaltslimits zurückgibt; das Ergebnis wird zwischengespeichert. Ohne Produktschlüssel gilt die Gratis-Stufe: ein Konto und 100 Inhalte. Der Dienst hält außerdem die Liste der Bearbeitenden dieser Website auf dem Server synchron.