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