Architektur.

DXPR Builder lernenErweiternArchitektur und APIs

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

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.