INFRASSTUDIO
Infrasstudio est un module externe Dolibarr fournissant une seconde surcouche UX moderne au module Website natif de Dolibarr. L'objectif: permettre à un utilisateur non technique d'éditer le contenu d'un site géré par Dolibarr Website (textes, images, données dynamiques Dolibarr) sans connaître HTML ni la console d'administration Dolibarr.
- PARTIE VII — Annexes
- Annexe D — Crédits et licence
- Annexe C — Historique des versions
- Annexe B — Foire aux questions (FAQ)
- Annexe A — Glossaire
- PARTIE VI — Référence
- CHAPITRE 32 — Référence des scripts en ligne de commande
- CHAPITRE 31 — Référence SQL : tables et colonnes
- CHAPITRE 30 — Référence des hooks et triggers
- CHAPITRE 29 — Référence des shortcodes
- CHAPITRE 28 — Référence des constantes
- PARTIE V — Administration et maintenance
- CHAPITRE 27 — Mise à jour du module
- CHAPITRE 26 — Diagnostic et résolution des incidents
- CHAPITRE 25 — Configuration avancée (constantes)
- CHAPITRE 24 — Permissions et rôles utilisateur
- PARTIE IV — Pour le développeur intégrateur
- CHAPITRE 23 — Le catalogue produit dynamique en profondeur
- CHAPITRE 22 — Créer ses propres gabarits de page
- CHAPITRE 21 — Gérer le multilingue (pages sœurs)
- CHAPITRE 20 — Insérer des données Dolibarr (shortcodes)
- CHAPITRE 19 — La grammaire des slots en détail
- CHAPITRE 18 — Annoter un template avec des slots
- CHAPITRE 17 — Préparer un site Dolibarr Website
- Partie III — Pour l'utilisateur final
- CHAPITRE 16 — Référencement, sitemap et partage social
- CHAPITRE 15 — Catalogue produit dynamique
- CHAPITRE 14 — Gérer les articles de blog
- CHAPITRE 13 — Travailler en plusieurs langues
- CHAPITRE 12 — Brouillon, publication et versions
- CHAPITRE 11 — Gérer les images et la bibliothèque média
- CHAPITRE 10 — Modifier les textes
- CHAPITRE 09 — Tour de l'interface Studio
- Partie II — Démarrer
- Chapitre 8 — Vérifier l'installation avec la page Diagnostic
- Chapitre 7 — Activer un site managé
- Chapitre 6 — Installation du module
- Chapitre 5 — Prérequis et compatibilité
- Partie I — Comprendre InfraSStudio
- CHAPITRE 4 — InfraSStudio dans l'écosystème Dolibarr
- CHAPITRE 3 — Le principe de séparation entre contenu et design
- CHAPITRE 2 — À qui s'adresse le module
- CHAPITRE 1 — Qu'est-ce qu'InfraSStudio ?
- Infrasstudio
PARTIE VII — Annexes
Annexe D — Crédits et licence
Équipe
Rôle | Auteur |
|---|---|
Conception et développement | InfraS — |
Contact |
Technologies utilisées
Le module InfraSStudio s'appuie sur les technologies open source suivantes :
Technologie | Rôle |
|---|---|
Plateforme hôte (GPL v3+) | |
Module Website Dolibarr | Couche de stockage et de rendu des pages |
Éditeur visuel des slots de texte riche (livré avec Dolibarr) | |
Bibliothèque d'icônes (version Free) | |
et | Typographies du Studio |
Licence
InfraSStudio est distribué sous licence GNU General Public License v3.0 ou ultérieure (GPL-3.0+).
Cette licence implique les libertés et obligations suivantes :
- Vous pouvez l'utiliser librement, dans un cadre commercial ou non.
- Vous pouvez le modifier pour répondre à vos besoins.
- Vous pouvez le redistribuer, à condition de conserver la même licence GPL et de mettre à disposition le code source.
- Aucune garantie n'est fournie : utilisation à vos risques et périls.
Le texte complet de la licence est disponible dans le fichier LICENSE à la racine du module.
Contribuer
Vous avez identifié un bug, une amélioration possible ou souhaitez proposer une nouvelle fonctionnalité ? Plusieurs canaux existent pour contribuer :
- Signaler un bug : préparez votre rapport en suivant la procédure du Chapitre 26 (capture du Diagnostic, extrait de
dolibarr.log, version), puis transmettez-le à l'éditeur. - Suggérer une fonctionnalité : décrivez le cas d'usage concret et l'objectif visé. Les idées accompagnées d'un contexte utilisateur clair sont prioritaires.
- Soumettre du code : le module suit les conventions de code Dolibarr (PSR-2 modifié, tabulations,
getDolGlobalStringpartout,GETPOSTpartout). - Améliorer la documentation : ce wiki est ouvert aux corrections. Signalez les passages obscurs.
Support
Canal | Usage |
|---|---|
Cette documentation | Première étape avant toute question. La majorité des cas y sont couverts. |
Page Diagnostic | Pour les problèmes techniques. Quatre-vingts pour cent des cas y trouvent leur résolution. |
Courriel InfraS | Pour les questions spécifiques à votre installation : |
Fin de la documentation
Vous êtes parvenu au terme de la documentation. Que vous soyez rédacteur, intégrateur ou administrateur, vous disposez désormais de l'ensemble des informations nécessaires à l'utilisation et à l'administration du module InfraSStudio.
« Le développeur conserve le contrôle du HTML.
L'éditeur conserve le contrôle du contenu.
Chacun travaille dans son périmètre, sans empiéter sur celui de l'autre. »
Annexe C — Historique des versions
Les jalons importants du module. Pour le détail complet, consultez l'onglet Changelog dans l'administration du module.
Version 1.9.0 — Mai 2026 (actuelle)
Robustesse, portabilité et synchronisation.
- Nouvelle page Diagnostic dans l'administration pour vérifier l'intégration en un coup d'œil.
- Refactorisation complète de la gestion d'erreur (helpers centralisés, propagation
setEventMessagespartout). - Synchronisation bidirectionnelle de l'onglet Traductions natif Dolibarr avec l'éditeur du module.
- Preset
preset_default.phpavec fichier JSON, pour livrer des champs personnalisés produit sans code. - Renommage des gabarits exemples (
example-blog,example-landing) avec alias rétrocompatibles. - Portabilité multi-installations améliorée (constante
INFRASSTUDIO_DOCROOT_PATTERN, journalisation de la cascade docroot).
Version 1.8.x — Avril 2026
Catalogue produit dynamique et workflow brouillon/publication.
- Système de catalogue produit dynamique : génération automatique des wrappers solution-*.php.
- Workflow brouillon/publication des slots avec colonne
value_draft. - Éditeur de traductions produit dédié (champs natifs et champs personnalisés).
- Nouveau type de slot
color(sélecteur de couleur HTML5). - Système de blog natif via les pages Dolibarr Website (
type_container='blogpost'). - Refonte de l'éditeur en interface trois colonnes orientée slots uniquement (suppression du système de blocs).
- Centralisation CSRF AJAX, rescan en mode
--lint.
Version 1.7.x — Avril 2026
Éditeur unifié et inspecteur.
- Phase A : nouvel éditeur trois colonnes (arborescence, aperçu, inspecteur).
- Phase B : inspecteur unifié pour les slots et les blocs, click-to-edit via postMessage.
Version 1.6.0 — Avril 2026
Système de design « Elevated CMS ».
- Refonte complète de l'apparence inspirée de Sanity, Contentful et Linear.
- Tokens OKLCH avec accents indigo, ochre, plum et forest.
- Primitives CSS réutilisables (.is-btn, .is-card, .is-grid-table, etc.).
- Prise en charge des thèmes clair et sombre.
Version 1.5.0 — Avril 2026
Constructeur de pages par blocs (déprécié en 1.8.5).
- Système de blocs visuels (section, titre, texte, image, bouton, etc.).
- Inspecteur avec onglets Contenu, Style et Avancé.
- Note : le système de blocs a été retiré en 1.8.5 au profit du modèle slots uniquement, plus simple et plus stable.
Version 1.4.0 — Avril 2026
Référencement et sitemap.
- Panneau SEO avec aperçu Google en direct.
- Génération automatique du sitemap.xml.
- Helper
infrasstudio_hreflang_tags().
Version 1.3.x — Avril 2026
Création de pages depuis l'interface.
- Assistant « + Nouvelle page » avec choix d'un gabarit.
- Catalogue de gabarits (page-free, blog-standard, landing-basic).
- Workflow brouillon/publication des pages, duplication, suppression.
- Slots richtext avec CKEditor natif Dolibarr.
Version 1.2.x — Avril 2026
Bibliothèque média.
- Table
llx_infrasstudio_mediaet interface dédiée. - Variantes automatiques (thumb, card, wide).
- Texte alternatif par langue.
- Suivi de l'utilisation (nombre de slots et de pages).
- Importation automatique des fichiers ajoutés hors du Studio.
- Sélecteur de média réutilisable (fenêtre modale).
Version 1.1.x — Avril 2026
Système de slots et de shortcodes.
- Slots avec types text, textarea, richtext, image, url, number, select, bool.
- Shortcodes : product, category, dict, mysoc, extrafield.
- Cascade surcharge → canonique → @lang:.
- Scanner automatique et outil rescan en ligne de commande.
- Pipeline de consolidation des pages sœurs.
Version 1.0.0 — Avril 2026
Première version.
- Squelette du module (descripteur, pages d'administration, permissions).
- Édition orientée slots.
- Édition des fichiers .lang.
- Premier système de shortcodes.
Pour le changelog complet — Consultez htdocs/custom/infrasstudio/docs/changelog.xml ou l'onglet Changelog dans l'administration du module. Chaque version y est documentée avec ses fix, chg et add détaillés.
Annexe B — Foire aux questions (FAQ)
Annexe B — Foire aux questions
Les questions les plus fréquemment posées. Si la vôtre n'y figure pas, consultez le glossaire ou la page Diagnostic.
Installation et démarrage
Le module fonctionne-t-il sans le module Website ?
Non. Le module Website Dolibarr constitue une dépendance obligatoire. Activez-le en premier, puis InfraSStudio.
Puis-je l'installer sur Dolibarr 17 ou 25 ?
Le module prend en charge Dolibarr 18.0.0 à 24.x.x. Sur des versions hors fenêtre, l'activation est refusée. Vous pouvez la contourner en définissant la constante INFRASSTUDIO_DISABLE_CHECK_VERSION_MIN=1, mais sans garantie de bon fonctionnement.
Combien de sites puis-je gérer simultanément ?
Aucune limite logicielle. Dans la configuration, cochez tous les sites Dolibarr Website que vous souhaitez gérer. Le tableau de bord affichera une carte par site.
Édition au quotidien
Pourquoi mes modifications ne sont-elles pas visibles publiquement ?
L'enregistrement automatique conserve les modifications en brouillon, et non en publication. Cliquez sur le bouton Publier les modifications dans la barre d'outils pour les rendre visibles. Voir le Chapitre 12.
Comment annuler complètement mes modifications de la journée ?
Utilisez le bouton Annuler les modifications dans la barre d'outils. Une confirmation est demandée. Tous les brouillons de la page sont supprimés et l'aperçu revient à la version publique.
Puis-je récupérer une ancienne version d'un slot ?
L'historique est consultable dans l'inspecteur du slot (section dépliable « Historique »). La restauration automatique d'une version antérieure n'est pas encore disponible. En cas de besoin, demandez à un administrateur de récupérer la valeur depuis la base de données.
Comment travailler à plusieurs sur la même page sans conflit ?
L'enregistrement automatique consigne les brouillons toutes les demi-secondes. Si deux personnes éditent le même slot simultanément, c'est la dernière saisie qui est conservée. Pour un circuit de relecture propre, mettez en place une convention organisationnelle (voir Chapitre 24).
Multilingue
Que voit un visiteur si une langue n'est pas traduite ?
Il voit la valeur canonique (généralement le français). Aucune page n'est cassée, aucun texte n'est vide. La résolution suit l'ordre : surcharge de langue, valeur canonique, valeur par défaut du slot.
Mes traductions disparaissent quand je modifie le français — pourquoi ?
Elles ne disparaissent pas. Les traductions sont stockées séparément (surcharges). Si la valeur d'une surcharge est identique au canonique, le mécanisme intelligent du module supprime la surcharge pour éviter une duplication inutile. Saisissez à nouveau la traduction si elle a réellement changé.
Puis-je ajouter une langue qui n'existe pas dans Dolibarr ?
Le module accepte n'importe quelle locale au format xx_XX. Vous devez l'activer côté site Dolibarr Website (champ « Autres langues ») et créer les fichiers .lang Dolibarr correspondants si vous souhaitez bénéficier des replis via @lang:.
Catalogue produit
Pourquoi mon nouveau produit ne s'affiche-t-il pas dans le catalogue web ?
Vérifiez deux conditions : le produit est en tosell=1 dans Dolibarr et le champ personnalisé infrasstudio_published est coché. Sans ces deux conditions, le produit reste en brouillon et n'apparaît pas publiquement.
Comment ajouter un nouvel univers à mon catalogue ?
Définissez la constante INFRASSTUDIO_PRODUCT_UNIVERS_MAP avec un JSON qui associe vos catégories Dolibarr à vos univers personnalisés. Voir le Chapitre 23.
Puis-je désactiver complètement le catalogue dynamique ?
Oui. Ne définissez ni INFRASSTUDIO_WEBSITE_KEY ni INFRASSTUDIO_PUBLIC_DOCROOT. Le trigger et la tâche planifiée se terminent silencieusement. Aucun wrapper n'est généré.
Aspects techniques et développement
Puis-je créer mes propres types de slot ?
Pas directement : les dix types livrés sont câblés dans le module. En revanche, vous pouvez créer vos propres shortcodes en déposant un fichier dans shortcodes/<nom>.shortcode.php. Voir le Chapitre 20.
Comment migrer un site WordPress vers le module ?
Il ne s'agit pas d'un import direct. Vous devrez : créer le site dans Dolibarr Website, reconstruire le HTML des pages avec votre charte, annoter les zones éditables avec des slots, puis copier le contenu depuis WordPress dans le Studio. Le travail est essentiellement manuel mais l'éditeur du Studio rend la saisie rapide.
Le module fonctionne-t-il avec nginx ?
Oui, à condition que la configuration nginx serve correctement les fichiers PHP du docroot Dolibarr. La majorité du module est indépendante du serveur web. Vérifiez simplement que le lien symbolique medias est bien servi (mode native), ou basculez en mode module.
Puis-je versionner mes slots avec Git ?
Indirectement. Les fichiers tpl.php avec leurs tokens {{slot:...}} sont versionnables (ils sont sur le disque). Les valeurs des slots sont en base de données. Pour les versionner, exportez la table llx_infrasstudio_slot avec mysqldump.
Sécurité et performance
Le module ralentit-il mon site public ?
De manière marginale. La résolution des slots ajoute quelques requêtes SQL par page (un SELECT global). Sur une instance correctement dimensionnée, le surcoût est imperceptible. Si vous avez beaucoup de shortcodes {{product:...}} dans une boucle, l'impact peut croître. Voir le Chapitre 20 pour les bonnes pratiques.
Comment sécuriser l'accès au Studio ?
Utilisez les permissions Dolibarr de manière fine. N'attribuez admin qu'aux développeurs. Pour les rédacteurs, donnez uniquement readContent + editContent. Voir le Chapitre 24.
Les médias sont-ils protégés contre l'envoi de fichiers malveillants ?
Oui. Le module utilise finfo pour détecter le type MIME réel (et non l'extension), une liste blanche des types autorisés, et passe par dol_move_uploaded_file() qui scanne via l'antivirus configuré dans Dolibarr.
Annexe A — Glossaire
Liste alphabétique des termes techniques utilisés dans cette documentation et dans le module.
Brouillon (draft)
Modification d'un slot enregistrée mais non publiée. Visible uniquement dans l'aperçu du Studio. Stockée dans la colonne value_draft de la table llx_infrasstudio_slot.
Canonique
Valeur de référence d'un slot, partagée entre toutes les langues. Stockée avec lang=''. Utilisée comme valeur de repli lorsqu'une langue ne possède pas de surcharge.
CKEditor
Éditeur visuel inclus nativement dans Dolibarr, utilisé pour les slots de type richtext.
Click-to-edit
Fonctionnalité qui permet d'éditer un slot en cliquant directement sur le texte correspondant dans l'aperçu. Mise en œuvre via postMessage entre l'iframe et l'éditeur.
Constante (Dolibarr)
Configuration stockée dans la table llx_const. Lue via getDolGlobalString(), écrite via dolibarr_set_const(). Toutes les configurations du module commencent par INFRASSTUDIO_.
Cron
Tâche planifiée Dolibarr. Le module en déclare deux : régénération horaire des wrappers solution et purge quotidienne des slots orphelins.
DOL_DATA_ROOT
Constante PHP de Dolibarr qui pointe vers la racine des données utilisateur (généralement /var/www/dolibarr/htdocs/documents/). Les médias et les fichiers tpl.php sont stockés sous cette racine.
Entity
Identifiant d'une entité juridique en mode multicompany Dolibarr. Chaque table contient une colonne entity. Le module respecte strictement ce cloisonnement.
Extrafield (champ personnalisé)
Champ personnalisé Dolibarr ajouté à un objet (produit, tiers, ticket, etc.). Stocké dans llx_<objet>_extrafields. Utilisé par le module pour enrichir les données du catalogue produit.
Hook
Mécanisme Dolibarr permettant à un module externe d'intervenir à des points précis du code natif (rendu d'une page, sécurité, etc.). Le module utilise les hooks main, login, websitepage et websitenav.
hreflang
Attribut HTML qui indique à Google qu'une page est la traduction d'une autre. Émis automatiquement par le helper infrasstudio_hreflang_tags().
ISO2 et locale
ISO2 désigne le code langue à deux lettres (fr, en). Locale désigne le code complet pays-langue (fr_FR, en_US). Le module utilise les locales en interne et les ISO2 dans les URLs visibles par l'utilisateur.
Multicompany
Mode Dolibarr permettant à plusieurs entités juridiques de cohabiter sur la même installation, avec des données cloisonnées par entity.
Open Graph
Protocole de balises <meta property="og:..."> qui permet à Facebook, LinkedIn ou WhatsApp d'afficher un aperçu enrichi lors du partage d'une URL. Géré par le panneau SEO du module.
Orphelin (slot)
Slot dont le token {{slot:...}} a disparu du fichier tpl.php mais dont la valeur est encore présente en base. Statut 0. Conservé pendant trente jours puis purgé par tâche planifiée.
Override (surcharge de langue)
Valeur d'un slot spécifique à une langue, qui surcharge la valeur canonique pour les visiteurs de cette langue.
Pages sœurs (sister pages)
Modèle multilingue legacy dans lequel chaque langue dispose de son propre fichier tpl.php (about.php, about-en.php, etc.). Le module prend en charge ce modèle via le helper sister_stub.tpl.php.
Permission
Droit d'accès Dolibarr attribuable à un utilisateur ou à un groupe. Le module en définit sept : paramMenu, readContent, editContent, editTranslations, editMedias, publish, admin.
Rescan
Action de réexaminer tous les fichiers tpl.php d'un site afin de synchroniser la table des slots. Effectué manuellement via l'interface ou en ligne de commande avec rescan_slots.php.
Shortcode
Token {{namespace:sélecteur.champ}} qui inscrit une donnée Dolibarr en direct dans le HTML. Résolu au moment du rendu par un fournisseur PHP. À distinguer d'un slot.
Sitemap
Fichier sitemap.xml qui liste toutes les pages publiées d'un site. Lu par Google Search Console. Généré par le module via l'interface ou en ligne de commande.
Slot
Emplacement éditable nommé dans une page, déclaré par un token {{slot:...|type=...}} dans le HTML. Élément central du module.
Studio
L'interface principale d'édition du module, accessible via Outils → InfraSStudio. Composée de trois colonnes : arborescence, aperçu et inspecteur.
Token
Élément textuel délimité par {{ et }} dans le HTML. Les slots et les shortcodes sont des tokens.
tpl.php (gabarit)
Fichier PHP qui contient le HTML d'une page Dolibarr Website. Stocké dans DOL_DATA_ROOT/<entity>/website/<ref>/page<N>.tpl.php.
Trigger
Événement Dolibarr déclenché lors d'opérations métier (création de produit, modification, etc.). Le module écoute les triggers PRODUCT_* et CATEGORY_*.
Univers
Concept éditorial du catalogue produit : un univers regroupe plusieurs catégories Dolibarr en une thématique (Supply Chain, Health, Legal, etc.). Cartographiable via constante.
Variante (média)
Version redimensionnée d'une image générée automatiquement (thumb 200 × 200, card 640 × 480, wide 1600 × 1200) afin d'optimiser le poids selon l'usage.
Virtualhost
Configuration Apache qui associe un nom de domaine à un docroot. Configuré côté administration système, en dehors du module.
Wrapper (Apache)
Petit fichier PHP placé dans le docroot d'un site, qui sert de point d'entrée pour une URL et inclut le bon fichier tpl.php. Généré automatiquement par Dolibarr Website. Le catalogue dynamique génère également des wrappers solution-<ref>.php.
WYSIWYG
Acronyme de « What You See Is What You Get ». Désigne un éditeur visuel qui affiche le résultat formaté en direct (gras, italique, listes, etc.) plutôt qu'un code source brut.
PARTIE VI — Référence
CHAPITRE 32 — Référence des scripts en ligne de commande
Tous les scripts en ligne de commande livrés avec le module. Chemin : htdocs/custom/infrasstudio/scripts/.
rescan_slots.php
Rescanne les fichiers tpl.php d'un site et synchronise la table des slots.
php rescan_slots.php <website_ref_or_id> [--entity=N] [--purge-orphans] [--dry-run] [--lint]
Option | Effet |
|---|---|
| Force l'entity Dolibarr. |
| Supprime immédiatement les slots orphelins (sans attendre 30 jours). |
| Affiche les changements sans les appliquer. |
| Vérifie la syntaxe des slots. Code de sortie : 0 sans anomalie, 1 avec avertissement, 2 avec erreur. |
rebuild_solution_wrappers.php
Reconstruit manuellement les wrappers solution-*.php du catalogue produit.
php rebuild_solution_wrappers.php <websitekey-or-id> <public-docroot> [entity]
# Exemple
php rebuild_solution_wrappers.php monsite /var/www/monsite 2
generate_sitemap.php
Génère le fichier sitemap.xml d'un site.
php generate_sitemap.php <website_ref> [entity]
Idéal pour une planification quotidienne via cron :
# crontab -e
0 3 * * * php /var/www/dolibarr/htdocs/custom/infrasstudio/scripts/generate_sitemap.php monsite 2
preset_default.php
Chargeur générique de presets JSON. Crée des champs personnalisés produit en série.
php preset_default.php <chemin-vers-preset.json>
# Exemple avec le preset livré
php preset_default.php htdocs/custom/infrasstudio/presets/keaticweb.json
Format JSON attendu : voir la documentation des presets.
preset_keatic.php
Wrapper de compatibilité — équivalent à preset_default.php presets/keaticweb.json.
consolidate_sister_pages.php
Consolide une famille de pages sœurs (modèle B legacy) en une page canonique et plusieurs stubs (modèle A moderne).
php consolidate_sister_pages.php <site_ref> \
[--entity=N] \
[--base-slug=<slug>] \
[--dry-run] \
[--extractor=/path/to/extractor.php]
convert_tpl_to_slots.php
Transforme les echo $langs->trans('Key') d'un fichier tpl.php en tokens {{slot:...|default=@lang:Key}}.
php convert_tpl_to_slots.php <tpl_path> [--group=xxx] [--prefix=yyy] [--dry-run] [--hook-engine]
Option | Effet |
|---|---|
| Attribut group par défaut. |
| Préfixe des noms de slot. |
| Aperçu des modifications sans application. |
| Ajoute également l'inclusion du moteur du module. |
Bonnes pratiques en ligne de commande
- Toujours utiliser
--dry-runavant une migration importante. - Lancer en tant qu'utilisateur Apache (
sudo -u www-data php script.php) pour éviter les problèmes de permissions sur les fichiers générés. - En multicompany, toujours préciser
--entity=N. - Capturer la sortie dans un journal :
php script.php 2>&1 | tee /tmp/script.log.
Fin de la Partie VI — Vous disposez désormais d'un mémo complet : constantes, shortcodes, hooks, tables SQL, scripts en ligne de commande. Tout est rassemblé en un seul endroit pour une consultation rapide.
CHAPITRE 31 — Référence SQL : tables et colonnes
llx_infrasstudio_slot
Stockage des valeurs de slot. Une ligne par combinaison (fk_website_page, slot_name, lang, entity).
Colonne | Type | Description |
|---|---|---|
| INT PK | Identifiant auto-incrémenté |
| INT | Référence vers
|
| VARCHAR(64) | Identifiant du slot |
| VARCHAR(16) | text, textarea, richtext, image, url, etc. |
| VARCHAR(8) | Vide = canonique, sinon locale (fr_FR, en_US, etc.) |
| LONGTEXT | Valeur publique |
| LONGTEXT | Brouillon en attente |
,
,
,
,
| VARCHAR/TEXT | Métadonnées (sur la ligne canonique uniquement) |
| INT | Limite de caractères |
| INT | 1 = actif, 0 = orphelin |
,
| DATETIME, INT | Audit standard Dolibarr |
| INT | Multicompany |
Index unique : uk_infrasstudio_slot_uniq (fk_website_page, slot_name, lang, entity).
llx_infrasstudio_media
Colonne | Type | Description |
|---|---|---|
| INT PK | Identifiant auto-incrémenté |
| VARCHAR(64) | Identifiant unique par entity |
| VARCHAR(255) | Nom affiché |
| VARCHAR(16) | image, video, document |
| VARCHAR(255) | Chemin relatif à
|
,
,
,
| INT/VARCHAR | Métadonnées physiques |
| VARCHAR(255) | Texte alternatif canonique |
| VARCHAR(255) | CSV de tags |
| INT | Site associé |
| TEXT | Cartographie des variantes générées |
| INT | 1 = actif, 0 = corbeille |
| INT | Multicompany |
llx_infrasstudio_media_alt
Surcharges du texte alternatif par langue.
Colonnes | Type |
|---|---|
PK,
,
,
,
,
| Standards |
Index unique : (fk_media, lang, entity).
llx_infrasstudio_revision
Historique en mode ajout uniquement des modifications.
Colonnes : rowid, object_type (slot ou media), fk_object, action, payload (JSON), fk_user, date_creation, entity.
llx_infrasstudio_product_translation
Surcharges par langue des champs personnalisés produit traduisibles.
Colonne | Type |
|---|---|
| PK |
| INT |
| VARCHAR(8) |
| VARCHAR(64) — slug du champ personnalisé |
| MEDIUMTEXT |
,
| Standards |
Index unique : (fk_product, lang, field, entity).
Tables Dolibarr utilisées sans modification
llx_website— sitesllx_website_page— pages (titre SEO, meta description, status, gabarit)llx_product— produits (label et description FR canoniques, prix, tosell)llx_product_lang— traductions natives label et descriptionllx_product_extrafields— champs personnalisés canoniques (FR)llx_categorie,llx_categorie_product— catégoriesllx_const— constantes du modulellx_extrafields— définitions des champs personnalisésllx_cronjob— tâches planifiéesllx_ecm_files— fichiers attachés aux produits (mode du sélecteur à deux onglets)
CHAPITRE 30 — Référence des hooks et triggers
Hooks Dolibarr utilisés par le module
Hook | Méthode appelée | Rôle |
|---|---|---|
|
| Sécurité de l'accès aux médias via
. |
| divers | Initialisations à la connexion. |
|
| Résolution des slots et shortcodes au moment du rendu public. Cœur du module. |
| divers | Personnalisation des menus du module Website. |
Implémentation : htdocs/custom/infrasstudio/class/actions_infrasstudio.class.php.
Triggers Dolibarr écoutés
Trigger InterfaceInfrasstudiotrigger dans core/triggers/interface_99_modinfrasstudio_Infrasstudiotrigger.class.php.
Événement | Réaction |
|---|---|
| Régénération des wrappers solution-*.php |
| idem |
| idem |
| idem |
| idem (uniquement si
) |
| idem |
Triggers Dolibarr émis par le module
Trigger émis | Quand |
|---|---|
| Modification du libellé ou de la description en français depuis le Studio (via
). |
| Modification des traductions natives produit depuis le Studio. |
Tâches planifiées déclarées
Tâche | Fréquence | Rôle |
|---|---|---|
| Toutes les heures | Filet de sécurité pour la régénération des wrappers solution. |
Purge des slots orphelins | Quotidien | Suppression des slots orphelins de plus de 30 jours. |
CHAPITRE 29 — Référence des shortcodes
Tous les shortcodes livrés par le module, avec leurs sélecteurs et leurs champs disponibles.
Namespace product
Sélecteurs : ref=<ref> ou id=<rowid> ou ref=$current (marqueur).
Champ | Source |
|---|---|
|
et
selon la langue |
| idem |
| si
est activée |
|
|
,
,
| Prix formatés selon la langue |
,
| Statuts commercialisable et achetable (0 ou 1) |
| Tout champ personnalisé |
{{product:ref=supplyflow.label}}
{{product:ref=$current.ef_tagline}}
{{product:id=42.price}}
Namespace category
Sélecteurs : id=<rowid> ou ref=<ref>.
Champs : label, description, color, ref.
{{category:id=5.label}}
{{category:ref=blog-marketing.label}}
Namespace dict
Sélecteurs : <table>.<col>=<valeur>.
Table de dictionnaire | Exemple |
|---|---|
|
|
|
|
|
|
Namespace mysoc
Sélecteur : aucun (singleton).
Champs : name, address, zip, town, country_code, phone, fax, email, url, capital, tva_intra, idprof1 à idprof6, logo, logo_small, logo_squarred.
{{mysoc.name}} — {{mysoc.address}}, {{mysoc.zip}} {{mysoc.town}}
SIRET {{mysoc.idprof2}} — TVA {{mysoc.tva_intra}}
Namespace extrafield
Sélecteurs : table=<table>|ref=<ref> ou table=<table>|id=<id> avec field=<name>.
{{extrafield:table=product|ref=supplyflow|field=tagline}}
{{extrafield:table=societe|id=42|field=segment}}
{{extrafield:table=product|ref=$current|field=tagline}}
Namespace media
Sélecteur : ref=<ref>.
Champ | Retour |
|---|---|
| URL du fichier original |
| URL de la variante 200 × 200 |
| URL de la variante 640 × 480 |
| URL de la variante 1600 × 1200 |
| Texte alternatif (résolu selon la langue) |
| Libellé affiché |
,
| Dimensions en pixels |
Étendre avec un namespace personnalisé
Déposez un fichier dans htdocs/custom/infrasstudio/shortcodes/<nom>.shortcode.php qui exporte une fonction infrasstudio_shortcode_<nom>_resolve($args, $context).
function infrasstudio_shortcode_myorg_resolve($args, $context)
{
global $db;
$id = isset($args['id']) ? (int) $args['id'] : 0;
$field = isset($args['_field']) ? $args['_field'] : 'name';
// ... logique de résolution
return $value;
}
CHAPITRE 28 — Référence des constantes
Toutes les constantes Dolibarr utilisées par le module, classées par catégorie d'usage. Format : nom, type, valeur par défaut, description.
Sites gérés
Constante | Type | Défaut | Description |
|---|---|---|---|
| CSV | vide | Identifiants des sites Website gérés (par exemple
). |
| chaîne |
| Mode média par site :
ou
. |
| entier | 0 | Identifiant de la page d'index du blog (active l'assistant « + Nouvel article »). |
| chemin | vide | Surcharge du docroot Apache de ce site. |
| timestamp | 0 | Géré automatiquement. Horodatage du dernier rescan automatique des médias. |
Portabilité du système de fichiers
Constante | Type | Défaut | Description |
|---|---|---|---|
| modèle | vide | Modèle partagé avec marqueur
. Exemple :
. |
| chemin | vide | Dossier supplémentaire pour les gabarits. |
Catalogue produit
Constante | Type | Défaut | Description |
|---|---|---|---|
| chaîne | vide | Référence du site cible des wrappers. |
| chemin | vide | Docroot Apache absolu où écrire les wrappers. |
| JSON | vide | Surcharge de la cartographie catégorie vers univers. |
| CSV | vide | Slugs de champs personnalisés à ajouter au registre traduisible. |
| JSON | vide | Surcharge complète du registre. |
| chaîne |
| Préfixe des wrappers générés. |
| chaîne |
| Slug Dolibarr du gabarit. |
Apparence du Studio
Constante | Valeurs | Défaut |
|---|---|---|
|
,
|
|
|
,
,
,
|
|
Multilingue
Constante | Type | Description |
|---|---|---|
| chaîne | Langue active. Définie dynamiquement par les gabarits. |
| chaîne | Nom du cookie de persistance de la langue. |
| JSON | Surcharge de la cartographie ISO2 vers locale. |
| URL | Image par défaut pour les articles sans image principale. |
Compatibilité et débogage
Constante | Description |
|---|---|
| Géré automatiquement. Version de Dolibarr lors de l'activation. |
| Géré automatiquement. Version du module. |
| Régler sur
pour contourner la vérification de version Dolibarr minimale. |
| Sauvegarde automatique des constantes lors d'une désactivation. Préfixe accolé au nom d'origine. |
PARTIE V — Administration et maintenance
CHAPITRE 27 — Mise à jour du module
Les mises à jour du module s'effectuent sans interruption visible côté visiteurs. Ce chapitre présente la procédure standard et les précautions à observer.
Avant la mise à jour — liste de contrôle
Sur une instance de production, ne sautez jamais ces étapes :
- Sauvegarde complète de la base Dolibarr (mysqldump).
- Sauvegarde du dossier
htdocs/custom/infrasstudio/existant. - Sauvegarde des données :
DOL_DATA_ROOT/<entity>/website/etmedias/. - Lecture du changelog de la nouvelle version pour repérer d'éventuelles modifications majeures.
- Test de la mise à jour sur une instance de pré-production lorsque c'est possible.
Procédure standard
Étape 1 — Désactiver le module
Configuration → Modules → InfraSStudio → cliquer sur Désactiver.
Effet de la désactivation — Les constantes du module sont sauvegardées sous le préfixe INFRASSTUDIOBKP_. Les tables et leurs données restent intactes. L'entrée Outils → InfraS disparaît.
Étape 2 — Remplacer les fichiers
Trois méthodes selon votre environnement :
Via l'interface Dolibarr
- Configuration → Modules → bouton « Déployer / installer un module ».
- Sélectionner la nouvelle archive
module_infrasstudio-X.Y.Z.zip. - Confirmer le remplacement.
Via SSH ou FTP
cd /var/www/dolibarr/htdocs/custom/
mv infrasstudio infrasstudio.old.20260504
unzip /tmp/module_infrasstudio-1.9.0.zip
chown -R www-data:www-data infrasstudio/
Via Git
cd /var/www/dolibarr/htdocs/custom/infrasstudio
git fetch --tags
git checkout v1.9.0
Étape 3 — Réactiver le module
- Configuration → Modules → InfraSStudio → cliquer sur Activer.
- Le module exécute alors :
- la restauration des constantes
INFRASSTUDIOBKP_versINFRASSTUDIO_, - l'application des migrations SQL nécessaires (fichiers
sql/update_X.Y.Z_*.sql), - le réenregistrement des hooks et triggers,
- la mise à jour de la constante
INFRASSTUDIO_MAIN_VERSION.
- la restauration des constantes
Étape 4 — Vérifier avec la page Diagnostic
Outils → InfraSStudio → Diagnostic. L'ensemble des contrôles doit être au vert. La section Schéma SQL confirme en particulier que toutes les tables sont à jour.
Étape 5 — Test fonctionnel
Reproduisez trois actions courantes :
- Ouvrir une page existante dans l'éditeur — l'aperçu doit se charger.
- Modifier un slot — l'enregistrement automatique doit fonctionner (indicateur « Enregistré »).
- Publier les modifications — vérifier que la version publique reflète bien la modification.
Lire le changelog avant chaque mise à jour
Le changelog est accessible :
- Dans le module :
htdocs/custom/infrasstudio/docs/changelog.xml. - Dans l'administration : Outils → InfraSStudio → onglet Changelog.
Lire les types de changement
Type | Signification |
|---|---|
| Correction d'une anomalie. |
| Modification d'un comportement existant. |
| Nouvelle fonctionnalité ou option. |
Numérotation X.Y.Z
Composant | Cas de modification |
|---|---|
X (majeur) | La version Dolibarr minimale prise en charge change. |
Y (mineur) | Une nouvelle fonctionnalité ou option utilisateur est ajoutée. |
Z (correctif) | Corrections et modifications internes uniquement. |
Fréquence des mises à jour
Recommandations :
- Correctif (Z) : à appliquer rapidement, surtout si l'anomalie corrigée vous concerne.
- Mineur (Y) : à appliquer dans les une à deux semaines, après lecture du changelog.
- Majeur (X) : à tester en pré-production, à planifier dans une fenêtre de maintenance, à communiquer à votre équipe.
Retour en arrière
Si une mise à jour pose problème :
- Désactivez le module.
- Restaurez le dossier
infrasstudio.old.<date>/sauvegardé à l'étape 2. - Si une migration SQL a été appliquée, restaurez la base depuis le dump précédent.
- Réactivez le module.
Avertissement — Restauration SQL — Une migration ajoute parfois des colonnes ou des tables. Si vous restaurez le dump pré-migration sans restaurer également les fichiers, le module détectera des structures manquantes et s'interrompra. Synchronisez toujours fichiers et base de données ensemble.
Récapitulatif
Vous savez désormais :
- Préparer une mise à jour avec une liste de contrôle (sauvegarde base, fichiers, données).
- Suivre la procédure en cinq étapes (désactiver, remplacer, réactiver, diagnostic, test).
- Lire le changelog et comprendre la numérotation X.Y.Z.
- Appliquer la fréquence appropriée selon le type de version.
- Revenir en arrière en cas d'incident.
Fin de la Partie V — Vous savez gérer le module en tant qu'administrateur : permissions, configuration avancée, résolution des incidents, mises à jour. Le module est désormais entre des mains compétentes.
La Partie VI propose la référence pure du module : tableaux exhaustifs des constantes, des shortcodes, des hooks, des tables SQL et des scripts en ligne de commande. À garder à portée pour une consultation rapide.
CHAPITRE 26 — Diagnostic et résolution des incidents
Lorsqu'un comportement inattendu apparaît, ce chapitre vous guide dans la résolution. Le réflexe à adopter est simple : commencer par la page Diagnostic, lire les journaux, et n'envisager une action plus radicale qu'en dernier recours.
Toujours commencer par la page Diagnostic
Outils → InfraSStudio → onglet Diagnostic. Le contrôle visuel (vert, orange, rouge) couvre :
- Versions de Dolibarr et de PHP, présence des extensions PHP requises.
- État du module et de sa dépendance Website.
- Présence des cinq tables SQL du module.
- Permissions d'écriture sur
DOL_DATA_ROOT. - Hooks chargés, présence du trigger, déclaration des tâches planifiées.
- Pour chaque site géré : résolution du docroot, mode média, dossier de données.
À retenir — 80 % des incidents signalés sont en réalité une ligne rouge ou orange du Diagnostic ignorée. Demandez systématiquement à toute personne qui rapporte un dysfonctionnement de joindre d'abord cette capture.
Lire les journaux Dolibarr
Le module utilise dol_syslog() pour tracer les opérations sensibles, avec le préfixe infrasstudio.
Emplacement
htdocs/documents/dolibarr.log
Filtrer les entrées du module
# Toutes les entrées du module
grep "infrasstudio" htdocs/documents/dolibarr.log
# Uniquement les erreurs
grep "infrasstudio.*LOG_ERR" htdocs/documents/dolibarr.log
# Suivi en temps réel pendant qu'un utilisateur reproduit le problème
tail -f htdocs/documents/dolibarr.log | grep infrasstudio
Conseil — Activer le niveau DEBUG — Pour traquer un incident subtil, augmentez temporairement le niveau de journalisation Dolibarr (Configuration → Sécurité → Système) à LOG_DEBUG. Pensez à le rabaisser une fois le diagnostic terminé.
Incidents fréquents et solutions
Le menu InfraS n'apparaît pas dans Outils
Cause probable | L'utilisateur ne possède pas la permission
. |
Solution | Onglet Permissions de l'utilisateur, cocher
dans la section InfraSStudio. |
Les modifications ne sont pas visibles publiquement
Cause probable | Modifications restées en brouillon sans être publiées. |
Solution | Cliquer sur « Publier les modifications » dans la barre d'outils. Voir le Chapitre 12. |
L'aperçu affiche une erreur 404
Cause probable | La page possède un type_container
,
ou
, et le filtre du noyau la bloque. |
Solution | Le module corrige automatiquement ce comportement depuis la version 1.8.7. Vérifiez que vous êtes en version 1.8.7 ou supérieure. |
Erreur réseau dans l'éditeur (erreur AJAX)
Cause probable | Session Dolibarr expirée, ou avertissement PHP émis avant les en-têtes HTTP. |
Solution | Recharger la page Studio (F5). Si le problème persiste, consultez
pour identifier l'erreur PHP réelle. |
Les images téléversées ne s'affichent pas publiquement
Cause probable | Lien symbolique
manquant ou cassé en mode native. |
Solution | Recréer le lien symbolique avec
, ou basculer le site en mode média
. |
Les wrappers solution-*.php ne se génèrent pas
Cause probable |
ou
non configurées. |
Solution | Configurer ces deux constantes dans Outils → InfraSStudio → Configuration → Wrappers. |
Les slots ne se mettent pas à jour après modification du tpl.php
Cause probable | Le scanner n'a pas été lancé. |
Solution | Outils → InfraSStudio → Contenu → bouton « Rescanner ». Ou en ligne de commande :
. |
Réinitialiser le module
Si le module se trouve dans un état incohérent (utilisation impossible, erreurs SQL persistantes), vous pouvez le réinitialiser :
- Configuration → Modules → InfraSStudio → cliquer sur Désactiver.
- Le module sauvegarde toutes ses constantes sous le préfixe
INFRASSTUDIOBKP_. - Cliquer à nouveau sur Activer.
- Le module restaure ses constantes, recrée les tables manquantes et réenregistre les hooks.
Aucune perte de données — Les valeurs de slot, les médias et les traductions sont conservés dans leurs tables respectives. La désactivation puis réactivation ne touche qu'au descripteur et aux hooks.
Demander de l'aide
Si rien ne fonctionne, préparez ces trois informations avant toute demande d'aide :
- Capture d'écran de la page Diagnostic complète.
- Les vingt dernières lignes de
dolibarr.logfiltrées surinfrasstudio. - La version exacte du module et de Dolibarr (visibles en haut de la page Diagnostic).
Avec ces trois éléments, n'importe quel développeur connaissant le module peut établir un diagnostic en quelques minutes.
Récapitulatif
Vous savez désormais :
- Lancer la page Diagnostic comme premier réflexe.
- Lire et filtrer les journaux Dolibarr.
- Identifier les sept incidents fréquents et leurs solutions.
- Réinitialiser le module proprement (désactivation et réactivation).
- Préparer un rapport d'incident efficace en trois étapes.
CHAPITRE 25 — Configuration avancée (constantes)
Le module expose une vingtaine de constantes Dolibarr qui permettent d'ajuster son comportement. Ce chapitre les classe par catégorie d'usage avec les valeurs typiques.
Sites gérés
Constante | Description |
|---|---|
| CSV des identifiants de sites gérés. Exemple :
. |
| Mode média par site.
(par défaut) ou
. |
| Identifiant de la page d'index du blog (active l'assistant « + Nouvel article »). |
| Surcharge du docroot Apache pour ce site spécifique. |
Portabilité du système de fichiers
Pour les hébergements aux configurations non standards :
Constante | Description |
|---|---|
| Modèle de chemin partagé utilisant le marqueur
. Exemple :
. |
| Dossier supplémentaire à scanner pour les gabarits de page. |
Note — Cascade de résolution — Pour le docroot d'un site, l'ordre de recherche est : INFRASSTUDIO_SITE_<id>_DOCROOT, puis INFRASSTUDIO_DOCROOT_PATTERN, puis le repli sur /var/www/<ref>.
Catalogue produit
Constante | Description |
|---|---|
| Référence du site cible des wrappers solution. |
| Docroot Apache absolu où écrire les wrappers. |
| Surcharge JSON de la cartographie catégorie vers univers. |
| CSV de slugs de champs personnalisés à déclarer comme traduisibles, en complément du registre par défaut. |
| Surcharge JSON complète du registre. |
| Préfixe des wrappers (par défaut
). |
| Slug du gabarit (par défaut
). |
Apparence du Studio
Constante | Valeurs | Par défaut |
|---|---|---|
|
,
|
|
|
,
,
,
|
|
Multilingue côté gabarits
Constante | Description |
|---|---|
| Force la langue active. Définie dynamiquement par les gabarits. |
| Nom du cookie de persistance de la langue (par défaut
). |
| Surcharge de la cartographie ISO2 vers locale (exemple :
). |
| Image par défaut affichée lorsqu'un article ne possède pas d'image principale. |
Compatibilité et débogage
Constante | Description |
|---|---|
| Version de Dolibarr lors de l'activation du module. Géré automatiquement. |
| Version du module. Géré automatiquement. |
| À régler sur
pour contourner la vérification de version Dolibarr minimale (usage avancé). |
Définir une constante
Méthode A — Via l'administration du module
La majorité des constantes sont accessibles dans Outils → InfraSStudio → Configuration, dans la section dépliable « Réglages avancés ». Le formulaire valide les saisies et affiche des avertissements non bloquants en cas d'incohérence.
Méthode B — Via SQL
INSERT INTO llx_const (name, value, type, visible, entity)
VALUES ('INFRASSTUDIO_DOCROOT_PATTERN', '/srv/sites/{ref}', 'chaine', 0, 2);
Méthode C — Via PHP en ligne de commande
php -r "
require 'htdocs/master.inc.php';
\$conf->entity = 2;
dolibarr_set_const(\$db, 'INFRASSTUDIO_DOCROOT_PATTERN', '/srv/sites/{ref}',
'chaine', 0, '', 2);
"
Vérifier la configuration
Après chaque modification de constante, lancez la page Diagnostic du module. Elle valide en direct l'existence des chemins, la cohérence des modèles, etc.
Récapitulatif
Vous savez désormais :
- Identifier les vingt constantes du module classées par usage.
- Comprendre la cascade de résolution du docroot.
- Configurer le catalogue produit (référence du site, docroot, préfixe, gabarit).
- Personnaliser l'apparence (thème, couleur d'accent).
- Définir une constante via l'administration, SQL ou ligne de commande.
- Valider une configuration via la page Diagnostic.
CHAPITRE 24 — Permissions et rôles utilisateur
Le module expose sept permissions distinctes, attribuables finement aux utilisateurs Dolibarr. Ce chapitre vous indique les attributions à privilégier en fonction des rôles, dans l'esprit du principe de moindre privilège.
Les sept permissions du module
Permission | Ce qu'elle autorise |
|---|---|
| Voir l'entrée InfraS dans le menu Outils. Sans cette permission, le module est invisible pour l'utilisateur. |
| Consulter le contenu (pages, slots, médias) en lecture seule. Aucune modification possible. |
| Modifier les valeurs des slots (textes, images, couleurs, etc.) en brouillon. |
| Saisir et modifier les traductions (slots et fiches produit). |
| Téléverser, modifier et supprimer des médias dans la bibliothèque. |
| Publier les brouillons en attente, mettre en ligne ou retirer des pages. |
| Configurer le module (sites gérés, constantes), supprimer des pages, accéder au Diagnostic. |
Note — Un utilisateur portant le drapeau Dolibarr « Super-administrateur » contourne toutes les permissions du module. Ce comportement est volontaire pour rester cohérent avec la philosophie de Dolibarr. Pour tester finement les permissions, utilisez un compte non administrateur.
Les rôles types
Plutôt que d'attribuer les permissions une à une à chaque utilisateur, il est préférable de définir des profils que vous applique ensuite aux comptes.
Lecteur
Pour une personne qui consulte le site sans le modifier (commercial, support, juriste relisant la conformité).
| Oui |
| Oui |
Toutes les autres | Non |
Rédacteur
Pour une personne qui modifie les contenus mais ne publie pas seule (mise en place d'un circuit de relecture).
| Oui |
| Oui |
| Oui |
| Oui |
| Non (pas de publication directe) |
Traducteur
Pour une personne qui n'effectue que des traductions (souvent un prestataire externe).
| Oui |
| Oui |
| Oui |
Toutes les autres | Non |
Rédacteur autonome
Pour une personne qui rédige et publie seule (équipe restreinte, indépendant, etc.).
| Oui |
| Oui |
| Oui |
| Oui |
| Oui |
| Oui |
Administrateur du module
Pour le développeur de l'agence ou le responsable technique du site.
Toutes les permissions | Oui |
Attribuer les permissions à un utilisateur
- Rendez-vous dans Accueil → Utilisateurs et Groupes → Liste des utilisateurs.
- Sélectionnez l'utilisateur cible.
- Cliquez sur l'onglet Permissions.
- Faites défiler jusqu'à la section InfraSStudio.
- Cochez les permissions à attribuer.
- Enregistrez.
Conseil — Utilisez les groupes — Si vous administrez plusieurs rédacteurs, créez un groupe Dolibarr (par exemple « InfraS Rédacteurs ») et attribuez-lui les permissions. Les utilisateurs ajoutés au groupe en héritent automatiquement.
Mettre en place un circuit de relecture
Voici comment exploiter les permissions pour un circuit de relecture propre :
Acteur | Permissions | Tâche |
|---|---|---|
Rédacteur |
+
+
| Modifie les slots et prépare les brouillons. |
Relecteur |
| Consulte les brouillons dans l'aperçu, valide ou demande des modifications. |
Publicateur |
+
| Publie les brouillons après validation du relecteur. |
Récapitulatif
Vous savez désormais :
- Identifier les sept permissions du module.
- Définir cinq rôles types (lecteur, rédacteur, traducteur, rédacteur autonome, administrateur).
- Attribuer les permissions à un utilisateur ou à un groupe Dolibarr.
- Mettre en place un circuit de relecture à plusieurs.
PARTIE IV — Pour le développeur intégrateur
CHAPITRE 23 — Le catalogue produit dynamique en profondeur
Le catalogue produit dynamique transforme votre table llx_product en pages web générées automatiquement. Ce chapitre détaille l'ensemble du fonctionnement côté développeur : architecture, classes, configuration et points d'extension.
Architecture en couches
Couche | Rôle |
|---|---|
StudioProductCatalog | Lit les produits Dolibarr (filtres, tris, multilingue) et expose un format normalisé. |
StudioSolutionWrapper | Génère et supprime les wrappers Apache
en fonction des produits publiés. |
Le gabarit solution-detail (page<X>.tpl.php) | Le gabarit unique qui affiche un produit. Une seule page Dolibarr Website pour N produits. |
Trigger PRODUCT et CATEGORY | Régénère automatiquement les wrappers à chaque modification de produit ou de catégorie. |
Tâche planifiée horaire | Filet de sécurité : relance la génération si un trigger a été manqué. |
Le modèle de données produit
Chaque produit Dolibarr utilisé dans le catalogue exploite plusieurs tables :
Table | Données |
|---|---|
| Champs natifs : ref, label, description, prix, tosell. |
| Traductions natives (label, description par langue). |
| Champs personnalisés canoniques : tagline, hero_image, badge, cta_label, cta_url, deployment, compatibility, support, languages, features (JSON), pricing_tiers (JSON), infrasstudio_published. |
| Surcharges par langue des champs personnalisés traduisibles. |
| Liens entre produits et catégories (utilisés pour la cartographie d'univers). |
Provisionner les champs personnalisés
Les onze champs personnalisés nécessaires ne sont pas livrés en standard avec Dolibarr. Pour les créer en une commande, utilisez le script de provisionnement générique :
php htdocs/custom/infrasstudio/scripts/preset_default.php \
htdocs/custom/infrasstudio/presets/keaticweb.json
Le fichier JSON livre les définitions par défaut (voir Chapitre 28 pour le format). Vous pouvez créer votre propre preset si vous avez besoin d'autres champs personnalisés.
Utiliser StudioProductCatalog
La classe expose plusieurs méthodes pour interroger les produits :
dol_include_once('/infrasstudio/class/studioproductcatalog.class.php');
$catalog = new StudioProductCatalog($db);
// Tous les produits publiés, dans la langue courante
$products = $catalog->fetchPublishedProducts(array(), $iso2);
// Filtres
$products = $catalog->fetchPublishedProducts(array(
'univers' => 'supply-chain',
'type' => 'saas',
), $iso2);
// Un produit par référence
$product = $catalog->fetchProductBySlug('supplyflow-pro', $iso2);
// Univers utilisés (pour le filtre du catalogue)
$univers = $catalog->fetchUsedUnivers();
Format normalisé d'un produit
array(
'id' => 5,
'ref' => 'supplyflow-pro',
'label' => 'SupplyFlow Pro', // résolu selon la langue
'description' => '<p>Description...</p>',
'price' => 290.00,
'badge' => 'Nouveau',
'hero_image' => '/medias/...',
'cta_label' => 'Demander une démo',
'cta_url' => '/contact',
'tagline' => 'Optimisez votre supply chain...',
'deployment' => 'Cloud SaaS',
'compatibility'=> 'SAP, Oracle, Sage',
'support' => '24/7',
'languages' => 'fr,en,de',
'features' => array('Prévision IA', 'Multi-entrepôts'),
'pricing_tiers'=> array(...),
'univers' => 'supply-chain',
'type' => 'saas',
)
Cartographie catégorie vers univers
Les produits sont rattachés à des catégories Dolibarr. Le module associe chaque catégorie à un univers (concept éditorial : Supply Chain, Health, Legal, etc.).
Cartographie par défaut
// Les six univers livrés par défaut
'supply-chain' => array(...catégories supply chain),
'health' => array(...catégories santé),
'legal' => array(...catégories juridique),
'digital-humanities' => array(...catégories sciences humaines),
'transversal' => array(...catégories outils transversaux),
'fsm' => array(...catégories field service)
Surcharge par JSON
Pour personnaliser, définissez la constante :
// Via dolibarr_set_const ou via la page de configuration admin
$conf->global->INFRASSTUDIO_PRODUCT_UNIVERS_MAP = json_encode(array(
'mon-univers' => array(12, 13, 14), // identifiants de catégories
'autre' => array(15, 16),
));
StudioSolutionWrapper
Cette classe gère la génération des wrappers Apache à partir des produits publiés.
Génération manuelle
dol_include_once('/infrasstudio/class/studiosolutionwrapper.class.php');
require_once DOL_DOCUMENT_ROOT . '/website/class/website.class.php';
$website = new Website($db);
$website->fetch(0, 'monsite');
$wrapper = new StudioSolutionWrapper($db);
$stats = $wrapper->rebuildAll($website, '/var/www/monsite');
print_r($stats);
// array('created' => 3, 'updated' => 2, 'deleted' => 1, 'skipped' => 5)
Anatomie d'un wrapper généré
<?php
// /var/www/monsite/solution-supplyflow-pro.php
// Generated by StudioSolutionWrapper — do not edit manually.
$solution_ref = 'supplyflow-pro';
$infrasstudio_current_product_ref = 'supplyflow-pro';
global $dolibarr_main_data_root, $conf;
if (empty($dolibarr_main_data_root)) {
$res = include './page42.tpl.php'; // page solution-detail
} else {
$res = include $dolibarr_main_data_root
. ($conf->entity > 1 ? '/' . $conf->entity : '')
. '/website/monsite/page42.tpl.php';
}
if ($res === false) { http_response_code(500); print 'Failed to make include'; }
Sécurité anti-collision — Le module ne touche qu'aux wrappers qu'il a lui-même créés (présence du marqueur « StudioSolutionWrapper » dans l'en-tête du fichier). Les pages Dolibarr standards portant un slug commençant par solution- sont préservées.
Configuration du générateur de wrappers
Constante | Rôle |
|---|---|
| Référence du site cible. |
| Docroot Apache absolu (par exemple
). |
| Préfixe des wrappers (par défaut
). Exemples :
,
. |
| Slug du gabarit solution-detail (par défaut
). |
Le gabarit solution-detail
Il s'agit d'une page Dolibarr Website classique (avec son slug et son tpl.php), mais utilisée par tous les wrappers. Elle reçoit la variable globale $solution_ref qui identifie le produit à afficher.
Squelette type
<?php
// page42.tpl.php (slug='solution-detail', type_container='page')
require_once __DIR__ . '/master.inc.php';
require_once DOL_DOCUMENT_ROOT . '/core/lib/website.lib.php';
require_once DOL_DOCUMENT_ROOT . '/core/website.inc.php';
dol_include_once('/infrasstudio/class/studioproductcatalog.class.php');
$catalog = new StudioProductCatalog($db);
$iso2 = infrasstudio_current_lang();
$product = $catalog->fetchProductBySlug($solution_ref, $iso2);
if (!$product) {
http_response_code(404);
print '<h1>Produit introuvable</h1>';
exit;
}
ob_start();
try {
?>
<html lang="<?php echo $iso2; ?>">
<head>
<title><?php echo dol_escape_htmltag($product['label']); ?></title>
</head>
<body>
<section class="hero">
<h1><?php echo dol_escape_htmltag($product['label']); ?></h1>
<p><?php echo dol_escape_htmltag($product['tagline']); ?></p>
<img src="<?php echo $product['hero_image']; ?>" alt="...">
</section>
<section class="features">
<ul>
<?php foreach ($product['features'] as $feature): ?>
<li><?php echo dol_escape_htmltag($feature); ?></li>
<?php endforeach; ?>
</ul>
</section>
</body>
</html>
<?php
} catch (Exception $e) { print $e->getMessage(); }
include dol_buildpath('/infrasstudio/core/tpl/website_output.tpl.php', 0);
Mélanger slots et données produit — Vous pouvez combiner les deux : les zones éditoriales (par exemple un titre marketing au-dessus de la grille) en slots, et les zones produit (label, prix, fonctionnalités) lues via StudioProductCatalog. Les deux cohabitent sans conflit.
Le trigger PRODUCT et CATEGORY
Le module installe un trigger qui écoute :
PRODUCT_CREATEPRODUCT_MODIFYPRODUCT_DELETEPRODUCT_PRICE_MODIFYCATEGORY_LINK(uniquement si l'objet lié est un produit)CATEGORY_UNLINK
À chaque événement, le trigger appelle StudioSolutionWrapper::rebuildAll() sur le site configuré.
Note — Si INFRASSTUDIO_WEBSITE_KEY ou INFRASSTUDIO_PUBLIC_DOCROOT ne sont pas configurées, le trigger se termine silencieusement. Ni bruit, ni erreur. Cette discrétion convient aux instances Dolibarr qui n'utilisent pas le catalogue dynamique.
La tâche planifiée horaire (filet de sécurité)
Une tâche planifiée s'exécute toutes les heures et appelle StudioSolutionWrapper::rebuildAllConfigured(). Elle lit les constantes et relance la régénération.
Cette tâche apporte les bénéfices suivants :
- Rattrapage si un trigger a été manqué (import en masse, modification SQL directe, etc.).
- Synchronisation après une migration de serveur.
- Garantie de cohérence sans intervention manuelle.
Reconstruction manuelle en ligne de commande
php htdocs/custom/infrasstudio/scripts/rebuild_solution_wrappers.php \
<ref-site-ou-id> <docroot-public> [entity]
# Exemple
php htdocs/custom/infrasstudio/scripts/rebuild_solution_wrappers.php \
monsite /var/www/monsite 2
Récapitulatif
Vous savez désormais :
- Comprendre l'architecture du catalogue (StudioProductCatalog, StudioSolutionWrapper, gabarit, trigger, tâche planifiée).
- Provisionner les champs personnalisés produit avec le preset générique.
- Interroger les produits via
StudioProductCatalog. - Cartographier les catégories Dolibarr vers vos univers via
INFRASSTUDIO_PRODUCT_UNIVERS_MAP. - Comprendre comment
StudioSolutionWrapper::rebuildAll()génère les wrappers Apache. - Configurer le préfixe et le slug du gabarit par site.
- Écrire le gabarit
solution-detailqui sert tous les produits. - Comprendre le rôle du trigger automatique et de la tâche planifiée de sécurité.
- Lancer une reconstruction manuelle en ligne de commande.
Fin de la Partie IV — Vous maîtrisez désormais l'intégration côté développeur : préparer un site, annoter avec des slots, comprendre la grammaire, brancher des données Dolibarr, gérer le multilingue, créer vos gabarits et exploiter le catalogue dynamique. Vous êtes en mesure de livrer un site clé en main.
La Partie V aborde l'administration et la maintenance. Si vous êtes administrateur Dolibarr, c'est votre prochaine destination.
CHAPITRE 22 — Créer ses propres gabarits de page
Lorsque votre client clique sur « + Nouvelle page » dans le Studio, il choisit un gabarit de départ. Ce chapitre vous explique comment créer vos propres gabarits adaptés à la charte de votre site.
À quoi sert un gabarit
Un gabarit est un squelette de page qui comporte :
- Du HTML structuré (sections, classes CSS, balises sémantiques).
- Des slots pré-déclarés pour les zones éditables.
- Des valeurs par défaut, pour disposer d'une page complète dès la création.
- Des métadonnées (titre par défaut, slug, type de conteneur).
Lorsqu'un client crée une page depuis un gabarit, le module :
- Crée une entrée dans la table
llx_website_page. - Génère un fichier
page<N>.tpl.phpà partir du squelette. - Crée le wrapper Apache
<slug>.php. - Lance un rescan des slots pour les détecter immédiatement.
Structure d'un gabarit
Un gabarit est un dossier dans htdocs/custom/infrasstudio/templates/ :
templates/mon-gabarit/
├── meta.php # Métadonnées du gabarit
└── skeleton.tpl.php # Le squelette HTML avec slots
Le fichier meta.php
Il retourne un tableau de configuration :
<?php
return array(
'code' => 'mon-gabarit', // identifiant unique
'label' => 'Mon Gabarit', // affiché dans l'assistant
'category' => 'page', // page | landing | blog
'description' => "Description courte affichée sous le titre.",
'icon' => 'fa-file-lines', // icône FontAwesome
'type_container' => 'page', // type Dolibarr Website
'default_slug' => 'nouvelle-page', // slug suggéré
);
Champ | Description |
|---|---|
| Identifiant unique. Doit correspondre au nom du dossier. |
| Texte affiché dans la grille de sélection de l'assistant. |
| Permet le regroupement visuel (page, landing, blog). |
| Classe FontAwesome de l'icône de la tuile. |
| Valeur écrite dans
. Valeurs standards :
,
,
,
. |
| Slug suggéré dans le formulaire. Le client peut le modifier. |
Le fichier skeleton.tpl.php
Il s'agit du squelette HTML, identique à un fichier tpl.php standard, à la différence qu'il contient des marqueurs qui seront remplacés au moment de la création.
Marqueurs disponibles
Marqueur | Remplacé par |
|---|---|
| L'identifiant Dolibarr de la nouvelle page (par exemple 42). |
| Le slug URL final (par exemple
). |
| Le code ISO2 de la langue principale (
,
). |
Exemple complet — gabarit page-libre
meta.php
<?php
return array(
'code' => 'page-libre',
'label' => 'Page libre',
'category' => 'page',
'description' => 'Une page simple avec un titre et un grand champ de texte riche.',
'icon' => 'fa-file-lines',
'type_container' => 'page',
'default_slug' => 'nouvelle-page',
);
skeleton.tpl.php
<?php // BEGIN PHP
$websitekey = basename(__DIR__);
if (! defined('USEDOLIBARRSERVER') && ! defined('USEDOLIBARREDITOR')) {
require_once __DIR__ . '/master.inc.php';
}
require_once DOL_DOCUMENT_ROOT . '/core/lib/website.lib.php';
require_once DOL_DOCUMENT_ROOT . '/core/website.inc.php';
ob_start();
try {
// END PHP ?>
<html lang="@@ISO2@@">
<head>
<title>{{slot:page_title|type=text|default=Nouvelle page|label=Titre SEO|group=seo}}</title>
<meta name="description" content="{{slot:page_meta_description|type=text|default=|label=Meta description|group=seo}}" />
<link rel="canonical" href="<?php echo $website->virtualhost; ?>/@@PAGEURL@@.php" />
</head>
<body>
<?php includeContainer('header'); ?>
<main class="container">
<h1>{{slot:page_h1|type=text|default=Titre principal|label=H1|group=hero}}</h1>
<div class="content">
{{slot:page_body|type=richtext|default=<p>Contenu de la page.</p>|label=Contenu}}
</div>
</main>
<?php includeContainer('footer'); ?>
</body>
</html>
<?php // BEGIN PHP
} catch (Exception $e) { print $e->getMessage(); }
include dol_buildpath('/infrasstudio/core/tpl/website_output.tpl.php', 0);
// END PHP ?>
Le bloc final — N'oubliez pas la ligne include dol_buildpath('/infrasstudio/core/tpl/website_output.tpl.php', 0);. C'est elle qui déclenche la résolution des slots et shortcodes au moment du rendu.
Localiser vos gabarits hors du module
Si vous souhaitez livrer des gabarits avec votre projet client sans modifier le module, définissez la constante :
// htdocs/conf/conf.php ou via dolibarr_set_const
$conf->global->INFRASSTUDIO_TEMPLATE_EXTRA_DIR = '/var/www/monsite/templates';
Le module scanne ce répertoire en complément de htdocs/custom/infrasstudio/templates/.
Gabarits livrés par défaut
Code | Description |
|---|---|
| Page libre avec titre et un grand champ texte riche. Pour les pages ponctuelles. |
| Article de blog générique avec hero, introduction, corps et appel à l'action. |
| Article de blog au design moderne (hero CSS, accroche en italique, image secondaire, articles liés). Adaptable à votre charte. |
| Page de destination produit complète (environ 70 slots). Hero, problème, solution, fonctionnalités, contact, FAQ. |
Conseil — Inspirez-vous de example-landing pour comprendre comment structurer un gabarit complexe avec environ 70 slots organisés en sections.
Bonnes pratiques pour vos gabarits
- Préfixez tous les slots du gabarit par un identifiant commun (par exemple
landing_) pour éviter les collisions entre gabarits. - Regroupez les slots avec
group=par section logique (hero, fonctionnalités, contact, etc.). - Donnez des valeurs par défaut représentatives. Le rédacteur dispose ainsi d'un exemple à modifier plutôt que d'une page vide intimidante.
- Incluez les slots SEO (
page_title,page_meta_description) dans tout gabarit de type page. - Incluez les balises Open Graph dans l'en-tête HTML pour le partage social.
- Incluez le helper hreflang si le site est multilingue.
- Testez le gabarit en créant une page réelle depuis l'assistant et vérifiez le rendu public.
Récapitulatif
Vous savez désormais :
- Comprendre l'utilité d'un gabarit (squelette, slots, valeurs par défaut).
- Créer un dossier
templates/<code>/avecmeta.phpetskeleton.tpl.php. - Renseigner les métadonnées (code, label, category, icon, type_container, default_slug).
- Utiliser les marqueurs
@@PAGEID@@,@@PAGEURL@@et@@ISO2@@. - Localiser vos gabarits en dehors du module via
INFRASSTUDIO_TEMPLATE_EXTRA_DIR. - Suivre les bonnes pratiques (préfixe, regroupement, valeurs par défaut, SEO, multilingue).
Le dernier chapitre de la Partie IV détaille le catalogue produit dynamique en profondeur.
CHAPITRE 21 — Gérer le multilingue (pages sœurs)
Dolibarr Website propose deux modèles multilingues différents. Identifier le modèle que vous utilisez est une étape préalable à toute écriture de code. Ce chapitre vous présente les deux options et la manière dont le module s'y intègre.
Les deux modèles multilingues
Modèle | Caractéristique |
|---|---|
A. Slot par langue (recommandé) | Un seul fichier tpl.php sert toutes les langues. Les slots disposent de surcharges par langue. |
B. Pages sœurs (legacy) | Un fichier tpl.php par langue (
,
,
). Modèle hérité des sites Dolibarr Website classiques. |
Recommandé — Adoptez le modèle A pour tout nouveau site. Le modèle B reste pris en charge pour la migration progressive de sites existants. Le module fournit un outil de consolidation B vers A.
Modèle A — Slot par langue (le standard moderne)
Fonctionnement
Une seule page Dolibarr Website existe par concept (par exemple about). Le fichier tpl.php est unique. Les slots possèdent leur valeur canonique (FR par défaut) et des surcharges par langue stockées dans llx_infrasstudio_slot.
<!-- about.tpl.php — UN SEUL fichier pour FR/EN/DE/ES/IT/PT/NL/PL -->
<h1>{{slot:about_title|type=text|default=À propos de nous|label=Titre About}}</h1>
<p>{{slot:about_lead|type=textarea|default=Notre histoire en quelques mots.|label=Accroche}}</p>
Récupérer la langue du visiteur dans le gabarit
Le module résout les slots automatiquement selon la langue détectée. Pour vos propres traitements PHP (afficher la date dans la bonne langue, choisir une image différente par langue), récupérez la langue via :
<?php
// helpers fournis par le module
$iso2 = infrasstudio_current_lang(); // 'fr', 'en', 'de', ...
$locale = infrasstudio_current_locale(); // 'fr_FR', 'en_US', 'de_DE', ...
?>
Cascade de détection
La fonction infrasstudio_current_lang() détecte la langue dans cet ordre :
- Constante
INFRASSTUDIO_LANG_ISOdéfinie par le site (souvent danslang.inc.php). - Paramètre URL
?lang=xx. - Suffixe sur le slug (
about-en.phpdonne en). - Cookie de persistance (
INFRASSTUDIO_LANG_COOKIE). - Valeur de
$langs->defaultlang. - En-tête HTTP
Accept-Languagedu visiteur.
Modèle B — Pages sœurs (legacy)
Il s'agit du modèle Dolibarr Website classique : pour chaque page, vous créez un fichier tpl.php par langue.
about.php # FR (canonique)
about-en.php # EN
about-de.php # DE
about-es.php # ES
...
Si vous reprenez un site existant qui suit ce modèle, deux options s'offrent à vous :
- Conserver le modèle avec des stubs du module.
- Migrer vers le modèle A grâce à l'outil de consolidation en ligne de commande.
Conserver le modèle B avec des stubs
Le module fournit un helper sister_stub.tpl.php qui réduit chaque page sœur à trois lignes et permet de partager le HTML avec la canonique.
Procédure
La page canonique reste un tpl.php classique :
// page5.tpl.php — canonique FR
<?php // bootstrap dolibarr ... ?>
<html>...<h1>{{slot:about_title|type=text|default=À propos|...}}</h1>...</html>
Chaque page sœur devient un stub :
<?php
// page42.tpl.php — sister EN
$_infrasstudio_sister_canonical = 'page5.tpl.php';
$_infrasstudio_sister_lang = 'en';
include dol_buildpath('/infrasstudio/core/tpl/sister_stub.tpl.php', 0);
Le stub force $_GET['lang'] = 'en' puis délègue le rendu à la canonique. Les surcharges EN sont automatiquement utilisées pour résoudre les slots.
Migrer du modèle B vers A en ligne de commande
Un script consolide une famille de pages sœurs en une page canonique et plusieurs stubs :
php htdocs/custom/infrasstudio/scripts/consolidate_sister_pages.php <ref-site> \
[--entity=N] \
[--base-slug=about] \
[--dry-run] \
[--extractor=/path/to/extractor.php]
Ce que fait le script
- Détecte les groupes de pages sœurs parmi les codes ISO2 pris en charge (en, de, es, it, pt, nl, pl).
- Pour chaque groupe :
- Conserve la page tpl FR comme canonique.
- Extrait les valeurs traduites depuis chaque page sœur (par expression régulière ou via un extracteur personnalisé).
- Insère les surcharges dans
llx_infrasstudio_slot. - Réécrit la canonique avec des slots
{{slot:...}}. - Remplace chaque page sœur par un stub de trois lignes.
- Sauvegarde de chaque tpl original avec l'extension
.bak.
Conseil — Lancez d'abord avec --dry-run pour visualiser ce que le script va faire sans rien écrire. Lancez en mode réel uniquement après vérification.
hreflang : déclarer les alternates au navigateur
Pour que Google sache que vos pages sont des traductions les unes des autres, vous devez émettre des balises <link rel="alternate" hreflang="..."> dans l'en-tête HTML.
Le module fournit un helper qui les génère automatiquement :
<head>
...
<?php echo infrasstudio_hreflang_tags($website, $WEBSITE_PAGE); ?>
...
</head>
Sortie type :
<link rel="alternate" hreflang="fr" href="https://exemple.com/about.php" />
<link rel="alternate" hreflang="en" href="https://exemple.com/about-en.php" />
<link rel="alternate" hreflang="de" href="https://exemple.com/about-de.php" />
<link rel="alternate" hreflang="x-default" href="https://exemple.com/about.php" />
Compatibilité avec les deux modèles — Pour le modèle A, le helper émet une seule URL canonique avec les langues différenciées par ?lang=. Pour le modèle B, il émet une URL par page sœur.
Sélecteur de langue côté gabarit
Pour permettre au visiteur de changer de langue, vous devez exposer un sélecteur. Le helper infrasstudio_translated_url($iso2) génère l'URL équivalente de la page courante dans une autre langue :
<nav class="lang-switcher">
<?php foreach (array('fr', 'en', 'de', 'es') as $iso): ?>
<a href="<?php echo infrasstudio_translated_url($iso); ?>">
<?php echo strtoupper($iso); ?>
</a>
<?php endforeach; ?>
</nav>
Charger les fichiers de langue du site
Si votre site utilise des fichiers .lang Dolibarr (par exemple pour les libellés de menu), chargez-les en début de tpl :
<?php
require_once __DIR__ . '/lang.inc.php';
$langs->loadLangs(array('website_main', 'website_blog'));
?>
Et utilisez les clés via $langs->trans('Key') ou via le slot avec default=@lang:Key.
Récapitulatif
Vous savez désormais :
- Distinguer le modèle A (slot par langue, recommandé) du modèle B (pages sœurs, legacy).
- Récupérer la langue du visiteur via
infrasstudio_current_lang(). - Convertir un site existant utilisant le modèle B en utilisant le helper
sister_stub.tpl.php. - Migrer en bloc B vers A grâce à l'outil
consolidate_sister_pages.php. - Émettre les balises hreflang automatiquement avec
infrasstudio_hreflang_tags. - Construire un sélecteur de langue avec
infrasstudio_translated_url.
CHAPITRE 20 — Insérer des données Dolibarr (shortcodes)
Les slots stockent du contenu éditable. Les shortcodes, eux, affichent des données Dolibarr lues en direct (produits, catégories, informations société, médias). Ils sont résolus au moment du rendu, à chaque consultation de page.
Distinction entre slot et shortcode
Slot | Shortcode |
|---|---|
Stocke du contenu éditable par le client. | Affiche des données Dolibarr lues en direct. |
Persistance dans
. | Aucune persistance — résolu à chaque requête. |
Exemple :
| Exemple :
|
Syntaxe générale
{{<namespace>:<sélecteur>.<champ>}}
- namespace : la source de données (
product,category,dict,mysoc,extrafield,media). - sélecteur : la manière d'identifier l'élément (le plus souvent
ref=xxxouid=N). - champ : la donnée à extraire de l'élément.
Namespace product
Lit un produit dans la table llx_product.
<h2>{{product:ref=supplyflow-pro.label}}</h2>
<p>{{product:ref=supplyflow-pro.description}}</p>
<span class="price">{{product:ref=supplyflow-pro.price}} €</span>
<span>{{product:ref=supplyflow-pro.ef_tagline}}</span>
<img src="{{product:ref=supplyflow-pro.ef_hero_image}}" alt="...">
Champs disponibles
Champ | Source |
|---|---|
,
,
| Champs natifs (traduits selon la langue du visiteur via
) |
,
,
| Prix HT, TTC, coût (formaté selon la langue) |
,
| Référence, statut commercialisable |
| Tout champ personnalisé (
,
, etc.) |
Le marqueur $current
Pour un même gabarit utilisé par plusieurs produits (par exemple solution-detail servi par les wrappers solution-<ref>.php), utilisez ref=$current :
<h1>{{product:ref=$current.label}}</h1>
<p>{{product:ref=$current.ef_tagline}}</p>
Le module résout $current via la variable globale $infrasstudio_current_product_ref, posée par le wrapper.
Namespace category
Lit une catégorie dans la table llx_categorie.
<h3>{{category:id=5.label}}</h3>
<p>{{category:id=5.description}}</p>
Namespace dict
Lit une entrée d'un dictionnaire Dolibarr (c_country, c_currencies, etc.).
<span>{{dict:c_country.code=FR.label}}</span>
<span>{{dict:c_currencies.code_iso=EUR.label}}</span>
Namespace mysoc
Lit les informations de la société courante ($mysoc).
<footer>
© {{mysoc.name}} — {{mysoc.address}}, {{mysoc.zip}} {{mysoc.town}}
Tél : {{mysoc.phone}} — Courriel : {{mysoc.email}}
SIRET {{mysoc.idprof2}} — TVA {{mysoc.tva_intra}}
</footer>
Champs disponibles
name, address, zip, town, country_code, phone, fax, email, url, capital, tva_intra, idprof1 à idprof6, logo, logo_small, logo_squarred.
Namespace extrafield
Lit un champ personnalisé d'un objet Dolibarr quelconque.
{{extrafield:table=product|ref=supplyflow.field=tagline}}
{{extrafield:table=societe|id=42|field=segment}}
{{extrafield:table=product|ref=$current|field=tagline}}
Plus générique que {{product:ref=X.ef_tagline}} mais plus verbeux. À utiliser lorsque le namespace dédié n'existe pas (par exemple pour societe ou contact).
Namespace media
Lit un média de la bibliothèque du module (llx_infrasstudio_media).
<img src="{{media:ref=hero-1.url}}" alt="{{media:ref=hero-1.alt}}">
<img src="{{media:ref=hero-1.thumb}}">
<img src="{{media:ref=hero-1.card}}">
<img src="{{media:ref=hero-1.wide}}">
Champs disponibles
Champ | Description |
|---|---|
| URL du fichier original |
| Variante 200 × 200 |
| Variante 640 × 480 |
| Variante 1600 × 1200 |
| Texte alternatif (résolu selon la langue) |
,
,
| Métadonnées |
Combiner shortcodes et slots
Vous pouvez intégrer un shortcode dans la valeur par défaut d'un slot, ou dans le contenu d'un slot de type texte riche :
<!-- Shortcode dans le default d'un slot -->
<p>{{slot:greeting|type=text|default=Bienvenue chez {{mysoc.name}}}}</p>
<!-- Shortcode dans un slot richtext (l'éditeur peut le saisir librement) -->
<div>{{slot:long_intro|type=richtext|default=Notre équipe à {{mysoc.town}} vous accompagne.}}</div>
Cas d'usage — Une page de remerciements après commande qui dit « Merci, votre commande sera livrée à... ». Le HTML reste statique côté gabarit, mais le rendu est personnalisé pour chaque visiteur.
Étendre avec un namespace personnalisé
Pour ajouter un namespace propre à votre projet, déposez un fichier dans htdocs/custom/infrasstudio/shortcodes/ :
// shortcodes/myorg.shortcode.php
function infrasstudio_shortcode_myorg_resolve($args, $context)
{
global $db;
$id = isset($args['id']) ? (int) $args['id'] : 0;
$field = isset($args['_field']) ? $args['_field'] : 'name';
if ($id <= 0) { return ''; }
$sql = "SELECT name, sector FROM ".MAIN_DB_PREFIX."myorg WHERE rowid = ".$id;
$resql = $db->query($sql);
if (!$resql) { return ''; }
$obj = $db->fetch_object($resql);
$db->free($resql);
return isset($obj->$field) ? (string) $obj->$field : '';
}
Utilisable dans n'importe quel gabarit :
<h2>{{myorg:id=12.name}}</h2>
<p>Secteur : {{myorg:id=12.sector}}</p>
Pièges et performance
Shortcode dans une boucle — Si vous résolvez cent fois le même shortcode dans une page, vous effectuez cent requêtes SQL. Mettez vos données en cache dans une variable locale avant la boucle, ou utilisez les fonctions natives Dolibarr (Product::fetch) en PHP.
Shortcode introuvable — Si {{product:ref=inexistant.label}} ne résout rien, le module retourne une chaîne vide silencieusement. Aucune erreur n'est affichée. Testez en local avant la livraison.
Shortcodes dans les attributs — Les shortcodes fonctionnent dans tous les contextes HTML, attributs compris : <img src="{{media:ref=X.url}}">, <a href="{{slot:cta_url|...}}">, etc.
Récapitulatif
Vous savez désormais :
- Distinguer slots (contenu éditable) et shortcodes (données Dolibarr).
- Utiliser les six namespaces livrés (product, category, dict, mysoc, extrafield, media).
- Utiliser
$currentdans les gabarits partagés entre plusieurs produits. - Combiner shortcodes et slots.
- Ajouter votre propre namespace via un fichier dans
shortcodes/. - Anticiper les pièges (boucles, valeurs absentes).
CHAPITRE 19 — La grammaire des slots en détail
Référence exhaustive de tous les types de slot et de leurs attributs. Gardez ce chapitre à portée de main lors de l'annotation d'un template.
Format général
{{slot:<name>|type=<type>|default=<value>|label=<text>|group=<section>|help=<text>|maxlength=<int>|options=<csv>}}
Tous les attributs, à l'exception de name et type, sont facultatifs. L'ordre est libre. Le séparateur est le caractère pipe.
Règles syntaxiques
Règle | Détail |
|---|---|
Identifiant |
, 64 caractères maximum. Pas de tirets, pas de majuscules. |
Unicité | Unique par page. Deux slots avec le même nom sur la même page produisent un avertissement au scan. |
Pas d'espaces | Aucun espace de part et d'autre du signe
. Aucun espace dans les noms d'attributs. |
Échappement | Le pipe à l'intérieur d'une valeur n'est pas pris en charge. Évitez-le dans les valeurs
. |
Une seule ligne | Un token de slot tient sur une seule ligne. Aucun saut de ligne ne doit y être présent. |
Les dix types de slot
Type text — Texte court
Champ d'une seule ligne, sans mise en forme.
<h1>{{slot:hero_title|type=text|default=Bienvenue|label=Titre principal|maxlength=80}}</h1>
- Interface : champ de saisie simple.
- Idéal pour : titres, libellés, boutons d'appel à l'action, copyright.
- Compteur de caractères affiché si
maxlengthest défini.
Type textarea — Texte long brut
Multi-lignes, sans mise en forme HTML.
<p class="lead">{{slot:hero_lead|type=textarea|default=Une accroche.|label=Accroche|maxlength=300}}</p>
- Interface : zone de texte multi-lignes.
- Les retours à la ligne sont automatiquement convertis en balises
<br>au rendu. - Idéal pour : accroches, paragraphes simples.
Type richtext — Texte riche WYSIWYG
Mise en forme complète via CKEditor.
<div class="post-body">
{{slot:post_body|type=richtext|default=<p>Contenu de l'article.</p>|label=Corps de l'article}}
</div>
- Interface : éditeur CKEditor (Format, gras, italique, listes, liens, couleurs, alignement, etc.).
- Idéal pour : corps d'articles, descriptions longues, conditions générales.
- La valeur stockée contient du HTML (
<p>,<strong>, etc.).
Type image — Média image
<img src="{{slot:hero_image|type=image|default=/medias/hero.jpg|label=Image hero}}" alt="...">
- Interface : champ texte, bouton de sélection dans la bibliothèque, bouton de suppression et vignette d'aperçu.
- Stocke soit une URL absolue, soit un shortcode
{{media:ref=X.url}}. - Non traduisible par défaut : la même image est servie dans toutes les langues.
Type url — Lien
<a href="{{slot:hero_cta_url|type=url|default=/contact|label=URL du bouton}}">...</a>
- Interface : champ texte avec validation URL légère.
- Idéal pour : URL de bouton, liens vers les réseaux sociaux, URL de partage.
Type icon — Icône FontAwesome
{{slot:feature_1_icon|type=icon|default=fa-solid fa-rocket|label=Icône feature 1}}
- Interface : champ classe, sélecteur de couleur, vingt icônes proposées en accès rapide, aperçu en direct.
- Stockage en JSON :
{"class":"fa-solid fa-star","color":"#fbbf24"}. - Rendu :
<i class="fa-solid fa-star" style="color:#fbbf24"></i>. - Sécurisé : liste blanche sur la classe (a-zA-Z0-9_-) et expression régulière hexadécimale sur la couleur.
Type color — Couleur
<section style="background-color:{{slot:section_bg|type=color|default=#19052d|label=Couleur de fond}}">
- Interface : sélecteur de couleur HTML5, champ hexadécimal, bouton de retour à la valeur par défaut.
- Format strict :
#RRGGBBou#RRGGBBAA(avec transparence). - Non traduisible.
Type number — Nombre
<span class="stat">{{slot:stats_clients|type=number|default=42|label=Nombre de clients}}</span>
Type bool — Booléen
<?php if ('{{slot:hero_show_badge|type=bool|default=1|label=Afficher le badge}}'): ?>
<span class="badge">Nouveau</span>
<?php endif; ?>
- Interface : case à cocher.
- Valeur : 0 ou 1.
Type select — Liste déroulante
<section class="hero hero-{{slot:hero_layout|type=select|options=light,dark,gradient|default=light|label=Style du hero}}">
Valeurs par défaut spéciales
default=@lang:KEY — Résolution via les fichiers de langue
Lorsque votre site utilise déjà des fichiers .lang Dolibarr (cas typique pour les sites multilingues existants), vous pouvez réutiliser les clés au lieu de les dupliquer dans les slots :
<h1>{{slot:hero_title|type=text|default=@lang:HeroTitle|label=Titre du hero}}</h1>
Au moment du rendu, le module résout via $langs->trans('HeroTitle') selon la langue du visiteur. Les fichiers .lang du site présents dans DOL_DATA_ROOT/<entity>/website/<ref>/langs/ sont chargés automatiquement.
Cas d'usage — Migration progressive d'un site existant : vous conservez vos fichiers .lang en l'état, vous ajoutez les slots, et le client peut soit éditer dans le Studio (surcharge), soit conserver la traduction du .lang (canonique).
Récapitulatif des types et de leur traduisibilité
Type | Interface | Traduisible |
|---|---|---|
| Champ de saisie | Oui |
| Zone de texte | Oui |
| CKEditor | Oui |
| Sélecteur de média | Non |
| Champ de saisie | Non |
| Classe et sélecteur de couleur | Non |
| Sélecteur de couleur | Non |
| Champ numérique | Oui (rare) |
| Case à cocher | Non |
| Menu déroulant | Non |
Pièges fréquents
Slots dans des attributs JSON intégrés — Si vous avez du JSON intégré dans une balise (par exemple data-config="{...}"), n'y placez pas de slot. Les doubles accolades sont aussi un délimiteur Mustache et risquent de casser les bibliothèques JavaScript qui parseraient ce JSON.
Identifiant trop long — La limite est de 64 caractères. Au-delà, le scanner rejette silencieusement, ce que met en évidence l'option --lint.
Espaces autour des = — Le scanner rejette type = text. Utilisez toujours type=text.
Caractère pipe dans une valeur — default=A|B casse l'analyseur. Utilisez une autre séparation, ou laissez default vide et saisissez la valeur via le Studio.
Récapitulatif
Vous savez désormais :
- La syntaxe complète d'un token de slot.
- Les dix types disponibles et leurs interfaces respectives.
- La résolution
@lang:KEYpour réutiliser les fichiers .lang Dolibarr. - Quels types sont traduisibles ou non.
- Les pièges syntaxiques fréquents.
Le chapitre suivant aborde les shortcodes, qui injectent des données Dolibarr dans le HTML.
CHAPITRE 18 — Annoter un template avec des slots
Le slot est l'unité de base du module. Ce chapitre vous montre comment transformer un HTML statique en HTML annoté, prêt à être édité par le client. Il s'agit de l'opération la plus fréquente dans votre travail d'intégrateur.
Le principe en deux phrases
- Vous écrivez votre HTML normalement, comme vous le feriez sans le module.
- Aux endroits que vous voulez rendre éditables, vous remplacez le contenu en dur par un token
{{slot:...}}.
C'est tout. Le module se charge du reste : détection automatique, persistance, rendu, interface d'édition.
Premier exemple complet
Avant — page non éditable
<section class="hero">
<h1>Bienvenue chez Keatic</h1>
<p>Votre partenaire numérique de confiance depuis 2010.</p>
<a href="/contact" class="btn">Nous contacter</a>
</section>
Après — page éditable via le Studio
<section class="hero">
<h1>{{slot:hero_title|type=text|default=Bienvenue chez Keatic|label=Titre du hero|group=hero}}</h1>
<p>{{slot:hero_lead|type=textarea|default=Votre partenaire numérique de confiance depuis 2010.|label=Accroche|group=hero}}</p>
<a href="{{slot:hero_cta_url|type=url|default=/contact|label=URL du bouton|group=hero}}" class="btn">
{{slot:hero_cta_label|type=text|default=Nous contacter|label=Libellé du bouton|group=hero}}
</a>
</section>
Résultat — Le client voit dans le Studio un panneau « Hero » comportant quatre champs (titre, accroche, URL du bouton, libellé du bouton). Aucun HTML à modifier de son côté.
Anatomie d'un token de slot
{{slot:<identifiant>|type=<type>|attribut1=valeur1|attribut2=valeur2}}
Élément | Obligatoire | Description |
|---|---|---|
| Oui | Préfixe fixe qui déclare un slot. |
Identifiant | Oui | Unique par page. Caractères acceptés : minuscules, chiffres, tiret bas. 64 caractères maximum. |
| Oui | text, textarea, richtext, image, url, number, select, bool, icon, color. |
| Recommandé | Valeur de repli si le slot n'est pas encore édité. |
| Recommandé | Libellé affiché à l'éditeur dans le Studio. |
| Facultatif | Regroupe les slots dans une section de l'interface. |
| Facultatif | Aide affichée sous le champ. |
| Facultatif | Limite de caractères pour text et textarea. |
| Si type=select | Liste CSV des valeurs possibles. |
Conseil — La grammaire complète est détaillée au Chapitre 19.
Où placer un slot
Un slot peut être placé à de nombreux endroits dans votre HTML.
Dans le contenu d'une balise (cas le plus fréquent)
<h1>{{slot:title|type=text|default=Bienvenue}}</h1>
Dans un attribut HTML
<img src="{{slot:hero_image|type=image|default=/medias/hero.jpg}}" alt="...">
<a href="{{slot:cta_url|type=url|default=/contact}}">...</a>
<section style="background-color:{{slot:bg_color|type=color|default=#19052d}}">
Dans une chaîne de classes CSS
<i class="fa-solid {{slot:hero_icon|type=text|default=fa-rocket}}"></i>
À ne pas faire — Ne placez pas un slot dans un commentaire HTML, dans un bloc <script>, ou dans du JSON intégré. Le scanner détecte tous les tokens et peut générer des slots fantômes.
Convention de nommage des identifiants
L'identifiant est libre, mais une convention claire facilite la maintenance.
Schéma recommandé
<section>_<champ> ou <page>_<section>_<champ>
Bon | À éviter |
|---|---|
|
(trop générique, risque de collision) |
|
(incompréhensible) |
|
(les majuscules sont rejetées par le scanner) |
Recommandé — Si votre site comporte cinq sections (hero, features, stats, testimonials, footer), préfixez tous vos slots par leur section. Le client retrouvera ainsi plus rapidement ce qu'il cherche dans le Studio.
Utiliser le groupe pour structurer l'interface
L'attribut group détermine sous quelle section le slot apparaît dans le panneau « Contenu de la page » du Studio.
{{slot:hero_title|type=text|group=hero|...}}
{{slot:hero_lead|type=textarea|group=hero|...}}
{{slot:hero_image|type=image|group=hero|...}}
{{slot:features_card_1_title|type=text|group=features|...}}
{{slot:features_card_2_title|type=text|group=features|...}}
{{slot:features_card_3_title|type=text|group=features|...}}
{{slot:footer_copyright|type=text|group=footer|...}}
Dans le Studio, ces slots seront regroupés visuellement sous trois sections : Hero, Features et Footer.
Le rescan après ajout
Ajouter un slot dans un fichier tpl.php ne suffit pas : le module doit le détecter et l'enregistrer en base. Pour cela, lancez un rescan.
Méthode A — Via l'interface Studio
- Outils → InfraSStudio → Contenu des pages.
- Sélectionnez votre site.
- Cliquez sur Rescanner en haut.
- Le module parcourt tous les fichiers
tpl.phpet synchronise les slots.
Méthode B — En ligne de commande
php htdocs/custom/infrasstudio/scripts/rescan_slots.php <ref-du-site> --entity=<N>
Sortie typique :
Rescanning website #1 — monsite (entity 2)
Pages scanned : 22
Slots added : 3
Slots updated : 40
Slots orphaned : 0
Mode de validation — Ajoutez l'option --lint pour détecter les erreurs de syntaxe avant de les valider :php rescan_slots.php <ref> --lint
Le code de sortie est 0 en l'absence d'erreur, 1 en présence d'avertissements, 2 en cas d'erreurs. Cette commande peut être intégrée dans un crochet de pré-commit.
Slots orphelins
Lorsque vous supprimez un slot d'un fichier tpl.php, son enregistrement en base passe au statut « orphelin ». Le module le conserve pendant 30 jours avant de le supprimer automatiquement (via une tâche planifiée).
Cette politique présente un avantage : si vous restaurez le slot dans le HTML pendant cette période, sa valeur précédente est récupérée.
Note — Pour forcer la purge immédiate des slots orphelins :php rescan_slots.php <ref> --purge-orphans
Liste de contrôle d'annotation
Avant de livrer une page annotée :
- Chaque slot possède un
typeexplicite. - Chaque slot possède une valeur
default, garantissant la lisibilité de la page si la base venait à se vider. - Chaque slot possède un
labelen français clair, destiné à l'éditeur. - Les slots sont regroupés par section avec
group. - Les identifiants suivent la convention
<section>_<champ>. - Le rescan a été lancé sans avertissement ni erreur.
- Vous avez ouvert la page dans le Studio et vérifié la présence de tous les slots.
Le chapitre suivant détaille la grammaire complète des slots, avec tous les types et leurs comportements.
CHAPITRE 17 — Préparer un site Dolibarr Website
Avant de pouvoir éditer un site via le module, ce site doit exister côté Dolibarr Website. Ce chapitre s'adresse au développeur qui démarre un nouveau projet : créer le site, le câbler proprement, et préparer le terrain pour le Studio.
Étape 1 — Créer le site dans Dolibarr Website
- Connectez-vous à Dolibarr en tant qu'administrateur.
- Rendez-vous dans Accueil → Sites web.
- Cliquez sur Nouveau site.
- Renseignez les informations suivantes :
- Référence : identifiant court sans espace, par exemple
monsiteoukeaticweb. C'est l'identifiant interne, utilisé partout (URLs des wrappers, dossiers de données, constantes de configuration). - Description : libellé facultatif.
- Virtualhost principal : URL publique, par exemple
https://monsite.com. - Langue principale : code de la locale, par exemple
fr_FR. - Autres langues : valeurs séparées par des virgules, par exemple
en_US,de_DE,es_ES.
- Référence : identifiant court sans espace, par exemple
- Enregistrez.
Convention de référence — Privilégiez un identifiant court et stable. Cette référence apparaîtra dans les chemins de fichiers, les URLs internes et les constantes de configuration. La modifier ultérieurement nécessite plusieurs ajustements.
Étape 2 — Configurer le virtualhost Apache
Le module Website ne configure pas Apache pour vous. Vous devez créer un VirtualHost qui pointe sur le docroot du site.
Arborescence type
/var/www/monsite/ # docroot Apache du site
├── index.php # wrapper page d'accueil
├── <alias>.php # autres wrappers générés
├── master.inc.php # bootstrap (inclut DOL_DOCUMENT_ROOT)
├── medias -> lien symbolique vers DOL_DATA_ROOT/<entity>/medias/
└── ...
DOL_DATA_ROOT/<entity>/website/monsite/ # dossier de données du site
├── page1.tpl.php # gabarits des pages
├── page2.tpl.php
├── ...
└── htmlheader.html # en-tête commun éventuel
Exemple de VirtualHost minimal
<VirtualHost *:443>
ServerName monsite.com
DocumentRoot /var/www/monsite
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/monsite.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/monsite.com/privkey.pem
<Directory /var/www/monsite>
Options FollowSymLinks
AllowOverride None
Require all granted
</Directory>
# PHP-FPM dédié recommandé
<FilesMatch \.php$>
SetHandler "proxy:unix:/run/php/php8.2-fpm.monsite.sock|fcgi://localhost"
</FilesMatch>
</VirtualHost>
Note — Un pool PHP-FPM dédié est recommandé pour isoler les performances et les variables d'environnement par site. Le pool peut tourner sous un utilisateur spécifique pour faciliter la gestion des permissions.
Étape 3 — Le lien symbolique medias
Pour que les images téléversées soient servies directement par Apache (mode média « native »), il faut un lien symbolique :
cd /var/www/monsite
ln -sfn /mnt/data/dolibarr/<entity>/medias medias
ls -la medias # doit pointer sur le dossier de données Dolibarr
Conseil — Si vous ne pouvez pas créer ce lien symbolique, basculez le site en mode média module dans la configuration du module. Les images seront servies via document.php, avec un coût de performance modéré.
Étape 4 — Le master.inc.php multicompany
Si votre installation Dolibarr fonctionne en multicompany, le fichier master.inc.php du site doit définir DOLENTITY avant le chargement :
<?php
// /var/www/monsite/master.inc.php
define('DOLENTITY', 2); // l'entity correspondant au client
require_once '/var/www/dolibarr/htdocs/master.inc.php';
Avertissement — Sur une instance multicompany sans DOLENTITY, le site renverra une erreur 503 ou affichera les données de la mauvaise entity. C'est l'erreur la plus fréquemment rencontrée lors de la mise en service.
Étape 5 — Créer la page d'accueil
Toujours dans le module Website Dolibarr :
- Sélectionnez votre site.
- Cliquez sur Nouvelle page.
- Renseignez :
- Page URL :
home,indexou autre. - Title : Accueil.
- Type container :
page. - Lang :
fr_FR. - Status : Brouillon (le passage à Publié interviendra plus tard).
- Page URL :
- Enregistrez.
- Dolibarr crée automatiquement les fichiers
/var/www/monsite/home.phpetpage<N>.tpl.php.
Étape 6 — Activer le site dans le module
La procédure complète est détaillée au Chapitre 7. En résumé :
- Outils → InfraSStudio → Configuration.
- Cochez votre site dans la liste.
- Choisissez le mode média (native recommandé).
- Enregistrez.
Étape 7 — Annoter les premières pages avec des slots
Cette étape fait l'objet du Chapitre 18. En quelques mots : modifiez le fichier page<N>.tpl.php pour ajouter des tokens {{slot:nom|type=...}} aux endroits que vous souhaitez rendre éditables.
Étape 8 — Vérifier avec la page Diagnostic
Avant de livrer le site au client, lancez le diagnostic (Outils → InfraSStudio → Diagnostic) :
- Tous les voyants verts dans Environnement, Schéma SQL, Stockage et Intégration Dolibarr.
- Le site géré apparaît dans la section Sites avec docroot résolu, mode média correct et dossier de données accessible en écriture.
Récapitulatif
Votre site est prêt si :
- Le site est créé dans Dolibarr Website (référence, virtualhost, langues).
- Le VirtualHost Apache pointe sur le bon docroot.
- Le lien symbolique
mediasest en place (mode native), ou la constanteINFRASSTUDIO_SITE_<id>_MEDIA_MODE=moduleest définie. - Le fichier
master.inc.phpdéfinitDOLENTITYen multicompany. - Au moins une page existe (l'accueil).
- Le site est coché dans la configuration du module.
- La page Diagnostic est entièrement verte.
Le chapitre suivant aborde l'annotation des templates avec des slots.
Partie III — Pour l'utilisateur final
CHAPITRE 16 — Référencement, sitemap et partage social
Avoir un beau contenu est nécessaire ; obtenir une visibilité de Google et des réseaux sociaux est tout aussi important. Le module intègre l'ensemble des outils de référencement de base directement dans l'éditeur, sans extension tierce.
Le panneau SEO d'une page
Pour chaque page, vous pouvez personnaliser ses métadonnées de référencement via un panneau dédié dans la barre d'outils.
Accéder au panneau
- Ouvrez la page dans l'éditeur.
- Dans la barre d'outils centrale, cliquez sur SEO.
- Une fenêtre de 720 pixels de largeur s'ouvre.
Les champs disponibles
Champ | Description | Cible |
|---|---|---|
Titre SEO | Le titre affiché dans l'onglet du navigateur et dans les résultats Google. | 50 à 60 caractères |
Meta description | Le texte de présentation sous le titre dans Google. | 140 à 160 caractères |
Mots-clés | Mots-clés séparés par des virgules. | Facultatif — peu utilisé par Google moderne |
Image Open Graph | Image affichée lorsque la page est partagée sur Facebook, LinkedIn, Twitter, WhatsApp. | 1200 × 630 px recommandé |
L'aperçu Google en direct
En haut de la fenêtre, un aperçu live reproduit l'affichage d'un résultat Google :
- L'URL de la page (en gris).
- Le titre (en bleu).
- La meta description (en gris).
L'aperçu se met à jour à chaque saisie. Vous voyez immédiatement si votre titre est tronqué ou si votre description est trop longue.
Compteurs colorés — À côté de chaque champ, un compteur indique le nombre de caractères :
Vert : dans la plage idéale.
Orange : en dehors de la plage mais acceptable.
Rouge : trop long, sera tronqué par Google.
Choisir l'image Open Graph
- Dans la fenêtre SEO, cliquez sur Choisir une image.
- La bibliothèque média s'ouvre.
- Sélectionnez une image ou téléversez-en une nouvelle.
- L'image apparaît à droite de l'aperçu Google.
Format idéal — 1200 × 630 px (ratio 1.91:1) pour Facebook et LinkedIn. Format JPG ou PNG. Affichez votre logo et un texte court qui résume la page. Évitez les images de banque génériques.
Lorsqu'une image Open Graph est renseignée, le module ajoute automatiquement les balises Open Graph et Twitter Cards dans l'en-tête HTML de la page :
<meta property="og:image" content="..." />
<meta property="og:title" content="..." />
<meta property="og:description" content="..." />
<meta name="twitter:card" content="summary_large_image" />
Enregistrer le SEO
- Modifiez les champs.
- Cliquez sur Enregistrer en bas de la fenêtre.
- Le module met à jour la base de données (
llx_website_page) et le fichiertpl.phpen synchronisant les balises HTML. - L'aperçu se rafraîchit.
Note — Les métadonnées SEO ne suivent pas le cycle de publication des slots. Une fois enregistrées, elles sont visibles publiquement immédiatement.
Sitemap.xml
Le sitemap est le fichier que Google utilise pour découvrir toutes les pages de votre site. Le module le génère automatiquement à partir de votre liste de pages.
Contenu généré
- Toutes les pages au statut publié.
- Les pages au statut retiré du site sont exclues.
- Les pages sœurs (autres langues) sont déclarées comme alternates via
<xhtml:link rel="alternate">.
Régénérer le sitemap
Méthode A — Bouton dans l'éditeur
- Rendez-vous dans la liste des pages d'un site.
- Cliquez sur le bouton Sitemap en haut.
- Le module régénère le fichier
sitemap.xmlà la racine du docroot. - Une notification confirme l'opération.
Méthode B — En ligne de commande (administrateurs)
php htdocs/custom/infrasstudio/scripts/generate_sitemap.php <ref-du-site> <entity>
Cette méthode convient à une planification quotidienne automatisée.
Recommandé — Soumettez votre sitemap à Google Search Console une seule fois. Google reviendra ensuite le consulter automatiquement à intervalles réguliers.
Balises hreflang multilingues
Pour un site multilingue, Google a besoin de savoir quelles pages sont des traductions les unes des autres. C'est le rôle des balises <link rel="alternate" hreflang="...">.
Le module génère ces balises automatiquement, à condition que votre développeur ait inclus le helper dans l'en-tête du gabarit :
<link rel="alternate" hreflang="fr" href="https://exemple.com/page" />
<link rel="alternate" hreflang="en" href="https://exemple.com/page-en" />
<link rel="alternate" hreflang="de" href="https://exemple.com/page-de" />
<link rel="alternate" hreflang="x-default" href="https://exemple.com/page" />
Conseil — Si vous ne voyez pas ces balises sur votre site, demandez à votre développeur d'ajouter <?php echo infrasstudio_hreflang_tags($website, $page); ?> dans l'en-tête de vos gabarits.
Liste de contrôle SEO par page
Avant de publier une nouvelle page, vérifiez les points suivants :
- Le titre SEO compte 50 à 60 caractères et contient le mot-clé principal.
- La meta description compte 140 à 160 caractères et incite au clic.
- L'image Open Graph est définie ; à défaut, le partage social affichera une vignette générique.
- Toutes les images possèdent un texte alternatif (renseigné dans la bibliothèque média).
- Le H1 (souvent un slot
page_title) est unique et descriptif. - L'URL (slug) est en minuscules, sans accents, avec des tirets pour séparer les mots.
Outils de mesure du référencement
Le module génère le SEO mais ne le mesure pas. Pour suivre vos résultats, utilisez les outils standards :
- Google Search Console : permet de découvrir les pages indexées, les requêtes qui génèrent des clics, les erreurs.
- Google Analytics ou Matomo : trafic, comportement des visiteurs, conversions.
- PageSpeed Insights : performance de chargement et indicateurs Core Web Vitals.
- Outils de test Open Graph : Facebook Sharing Debugger, LinkedIn Post Inspector.
Récapitulatif
Vous savez désormais :
- Renseigner le titre SEO, la meta description, les mots-clés et l'image Open Graph d'une page.
- Lire l'aperçu Google en direct avec ses compteurs colorés.
- Ajouter une image Open Graph pour un partage social soigné.
- Régénérer le sitemap.xml manuellement ou en ligne de commande.
- Comprendre l'utilité des balises hreflang multilingues.
- Suivre une liste de contrôle SEO complète avant publication.
Fin de la Partie III — Vous savez désormais utiliser le module au quotidien : modifier le contenu, gérer les médias, publier, traduire, gérer un blog, exploiter un catalogue produit et soigner le référencement. Vous êtes autonome.
La Partie IV s'adresse aux développeurs intégrateurs. Si ce n'est pas votre rôle, vous pouvez passer directement aux Annexes (glossaire, FAQ, historique des versions).
CHAPITRE 15 — Catalogue produit dynamique
Si votre site présente un catalogue de produits Dolibarr (services, logiciels, abonnements), le module peut générer automatiquement une page web dédiée à chaque produit. Vous ajoutez un produit dans Dolibarr, sa page web est créée sans intervention supplémentaire.
Le concept
Vous disposez probablement déjà de produits dans Dolibarr (table llx_product) avec leur fiche commerciale (libellé, description, prix). Sur votre site web, vous souhaitez :
- Un catalogue qui répertorie tous les produits actifs.
- Une page détaillée par produit.
- Une mise à jour automatique : tout nouveau produit donne une nouvelle page sans intervention manuelle.
Le module remplit exactement ce besoin. Vous écrivez un seul gabarit de fiche produit (la page solution-detail), et le module génère un wrapper solution-<ref>.php pour chaque produit publié.
Préparer un produit Dolibarr pour le catalogue
Pour qu'un produit apparaisse dans le catalogue web, deux conditions doivent être remplies :
Champ | Valeur requise |
|---|---|
Statut commercialisable (
) | À vendre (= 1) |
Publié sur le site (champ personnalisé
) | Coché (= 1) |
Trois états possibles pour un produit
tosell | published | Visibilité |
|---|---|---|
0 | — | Invisible partout (commercial et web) |
1 | 0 | Brouillon — modifiable côté Studio mais invisible publiquement |
1 | 1 | Publié — la carte apparaît sur le catalogue et la page de détail est servie |
Accéder à la section Produits
- Ouvrez l'éditeur Studio.
- Dans la colonne de gauche, cliquez sur l'onglet Produits.
- La liste de tous vos produits commercialisables s'affiche.
Pour chaque produit, vous voyez :
- Sa référence et son libellé.
- Son type (SaaS, Extension, Application instantanée, etc.).
- Son statut : publié (vert) ou brouillon (orange).
Modifier un produit
- Cliquez sur un produit dans la liste.
- L'aperçu central charge la page
solution-detailavec ce produit. - L'inspecteur à droite affiche les champs natifs Dolibarr et les champs personnalisés.
Champs modifiables
Catégorie | Champs |
|---|---|
Champs natifs Dolibarr (traduisibles) | libellé, description (texte riche) |
Champs personnalisés traduisibles | accroche, libellé du bouton, déploiement, compatibilité, support, langues, fonctionnalités, paliers tarifaires |
Champs personnalisés non traduisibles | image principale, URL du bouton, étiquette |
Modifier un champ
- Cliquez sur le champ dans l'inspecteur, ou directement sur l'élément correspondant dans l'aperçu central.
- L'inspecteur passe en mode édition avec un bouton ← Retour.
- Modifiez la valeur.
- Pour les champs traduisibles, dépliez la section Autres langues.
- Cliquez sur Enregistrer en bas du panneau. Le compteur indique le nombre de champs modifiés en attente.
- L'aperçu se rafraîchit.
Conseil — Pour les produits, l'enregistrement automatique n'est pas activé : vous cliquez sur « Enregistrer » manuellement. Ce choix est délibéré, les champs Dolibarr étant plus sensibles, car directement liés à votre fiche produit commerciale.
Publier ou retirer un produit
- Sélectionnez le produit dans la liste.
- Dans la barre d'outils centrale, cliquez sur Publier (ou Dépublier si déjà publié).
- Le module modifie le champ personnalisé
infrasstudio_publishedà 1 (ou 0). - Il déclenche ensuite la régénération automatique des wrappers
solution-<ref>.php. - Une notification verte confirme l'opération.
Effet de la publication — Le wrapper /var/www/<site>/solution-<ref>.php est créé. La carte du produit apparaît sur le catalogue. La page de détail est accessible via /solution-<ref>.php.
Effet de la dépublication — Le wrapper est supprimé. Tout visiteur tentant d'accéder à l'URL reçoit une erreur 404. La carte disparaît du catalogue.
Régénérer les wrappers manuellement
Si une désynchronisation est suspectée — par exemple un produit modifié récemment qui n'affiche pas la bonne version — deux options sont disponibles.
Bouton dans la barre d'outils
- Sur la fiche produit, cliquez sur l'icône Régénérer wrapper (icône de synchronisation).
- Le module reconstruit le wrapper de ce produit.
Bouton « Reconstruire maintenant » (administrateur)
- Rendez-vous dans Outils → InfraSStudio → Configuration.
- Repérez la section Wrappers solution.
- Cliquez sur Reconstruire maintenant.
- L'ensemble des wrappers est régénéré en une seule opération.
Note — Une tâche planifiée toutes les heures régénère les wrappers en arrière-plan. En cas d'oubli ou d'incident temporaire, l'état est rétabli au plus tard une heure après.
La page de catalogue
La page de catalogue (généralement /catalogue.php) liste tous les produits publiés sous forme de cartes. Chaque carte présente :
- L'image principale du produit.
- Une étiquette éventuelle (« Nouveau », « Promotion », etc.).
- Le libellé.
- L'accroche.
- La catégorie ou l'univers, déduits des catégories Dolibarr.
- Un lien vers la page de détail.
Les visiteurs peuvent filtrer le catalogue par univers (Supply Chain, Health, Legal, etc.) et par type (SaaS, Extension, Instant). Les filtres sont en JavaScript et instantanés.
Lien direct depuis Dolibarr
Sur la fiche produit du Studio, un bouton Voir public ouvre la page solution publique dans un nouvel onglet. Un autre bouton Voir la fiche Dolibarr ouvre la fiche produit native.
Aller-retour fluide — Vous pouvez naviguer entre la fiche commerciale Dolibarr et l'éditeur web Studio sans interrompre votre flux de travail.
Récapitulatif
Vous savez désormais :
- Comprendre qu'une page web est générée automatiquement par produit publié.
- Préparer un produit (tosell=1, infrasstudio_published=1).
- Modifier les champs natifs et personnalisés depuis le Studio.
- Distinguer les champs traduisibles des champs non traduisibles.
- Publier ou dépublier un produit, ce qui pilote son wrapper et sa carte sur le catalogue.
- Régénérer manuellement un wrapper en cas de désynchronisation.
- Comprendre que le catalogue se filtre côté visiteur sans rechargement.
Le dernier chapitre de la Partie III aborde le référencement.
CHAPITRE 14 — Gérer les articles de blog
Le blog géré par le module repose sur les pages standard du module Website. Aucune table dédiée, aucun système parallèle : un article correspond à une page web. L'ensemble de ce que vous savez déjà s'applique, avec quelques raccourcis ergonomiques supplémentaires.
Comprendre l'architecture du blog
Élément | Description |
|---|---|
Article | Une page Dolibarr Website portant le type
. |
Page d'index | Une page standard (par exemple « Ressources » ou « Blog ») qui liste les articles publiés. |
Multilingue | Un article correspond à une page, qui correspond à un fichier PHP. Les traductions vivent dans les surcharges de slots, comme pour toute page. |
Créer un nouvel article
L'assistant de création est contextuel : il s'active automatiquement lorsque vous êtes sur la page d'index du blog désignée par votre administrateur.
Procédure
- Ouvrez la page d'index du blog (par exemple
/ressources). - Le bouton de la barre latérale devient + Nouvel article (au lieu de « + Nouvelle page »).
- Cliquez sur ce bouton.
- Une fenêtre s'ouvre avec trois champs :
- Titre : il deviendra le H1 et le titre SEO. Il pré-remplit le slot
post_title. - Slug : généré automatiquement à partir du titre, préfixé par
blog-. Vous pouvez le modifier. - Catégorie : la rubrique de l'article (par exemple transformation digitale, juridique). Elle pré-remplit le slot
post_category.
- Titre : il deviendra le H1 et le titre SEO. Il pré-remplit le slot
- Cliquez sur Créer l'article.
- Une nouvelle page
blog-mon-titreest créée à partir du gabarit blog du site. - Vous êtes automatiquement redirigé vers l'éditeur de cette nouvelle page.
Effet automatique — Le module crée la page Dolibarr, le fichier tpl.php, le wrapper Apache blog-mon-titre.php et pré-remplit les slots post_title et post_category.
Anatomie d'un article
Un article créé depuis le gabarit standard contient les slots suivants :
Slot | Type | Rôle |
|---|---|---|
| texte court | H1 et titre SEO de l'article |
| texte court | Meta description SEO (150-160 caractères) |
| texte court | Rubrique affichée en pastille au-dessus du titre |
| texte long | Chapeau ou accroche en italique sous le titre |
| image | Image principale en pleine largeur en haut de l'article |
| texte riche | Le corps de l'article (éditeur visuel complet) |
| image | Image illustrative facultative dans le corps |
| texte court | Texte alternatif de l'image secondaire |
Note — La date d'un article n'est pas un slot. Elle est lue automatiquement depuis la base Dolibarr (date de modification, sinon date de création). Vous n'avez pas à la saisir.
Date et auteur d'un article
La date affichée publiquement suit cette cascade :
- La date de modification de la page (la plus récente).
- La date de création si la page n'a jamais été modifiée.
Vous n'avez rien à saisir : à chaque publication d'une modification, la date est mise à jour automatiquement. C'est le comportement standard d'un blog.
Conseil — Pour antidater un article, demandez à votre administrateur Dolibarr de modifier llx_website_page.date_creation en SQL. Aucune interface dédiée n'est prévue, par souci de simplicité.
L'auteur affiché est généralement géré par un slot dans le gabarit du site (par exemple post_author).
La page d'index avec son listing automatique
La page d'index du blog (« Ressources », « Blog », etc.) ne nécessite aucune édition manuelle pour ajouter un nouvel article : la liste se met à jour automatiquement.
Lorsque vous publiez un nouvel article :
- Le module détecte la nouvelle page de type
blogpostau statut publié. - Au prochain rendu de la page d'index, l'article apparaît dans la grille.
- Image principale, titre, catégorie, accroche, date : tout est lu depuis les slots de l'article.
Conséquence — Vous ne touchez jamais à la page d'index. Vous publiez vos articles. Le listing se met à jour de lui-même.
La section « À lire également »
Sous chaque article, une section affiche trois articles aléatoires (autres que celui qui est consulté). Aucune configuration n'est nécessaire : la sélection est effectuée par le module à chaque rendu.
Modifier un article existant
- Ouvrez l'éditeur Studio.
- Dans la colonne de gauche, dépliez le groupe blogpost.
- Cliquez sur l'article à modifier.
- L'aperçu se charge. Modifiez les slots normalement (clic dans l'aperçu, inspecteur, etc.).
- Publiez lorsque vous êtes prêt.
Dupliquer un article
Cette fonction est utile pour réutiliser une structure existante :
- Ouvrez l'article modèle.
- Cliquez sur Dupliquer dans la barre d'outils.
- Une fenêtre demande le nouveau slug (préfixé
blog-) et le nouveau titre. - Confirmez.
- Le module crée la copie avec tous les slots clonés (canonique et traductions).
- Vous êtes redirigé vers le nouvel article pour le personnaliser.
Supprimer un article
Réservé aux administrateurs — Le bouton « Supprimer » de la barre d'outils n'est visible qu'avec la permission admin. Une confirmation est demandée. La suppression est irréversible : la page Dolibarr, ses slots, son fichier tpl.php et son wrapper Apache disparaissent définitivement.
Alternative — Plutôt que de supprimer, utilisez Retirer du site. L'article sort du listing public mais reste consultable depuis l'éditeur. Vous pouvez le remettre en ligne plus tard.
Récapitulatif
Vous savez désormais :
- Comprendre qu'un article correspond à une page Dolibarr Website.
- Créer un nouvel article via l'assistant contextuel sur la page d'index.
- Renseigner les huit slots du gabarit blog standard.
- Comprendre la datation automatique de l'article.
- Constater que le listing se met à jour de lui-même.
- Modifier, dupliquer, retirer ou supprimer un article.
Le chapitre suivant présente le catalogue produit dynamique.
CHAPITRE 13 — Travailler en plusieurs langues
Si votre site existe en plusieurs langues, ce chapitre vous concerne. Le module est multilingue dès la création du premier slot. Aucune duplication de page n'est nécessaire : une seule page, plusieurs traductions.
Le modèle multilingue
Le module repose sur le modèle « une page, plusieurs traductions » :
Concept | Description |
|---|---|
Langue canonique | La langue principale du site (généralement le français). C'est la valeur de référence. |
Langues secondaires | Les autres langues activées sur le site. Chaque slot peut disposer d'une surcharge spécifique pour chacune d'elles. |
Valeur par défaut | Définie par le développeur dans le HTML. Sert de filet de sécurité ultime. |
L'ordre de résolution au rendu
Lorsqu'un visiteur consulte votre site en allemand, le module recherche la valeur d'un slot dans cet ordre :
- La surcharge dans la langue du visiteur (de_DE).
- La valeur canonique (FR par défaut).
- La valeur par défaut définie dans le code par le développeur.
Conséquence rassurante — Si vous omettez de traduire un slot en allemand, le visiteur voit la version française. Aucune page cassée, aucun texte vide.
Activer une langue sur votre site
Cette opération s'effectue une fois pour toutes, par le développeur ou l'administrateur, dans le module Website Dolibarr :
- Rendez-vous dans Accueil → Sites web.
- Sélectionnez votre site.
- Cliquez sur l'onglet Configuration.
- Dans le champ Autres langues, ajoutez les codes ISO (par exemple
en_US,de_DE,es_ES). - Enregistrez.
Les langues disponibles correspondent à votre installation Dolibarr (environ 118 langues nativement). Les plus courantes sont : fr_FR, en_US, de_DE, es_ES, it_IT, pt_PT, nl_NL, pl_PL.
Basculer entre les langues dans l'éditeur
Au-dessus de l'aperçu central, une rangée d'onglets accompagnés de drapeaux représente les langues activées. Le drapeau actif est mis en valeur visuellement.
- Cliquez sur le drapeau d'une autre langue (par exemple anglais).
- L'aperçu se recharge dans cette langue.
- Si vous avez déjà saisi des traductions, elles s'affichent.
- Sinon, l'aperçu présente la version canonique (français).
Conseil — Ouvrez deux onglets de votre navigateur côte à côte, l'un en français et l'autre en anglais. Vous visualisez en temps réel l'effet de vos traductions sur les deux versions.
Traduire un slot — méthode rapide
La méthode la plus naturelle consiste à rester focalisé sur la langue affichée :
- Cliquez sur l'onglet de la langue cible (par exemple anglais).
- Cliquez sur le texte à traduire dans l'aperçu.
- L'inspecteur s'ouvre. Le champ principal est prêt à recevoir la traduction.
- Saisissez la traduction.
- L'enregistrement automatique l'enregistre comme surcharge pour cette langue.
L'aperçu se met à jour. Pour vérifier que vous n'avez pas écrasé la version française, basculez sur l'onglet français : le texte original doit toujours s'y trouver.
Traduire un slot — méthode toutes-langues
Pour saisir d'un coup les traductions dans toutes les langues, sans changer d'onglet :
- Sélectionnez un slot.
- Dans l'inspecteur, dépliez la section Autres langues.
- Vous voyez un champ par langue, avec un drapeau en préfixe.
- Saisissez chaque traduction.
- L'enregistrement automatique s'effectue à chaque champ.
Conseil — Cette vue est idéale pour un traducteur professionnel à qui vous donnez accès au Studio avec la seule permission editTranslations.
Indicateurs visuels de surcharge
Comment savoir d'un coup d'œil quels slots sont traduits et lesquels ne le sont pas ?
Sur les onglets de langue
L'onglet de la langue actuellement affichée comporte un point coloré si la valeur est une surcharge (différente du canonique). Sur le canonique, aucun point n'est affiché.
Dans la section « Autres langues »
Chaque champ de langue affiche un repère à droite :
Repère | Signification |
|---|---|
surcharge (vert) | Vous avez saisi une traduction spécifique pour cette langue. |
hérite FR (gris) | Aucune traduction. Le visiteur voit la valeur canonique. |
Revenir à la valeur canonique
Vous avez traduit un slot mais souhaitez finalement que la langue concernée réutilise la valeur française :
- Sélectionnez le slot.
- Dans la section « Autres langues », repérez la langue concernée.
- Cliquez sur le bouton Retour au FR à droite du champ. Il n'apparaît que si une surcharge existe.
- La surcharge est supprimée. Le visiteur de cette langue verra à nouveau la valeur canonique.
Conseil — Si vous saisissez dans un champ surcharge la même valeur que le canonique, le module supprime automatiquement la surcharge. Cela évite un enregistrement redondant.
Traductions des fiches produit
Les fiches produit Dolibarr disposent de leur propre éditeur de traductions, distinct de l'éditeur de slots. Pour y accéder :
- Tableau de bord du Studio → carte Traductions produits.
- Vous arrivez sur une page à deux colonnes.
- À gauche, la liste des produits commercialisables.
- À droite, l'éditeur avec onglets de langue.
Champs traduisibles
Catégorie | Champs |
|---|---|
Champs natifs Dolibarr | libellé, description |
Champs personnalisés traduisibles | accroche, libellé du bouton, déploiement, compatibilité, support, langues, fonctionnalités, paliers tarifaires |
Champs non traduisibles | image principale, URL du bouton, étiquette (ces valeurs sont universelles) |
Synchronisation native — Les modifications effectuées depuis le Studio sont visibles instantanément dans la fiche produit Dolibarr et dans son onglet Traductions natif. Et inversement.
Récapitulatif
Vous savez désormais :
- Comprendre l'ordre de résolution (surcharge → canonique → défaut).
- Basculer entre les langues via les onglets dotés de drapeaux.
- Traduire un slot en mode rapide (par langue) ou tous-langues simultanément.
- Lire les indicateurs de surcharge.
- Revenir à la valeur canonique avec « Retour au FR ».
- Éditer les traductions des fiches produit.
Le chapitre suivant aborde la gestion du blog.
CHAPITRE 12 — Brouillon, publication et versions
Tout ce que vous saisissez n'est pas immédiatement visible publiquement. Le module utilise un système de brouillons qui vous permet de préparer plusieurs modifications, de les relire, puis de les publier en une seule opération. Ce chapitre détaille ce mécanisme.
La distinction essentielle entre brouillon et publication
État | Visibilité |
|---|---|
Brouillon | Visible uniquement dans l'éditeur Studio (aperçu central). Les visiteurs du site continuent à voir l'ancienne version. |
Publié | Visible publiquement. Les visiteurs voient la nouvelle version dès la publication. |
Note — Le module stocke deux valeurs par slot : value (la valeur publique) et value_draft (le brouillon). L'aperçu Studio lit en priorité value_draft. Le rendu public lit uniquement value.
Repérer ses brouillons en attente
Plusieurs indicateurs visuels signalent la présence de brouillons non publiés.
Sur la liste des pages (colonne de gauche)
Une pastille orange à côté du titre de la page indique qu'elle contient au moins un brouillon non publié.
Sur la barre d'outils de l'éditeur
Le bouton Publier les modifications apparaît avec un compteur numérique précisant le nombre de brouillons :
- Aucun brouillon : le bouton est masqué.
- Un ou plusieurs brouillons : le bouton est visible avec le compteur (par exemple « Publier les modifications (3) »).
Sur l'inspecteur
Un slot avec un brouillon en cours porte un repère orange « modifié » à côté de son libellé.
Sur l'aperçu central
L'aperçu présente toujours la version brouillon. Pour voir exactement ce que verrait un visiteur, cliquez sur Voir public dans la barre d'outils, ce qui ouvre la page dans un nouvel onglet.
Publier les modifications
Lorsque vous êtes satisfait de votre brouillon :
- Cliquez sur Publier les modifications en haut à droite de la barre d'outils.
- Une boîte de confirmation s'affiche : « Publier les N modifications de cette page ? »
- Cliquez sur Confirmer.
- Une notification verte « Modifications publiées » apparaît en bas à droite.
- L'aperçu reste identique, puisque la version brouillon est devenue la version publique.
- Le compteur numérique disparaît, ainsi que la pastille orange dans la barre latérale.
Effet immédiat — Les visiteurs qui ouvrent la page après votre publication voient la nouvelle version. Aucun délai, aucun cache à vider.
Conseil — Préparez plusieurs modifications avant de publier. Le bouton publie l'ensemble des brouillons en une seule fois, ce qui évite que les visiteurs voient des versions intermédiaires.
Annuler les modifications en attente
Si vous changez d'avis et souhaitez tout abandonner pour revenir à la version actuelle du site :
- Cliquez sur Annuler les modifications dans la barre d'outils, à côté de « Publier ».
- Une boîte de confirmation s'affiche : « Annuler les N modifications de cette page ? Cette action est irréversible. »
- Cliquez sur Confirmer.
- L'ensemble des brouillons est supprimé.
- L'aperçu se met à jour avec la version publique.
Avertissement — Une fois confirmée, l'annulation efface définitivement vos brouillons. Aucune récupération n'est possible.
Mettre en ligne ou retirer du site (statut de la page)
Cette fonction ne doit pas être confondue avec « Publier les modifications ». Le bouton agit ici sur la visibilité de la page elle-même, non sur ses contenus.
Bouton | Effet |
|---|---|
Publier les modifications | Bascule les brouillons des slots vers les valeurs publiques. Concerne le contenu de la page. |
Mettre en ligne ou Retirer du site | Bascule la visibilité de la page. Une page « Retirée du site » renvoie une erreur 404 ; le wrapper Apache est supprimé. |
Cas d'usage de « Retirer du site »
- Vous préparez une nouvelle page qui ne doit pas être publique tant que tous ses contenus ne sont pas finalisés.
- Vous souhaitez désactiver une promotion expirée tout en conservant la page pour une réactivation future.
- Une ancienne page que vous ne voulez plus rendre accessible mais que vous préférez conserver dans la base.
Effet de « Mettre en ligne » — Le wrapper Apache <alias>.php est régénéré et la page redevient accessible. La page canonique et ses pages sœurs (autres langues) basculent simultanément.
L'historique des modifications
Toutes vos publications sont consignées dans un journal interne (llx_infrasstudio_revision). Pour les consulter :
- Sélectionnez un slot dans l'inspecteur.
- Dépliez la section Historique en bas du panneau.
- Vous y voyez la chronologie des modifications, avec :
- la date et l'heure,
- l'auteur (utilisateur Dolibarr),
- l'action effectuée (création, mise à jour, publication, annulation).
Note — L'historique vous permet de consulter qui a fait quoi. Une fonction de restauration directe d'une version antérieure n'est pas encore disponible : si vous avez besoin de revenir en arrière, contactez votre administrateur Dolibarr, qui peut récupérer la valeur depuis la base de données.
Workflow recommandé pour une équipe
Pour les sites édités par plusieurs personnes :
- Le rédacteur ouvre la page et procède aux modifications. Toutes restent à l'état de brouillon.
- Le rédacteur partage le lien de l'éditeur avec un relecteur (chef de projet, marketing, juriste, etc.).
- Le relecteur ouvre la même page dans le Studio. L'aperçu lui présente la version brouillon.
- Le relecteur valide ou demande des ajustements via un canal externe (Slack, courriel, etc.).
- Le rédacteur applique les ajustements (toujours en brouillon).
- Une fois la version validée, le rédacteur ou un publicateur dédié, selon les permissions configurées, clique sur « Publier les modifications ».
À retenir — Le système de brouillon n'est pas un confort optionnel. Il évite les publications accidentelles en cours de rédaction et permet une véritable validation à plusieurs avant que les visiteurs voient le résultat.
Récapitulatif
Vous savez désormais :
- Distinguer un brouillon (privé à l'éditeur) d'une publication (visible publiquement).
- Reconnaître les indicateurs visuels (pastille orange, compteur numérique, repère slot).
- Publier les modifications d'une page en un clic.
- Annuler les brouillons en cas de changement d'avis.
- Distinguer « Publier les modifications » (contenu) et « Mettre en ligne ou Retirer » (visibilité).
- Consulter l'historique d'un slot.
- Mettre en place un processus de relecture collective.
Le chapitre suivant aborde la gestion du multilingue.
CHAPITRE 11 — Gérer les images et la bibliothèque média
Toutes les images, vidéos et documents que vous utilisez sur votre site transitent par la bibliothèque média. Il s'agit d'un emplacement central : vous téléversez un fichier une seule fois et le réutilisez partout où vous en avez besoin.
Accéder à la bibliothèque
Trois entrées sont possibles :
- Depuis le tableau de bord : cliquez sur la carte « Bibliothèque médias ».
- Depuis l'éditeur : sélectionnez l'onglet Médias en haut de la colonne gauche.
- Depuis un slot image : cliquez sur le bouton « Choisir une image » qui ouvre la bibliothèque dans une fenêtre.
L'organisation de la bibliothèque
La bibliothèque est gérée par site. Si vous administrez plusieurs sites, chacun dispose de sa propre médiathèque indépendante.
Au sein d'un site, les médias sont classés par type :
Type | Formats acceptés |
|---|---|
Image | JPG, PNG, WebP, SVG, GIF |
Vidéo | MP4, WebM |
Document | PDF, DOC et autres formats bureautiques |
Téléverser un nouveau média
Méthode A — Bouton « Envoyer un fichier »
- Dans la barre d'outils de la bibliothèque, cliquez sur Envoyer un fichier.
- Sélectionnez un ou plusieurs fichiers depuis votre poste.
- Le ou les fichiers sont téléversés. Une vignette apparaît dans la grille.
Méthode B — Glisser-déposer
- Faites glisser une image depuis votre explorateur de fichiers.
- Déposez-la directement sur la grille de la bibliothèque.
- Le téléversement démarre automatiquement.
Méthode C — Pendant l'édition d'un slot image
- Vous éditez un slot de type image dans l'inspecteur.
- Cliquez sur Choisir une image.
- La bibliothèque s'ouvre. Un bouton Envoyer est disponible en haut.
- Téléversez sans interrompre votre flux d'édition.
Conseil — Pour les photographies, le format WebP est recommandé. Il offre un fichier 30 à 50 % plus léger qu'un JPG à qualité équivalente. Le module accepte ce format nativement.
Retrouver un média existant
Au-dessus de la grille, plusieurs filtres sont disponibles :
- Recherche : par libellé, référence ou tag.
- Type : images, vidéos ou documents.
- Site : si vous administrez plusieurs sites.
La grille se met à jour instantanément. Un défilement infini en bas de page charge les médias suivants par lots de cinquante.
Modifier les métadonnées d'un média
Cliquez sur une vignette. Une fenêtre d'édition s'ouvre, organisée en deux colonnes.
Colonne de gauche — Aperçu et utilisation
- Aperçu de l'image en taille réelle.
- Liste des pages où le média est utilisé : « Utilisé sur N éléments ».
- Historique des modifications, présenté de manière dépliable.
Colonne de droite — Champs éditables
Champ | Description |
|---|---|
Référence | Identifiant court, réutilisable dans les shortcodes (par exemple
). |
Libellé | Nom affiché dans la bibliothèque. |
Texte alternatif (canonique) | L'attribut
par défaut. Important pour le référencement et l'accessibilité. |
Tags | Mots-clés facilitant la recherche du média. |
Traductions par langue | Section dépliable. Un champ par langue pour traduire le texte alternatif. |
Recommandé — Renseignez systématiquement le texte alternatif. C'est ce qui est affiché si l'image ne se charge pas, ce que lit un lecteur d'écran et ce que Google utilise pour comprendre vos images.
Les variantes générées automatiquement
Lors de chaque téléversement d'image, le module crée automatiquement trois tailles supplémentaires en plus de l'original.
Variante | Dimensions | Usage type |
|---|---|---|
thumb | 200 × 200 px | Vignettes, galerie |
card | 640 × 480 px | Cartes d'articles, mosaïques |
wide | 1600 × 1200 px | Hero pleine largeur |
original | Dimensions natives | Téléchargement, impression |
Les variantes sont générées à la demande. Lors de la première utilisation d'une variante (par exemple card), elle est créée puis mise en cache.
Supprimer un média
- Ouvrez la fenêtre d'édition en cliquant sur la vignette.
- En bas à droite, cliquez sur Envoyer à la corbeille.
Note — La suppression est en réalité un marquage : le média n'est pas effacé physiquement du disque. Il est simplement signalé comme inactif et n'apparaît plus dans la grille. Vos pages qui le référencent continuent à l'afficher.
Avertissement — Si le média est encore utilisé, la suppression est par défaut refusée. Le module présente la liste des pages concernées. Soit vous remplacez l'image sur ces pages, soit vous forcez la suppression — auquel cas les pages afficheront une image cassée.
Réimporter le contenu d'un dossier
Si vous avez ajouté des fichiers sans passer par le Studio (FTP, SCP, ou via l'éditeur Dolibarr Website), ils n'apparaissent pas dans la bibliothèque.
Pour les détecter :
- Dans la barre d'outils de la bibliothèque, cliquez sur Réimporter.
- Le module parcourt le dossier physique du site.
- Les fichiers absents de la bibliothèque sont enregistrés.
Conseil — Le module effectue cette réimportation automatiquement toutes les cinq minutes au maximum lors de l'ouverture de la bibliothèque. Le bouton sert uniquement à forcer une réimportation immédiate.
Insérer un média dans un slot de texte riche
- Vous éditez un slot de type texte riche.
- Au-dessus de la barre d'outils, cliquez sur Insérer un média.
- La bibliothèque s'ouvre dans une fenêtre.
- Sélectionnez ou téléversez une image.
- Le module insère :
- une balise
<img>si vous avez choisi une image, - un lien
<a>avec le libellé si vous avez choisi un document.
- une balise
Récapitulatif
Vous savez désormais :
- Accéder à la bibliothèque depuis trois entrées différentes.
- Téléverser des médias par bouton, par glisser-déposer ou pendant l'édition d'un slot.
- Filtrer la bibliothèque par recherche, type ou site.
- Modifier les métadonnées (libellé, texte alternatif et traductions, tags).
- Comprendre les variantes générées automatiquement (thumb, card, wide).
- Supprimer un média en respectant ses utilisations.
- Réimporter pour récupérer des fichiers ajoutés hors du Studio.
- Insérer un média au curseur dans un slot de texte riche.
Le chapitre suivant aborde le mécanisme de publication, qui sépare votre travail en cours de la version visible publiquement.
CHAPITRE 10 — Modifier les textes
La modification d'un texte est l'opération la plus fréquente dans le Studio. Ce chapitre présente les trois méthodes pour y procéder, ainsi que les différents types de champs que vous rencontrerez.
Méthode 1 — Édition directe depuis l'aperçu
C'est la méthode la plus rapide et la plus naturelle.
- Ouvrez la page que vous souhaitez modifier en cliquant sur son nom dans la colonne de gauche.
- Dans l'aperçu central, survolez avec la souris : les zones éditables sont entourées d'un cadre orange en pointillés.
- Cliquez sur le texte à modifier.
- L'inspecteur s'ouvre à droite avec un champ déjà rempli.
- Modifiez le texte. L'enregistrement automatique intervient une demi-seconde après votre dernière saisie.
- L'aperçu se met à jour en direct.
Recommandé — L'indicateur « Enregistré » à côté du champ confirme la sauvegarde en brouillon. Pour rendre la modification visible publiquement, cliquez sur Publier les modifications en haut à droite.
Méthode 2 — Liste « Contenu de la page »
Cette méthode est utile lorsqu'un slot n'est pas directement cliquable, par exemple une image masquée ou une valeur stockée dans un attribut.
- Ouvrez la page sans cliquer sur l'aperçu.
- Consultez la colonne de droite.
- La liste « Contenu de la page » répertorie tous les emplacements éditables.
- Chaque ligne présente un type, un libellé, un aperçu de la valeur et un repère « modifié » en cas de brouillon en cours.
- Cliquez sur la ligne souhaitée pour ouvrir son formulaire.
Conseil — Les slots sont regroupés par section (« hero », « pied de page », « appel à l'action », etc.) selon le découpage défini par votre développeur. Cela facilite la navigation sur les pages longues.
Méthode 3 — Navigation par sections
Sur les pages longues, vous pouvez utiliser la barre de défilement de l'aperçu pour atteindre la section recherchée, puis cliquer dessus directement.
Les types de champs disponibles
Le développeur a choisi un type pour chaque slot. Ce type détermine l'apparence du formulaire d'édition. Voici l'ensemble des types existants.
Texte court
Champ d'une seule ligne, sans mise en forme. Convient pour les titres, les libellés et les noms. Une longueur maximale peut être imposée, auquel cas un compteur de caractères est affiché.
Texte long
Champ multi-lignes sans mise en forme. Les sauts de ligne sont autorisés et automatiquement convertis en retours visuels. Idéal pour une accroche ou un paragraphe simple.
Texte riche
Éditeur visuel complet (CKEditor) avec barre d'outils étendue.
Outil | Effet |
|---|---|
Format | Paragraphe, Titre 2, Titre 3, Titre 4, Code |
Style | Gras, italique, souligné, barré |
Couleur | Couleur de texte et couleur de fond, selon la palette de la marque |
Alignement | Gauche, centre, droite, justifié |
Listes | Listes à puces, listes numérotées, indentation |
Liens | Insérer ou supprimer un lien |
Insérer un média | Ouvre la bibliothèque pour insérer une image au curseur |
Note importante — L'éditeur ne propose pas de bouton « source » pour modifier le HTML brut. Ce choix est délibéré, comme expliqué au Chapitre 3.
Image
Le champ comporte une zone de saisie, un bouton de sélection dans la bibliothèque, un bouton de suppression et une vignette d'aperçu.
- Cliquez sur le bouton Choisir une image.
- La bibliothèque média s'ouvre dans une fenêtre.
- Sélectionnez une image existante ou téléversez-en une nouvelle.
- L'image est intégrée et la vignette s'affiche.
Conseil — Vous pouvez également glisser-déposer une image depuis la barre latérale Médias directement sur la zone d'image dans l'aperçu central.
URL
Champ texte adapté aux liens. Les mêmes outils que pour les images sont disponibles, par exemple le sélecteur pour insérer un média comme cible.
Icône
Champ de sélection d'une icône FontAwesome.
- Saisissez le nom de la classe (par exemple
fa-solid fa-star) ou cliquez sur l'une des vingt icônes proposées (étoile, cœur, fusée, etc.). - Choisissez la couleur dans le sélecteur.
- Un aperçu en direct s'affiche.
Couleur
Sélecteur de couleur HTML5 accompagné d'un champ hexadécimal.
- Format strict :
#RRGGBBou#RRGGBBAA(avec transparence). - Bouton Défaut pour revenir à la valeur initiale.
- Une couleur n'est pas traduisible et reste identique dans toutes les langues.
Nombre
Champ numérique simple avec validation.
Booléen
Case à cocher pour un choix oui ou non.
Liste déroulante
Le panneau d'édition multilingue
Pour les slots de type texte (texte court, texte long, texte riche), l'inspecteur présente trois zones distinctes.
Zone | Contenu |
|---|---|
Champ principal | La langue actuellement affichée dans l'aperçu (drapeau actif). C'est ici que vous saisissez la majorité du temps. |
Autres langues (dépliable) | Un champ par langue prise en charge. Cliquez sur la flèche pour déplier et saisir les traductions. |
Options avancées (dépliable) | La valeur canonique partagée entre toutes les langues. À ne modifier qu'en cas de besoin spécifique. |
Note — Au moment du rendu public, le module recherche la valeur dans cet ordre : surcharge dans la langue du visiteur, valeur canonique, valeur par défaut. Le visiteur voit toujours un contenu, même en l'absence de traduction.
Pour les slots non textuels (image, couleur, icône, etc.), une seule zone « Valeur (toutes langues) » est proposée. Une image se traduit rarement.
L'enregistrement automatique en pratique
Aucun bouton « Enregistrer » n'est à cliquer. Le module sauvegarde automatiquement votre travail.
- Vous saisissez du texte.
- Le module attend une demi-seconde de pause.
- L'indicateur passe à Enregistrement....
- Le serveur reçoit la valeur et l'enregistre comme brouillon.
- L'indicateur passe à Enregistré en vert.
Conseil — Si l'indicateur affiche « Erreur réseau », votre connexion a probablement été interrompue. Utilisez Ctrl+Z pour récupérer votre saisie, attendez le rétablissement de la connexion, puis ressaisissez.
Annuler une modification non publiée
Tant que vous n'avez pas publié, plusieurs options de retour en arrière sont possibles :
- Annulation locale : utilisez Ctrl+Z dans le champ pour revenir frappe par frappe.
- Annulation globale de la page : cliquez sur Annuler les modifications dans la barre d'outils. Tous les brouillons de la page courante sont alors supprimés.
Avertissement — Le bouton « Annuler les modifications » est définitif. Une confirmation est demandée. Une fois validée, le brouillon est perdu et la page revient à sa version publique.
Récapitulatif
Vous savez désormais :
- Cliquer sur un texte de l'aperçu pour l'éditer.
- Utiliser la liste « Contenu de la page » pour les slots non cliquables.
- Reconnaître les neuf types de champs (texte court, texte long, texte riche, image, URL, icône, couleur, nombre, liste).
- Distinguer la valeur d'une langue, la valeur canonique et la valeur par défaut.
- Comprendre le fonctionnement de l'enregistrement automatique en brouillon.
- Annuler une modification avant publication.
Le chapitre suivant aborde la bibliothèque média.
CHAPITRE 09 — Tour de l'interface Studio
Ce chapitre constitue votre première visite guidée du Studio. Vous allez parcourir l'ensemble des écrans sans encore éditer quoi que ce soit. À la fin, vous saurez où chercher chaque élément et comment vous repérer.
Note — Le module InfraSStudio doit être activé sur votre instance Dolibarr et au moins un site doit être configuré. Si ce n'est pas le cas, consultez d'abord la Partie II.
Étape 1 — Accéder au Studio
- Connectez-vous à votre Dolibarr.
- Dans le menu supérieur, cliquez sur Outils.
- Dans le menu latéral qui apparaît, repérez la section InfraS.
- Cliquez sur InfraSStudio.
Vous arrivez sur le tableau de bord du Studio.
Conseil — Vous pouvez ajouter cette page à vos favoris dans votre navigateur. Vous y reviendrez fréquemment.
Étape 2 — Comprendre le tableau de bord
Le tableau de bord constitue votre point d'entrée. Il se divise en plusieurs zones, présentées de haut en bas.
L'en-tête personnalisé
Une salutation contextuelle (« Bonjour », « Bon après-midi », « Bonsoir » selon l'heure) est suivie de la date du jour. Cet élément constitue un simple repère visuel.
Vos sites
Une grille de cartes affiche un site géré par carte. Pour chacun, vous retrouvez :
- Le nom du site, par exemple monsite.
- Un lien direct vers le site public, accessible via une icône globe.
- Trois compteurs colorés : pages publiées, pages en brouillon et articles de blog.
- Trois boutons d'action : Éditer, Articles et Produits.
Recommandé — Cliquez sur Éditer pour entrer dans l'éditeur principal. C'est par cette voie que vous passerez la majorité de votre temps.
Statistiques globales
Quatre indicateurs sont présentés en permanence : nombre de produits publiés, nombre de produits en brouillon, nombre de médias dans la bibliothèque et taille totale en mégaoctets.
Actions rapides
Cinq cartes cliquables conduisent directement aux opérations courantes :
- Nouvel article : créer un billet de blog en deux clics.
- Éditer une page : ouvrir l'éditeur unifié.
- Gérer les produits : accéder à la section produits dans l'éditeur.
- Traductions produits : ouvrir l'éditeur multilingue dédié aux fiches produit.
- Bibliothèque médias : accéder à la gestion centralisée des fichiers.
Activité récente
Une frise chronologique affiche les huit derniers contenus modifiés (slots et produits), avec un lien Ouvrir qui vous permet de reprendre votre travail là où vous l'aviez laissé.
Aide à la prise en main
Un panneau dépliable « Comment utiliser InfraSStudio ? » présente quatre étapes guidées. Il s'avère particulièrement utile pour vos collègues qui découvrent l'outil.
Étape 3 — Entrer dans l'éditeur
Cliquez sur le bouton Éditer de la carte d'un site. Vous accédez alors à l'écran central du Studio : l'éditeur en trois colonnes.
Colonne | Rôle |
|---|---|
Gauche — Arborescence | Liste des pages du site, regroupées par type (pages standards, articles de blog, en-tête, pied de page). Recherche en temps réel. Compteur de slots par page. Indicateurs visuels pour les brouillons en attente. |
Centre — Aperçu | Aperçu en direct de la page sélectionnée, présenté dans un cadre qui imite un navigateur. Onglets de langue avec drapeaux. Boutons de basculement entre les vues bureau, tablette et mobile. |
Droite — Inspecteur | Lorsqu'aucun slot n'est sélectionné, l'inspecteur présente la liste de tous les emplacements éditables de la page. Lorsqu'un slot est sélectionné, il bascule sur le formulaire d'édition correspondant. |
Conseil — Les trois colonnes sont redimensionnables. Faites glisser les séparateurs verticaux pour ajuster la mise en page à la taille de votre écran.
Étape 4 — Le déroulement d'une session d'édition
Voici le déroulement type d'une session d'édition :
- Vous cliquez sur une page dans la colonne de gauche.
- L'aperçu se charge au centre, avec la page rendue exactement comme la verra un visiteur.
- Vous cliquez sur un texte de l'aperçu, par exemple le titre principal.
- L'inspecteur s'ouvre à droite avec un champ de saisie pré-rempli avec la valeur actuelle.
- Vous modifiez le texte. Le système enregistre automatiquement après une demi-seconde d'inactivité.
- L'aperçu se met à jour. À ce stade, votre modification reste à l'état de brouillon, invisible pour les visiteurs du site.
- Lorsque vous êtes satisfait, vous cliquez sur le bouton « Publier les modifications » en haut à droite. Votre travail devient alors visible publiquement.
Recommandé — Préparez plusieurs modifications avant de publier. Le bouton « Publier les modifications » applique en une seule fois l'ensemble des modifications en attente sur la page, ce qui évite que les visiteurs voient des versions intermédiaires incohérentes.
Étape 5 — Les boutons de la barre d'outils centrale
Une barre d'actions est présentée au-dessus de l'aperçu. Voici la fonction de chaque bouton, dans l'ordre d'apparition.
Bouton | Effet |
|---|---|
SEO | Ouvre une fenêtre avec un aperçu du résultat Google en direct. Voir le Chapitre 16. |
Dupliquer | Crée une copie de la page courante. Cette fonction est particulièrement utile pour les articles de blog. |
Mettre en ligne / Retirer du site | Modifie la visibilité publique de la page. À distinguer de « Publier les modifications » dont la fonction est différente. |
Publier les modifications | Publie l'ensemble des brouillons en attente sur la page. Une pastille indique le nombre de modifications concernées. |
Annuler les modifications | Supprime tous les brouillons et restaure la version actuellement publiée. |
Voir public | Ouvre la page publique dans un nouvel onglet du navigateur. |
Supprimer | Réservé aux administrateurs. Une confirmation est demandée. Voir l'avertissement ci-dessous. |
Avertissement — Le bouton Supprimer efface définitivement la page, ses traductions, ses slots, son fichier tpl.php et son wrapper Apache. Aucun retour en arrière n'est possible. Réservez son usage aux cas véritablement nécessaires.
Étape 6 — Naviguer dans la liste des pages
La colonne de gauche est plus puissante qu'il n'y paraît. Voici comment l'exploiter.
Le sélecteur de section
En haut de la colonne, deux onglets : Pages et Médias. Selon la configuration du site, un troisième onglet Produits peut apparaître si le catalogue dynamique est activé.
La recherche en temps réel
Saisissez quelques caractères dans le champ Rechercher : la liste se filtre instantanément. La recherche porte sur le titre, le slug et la catégorie.
Les groupes de pages
Les pages sont regroupées par type :
- page : pages standards (accueil, contact, à propos, etc.).
- blogpost : articles de blog.
- other : éléments structurels (en-tête, pied de page, menu).
Les indicateurs visuels
- Une pastille orange à côté d'une page indique qu'elle comporte des modifications en brouillon.
- Un nombre entre crochets, par exemple [3], donne le nombre de slots éditables sur la page.
- Une icône grisée signale que la page est en mode « Retirée du site ».
Le bouton Nouveau
Le bouton est situé tout en bas de la liste. Selon le contexte :
- Sur la page d'index d'un blog, il devient « + Nouvel article ».
- Sur les autres pages, il devient « + Nouvelle page ».
Étape 7 — L'inspecteur
L'inspecteur connaît deux états distincts.
État vide : la liste « Contenu de la page »
Lorsqu'aucun slot n'est sélectionné dans l'aperçu, l'inspecteur présente la liste exhaustive des slots de la page, regroupés par section. Pour chacun :
- Une icône précise le type (texte, image, couleur, icône, etc.).
- Le libellé du slot est affiché.
- Un aperçu de la valeur actuelle est proposé, limité à soixante caractères.
- Un repère orange « modifié » signale qu'un brouillon est en cours.
Cliquez sur n'importe quelle ligne pour ouvrir le formulaire d'édition.
État édition : le formulaire
Lorsqu'un slot est sélectionné, l'inspecteur bascule en mode édition. Vous y trouvez :
- Un bouton « ← Retour » pour revenir à la liste.
- Le libellé du slot affiché en titre.
- Un champ d'édition principal pour la langue actuellement affichée dans l'aperçu.
- Une section dépliable « Autres langues » pour saisir les versions linguistiques.
- Une section dépliable « Options avancées » qui permet d'accéder à la valeur canonique partagée. Son usage est à réserver à des cas particuliers.
Conseil — L'enregistrement automatique se déclenche une demi-seconde après votre dernière saisie. Un indicateur affiche successivement « Enregistrement... » puis « Enregistré ». Aucun bouton de sauvegarde n'est nécessaire.
Étape 8 — Changer de langue dans l'aperçu
Au-dessus de l'aperçu, une rangée d'onglets accompagnés de drapeaux représente les langues activées sur votre site (FR, EN, DE, etc.).
- Cliquez sur le drapeau d'une autre langue.
- L'aperçu se recharge dans cette langue.
- Lorsque vous éditez un slot, le champ principal de l'inspecteur correspond à la langue actuellement affichée.
Note — La langue principale du site (généralement le français) constitue la langue canonique. Les autres langues sont des traductions complémentaires. Lorsqu'une traduction manque, le visiteur voit la version canonique. Le Chapitre 13 détaille ce mécanisme.
Récapitulatif
Vous savez désormais :
- Accéder au Studio depuis Outils → InfraS.
- Lire le tableau de bord (sites, statistiques, actions rapides, activité récente).
- Entrer dans l'éditeur en trois colonnes.
- Identifier le rôle de chacune des trois colonnes (arborescence, aperçu, inspecteur).
- Reconnaître les boutons de la barre d'outils centrale.
- Naviguer entre les langues via les onglets dotés de drapeaux.
- Comprendre la distinction entre brouillon et publication.
Le chapitre suivant aborde concrètement la modification d'un texte.
Partie II — Démarrer
Chapitre 8 — Vérifier l'installation avec la page Diagnostic
Le module dispose d'une page dédiée qui passe en revue l'ensemble de l'intégration et indique, point par point, si tout est en ordre.
C'est le premier réflexe à adopter après une installation, après une mise à jour ou en cas de comportement inattendu.
Accéder à la page Diagnostic
- Rendez-vous dans Outils → InfraS → InfraSStudio.
- Cliquez sur l'onglet Diagnostic dans le menu latéral.
La page se charge et exécute en direct une série de vérifications. Chaque ligne s'accompagne d'une pastille de couleur :
Couleur | Signification |
|---|---|
Vert | Le point est correctement configuré. Aucune action n'est requise. |
Orange | Avertissement non bloquant. Le module fonctionne mais une amélioration est possible. |
Rouge | Anomalie bloquante. Une fonctionnalité importante ne fonctionne pas correctement. |
Bleu | Information contextuelle, sans contrôle effectué. |
Section 1 — Environnement
Cette section vérifie les versions de Dolibarr et de PHP, ainsi que la présence des extensions PHP requises.
Contrôle | Action en cas d'anomalie |
|---|---|
Version Dolibarr | Mettez Dolibarr à jour (entre 18.0.0 et 24.x.x). |
Version PHP | Demandez à votre hébergeur de basculer sur une version comprise entre 7.4 et 8.4. |
Extensions PHP | Installez les extensions manquantes (par exemple
). |
Module InfraSStudio activé | Activez le module dans Configuration → Modules. |
Module Website (dépendance) | Activez le module Website dans Configuration → Modules. |
Section 2 — Schéma SQL
Cette section vérifie la présence des cinq tables du module dans la base de données :
llx_infrasstudio_slotllx_infrasstudio_mediallx_infrasstudio_media_altllx_infrasstudio_revisionllx_infrasstudio_product_translation
Conseil — En cas de table manquante, désactivez puis réactivez le module dans Configuration → Modules. Le module recrée les tables absentes lors de la réactivation.
Section 3 — Stockage
Cette section vérifie que les dossiers d'écriture sont accessibles à PHP :
- DOL_DATA_ROOT : la racine des données Dolibarr.
- Dossier de données du module : créé au premier téléversement.
Avertissement — Si un dossier n'est pas accessible en écriture, corrigez les permissions :chown -R www-data:www-data /var/www/dolibarr/htdocs/documents/
Section 4 — Intégration Dolibarr
Cette section vérifie les hooks, le trigger et les tâches planifiées.
Contrôle | Description |
|---|---|
Hooks | Quatre hooks sont attendus :
,
,
,
. |
Trigger PRODUCT et CATEGORY | Le fichier
doit être présent sur le disque. |
Tâches planifiées | Au moins une tâche cron doit être déclarée pour le module. |
Section 5 — Sites gérés
Pour chaque site activé, cette section contrôle :
- la résolution du docroot (cascade : per-site → DOCROOT_PATTERN → fallback) ;
- le bon fonctionnement du mode média (présence du lien symbolique en mode native) ;
- l'accessibilité en écriture du dossier data du site.
« Aucun docroot résolu » — Définissez la constante INFRASSTUDIO_SITE_<id>_DOCROOT avec le chemin Apache absolu de ce site, ou utilisez le pattern INFRASSTUDIO_DOCROOT_PATTERN (par exemple /var/www/{ref}).
Section 6 — Catalogue produit dynamique (optionnel)
Cette section n'apparaît que si vous avez configuré INFRASSTUDIO_WEBSITE_KEY ou INFRASSTUDIO_PUBLIC_DOCROOT. Elle vérifie que ces deux constantes pointent vers des cibles valides.
Lecture du résultat global
Tous les voyants au vert — Vous pouvez passer à la Partie III (utilisateur final) ou à la Partie IV (développeur), selon votre rôle.
Quelques avertissements oranges — Le module fonctionne. Examinez les avertissements à tête reposée et décidez s'il convient de corriger immédiatement ou plus tard.
Au moins un voyant rouge — Interrompez votre installation et corrigez l'anomalie. Une fonctionnalité importante est inopérante et son symptôme apparaîtra plus tard de manière inattendue.
Quand relancer le diagnostic
- Après une installation initiale du module.
- Après chaque mise à jour.
- Après une migration de serveur ou un changement d'hébergement.
- Lorsqu'un comportement inattendu apparaît (slot non enregistré, médias absents, etc.).
- Avant la transmission du projet à un nouveau collègue ou à un client.
Bonne pratique pour les équipes — Demandez à toute personne signalant un dysfonctionnement de joindre d'abord une capture d'écran de la page Diagnostic. La majorité des incidents trouvent leur explication dans une ligne orange ou rouge passée inaperçue.
Chapitre 7 — Activer un site managé
Le module est installé mais ne gère encore aucun site. Cette étape consiste à lui indiquer quel site Dolibarr Website il doit prendre en charge. C'est cette opération qui établit la connexion entre le module et un site existant.
Étape 1 — Disposer d'un site Website
Avant de l'activer dans le module, le site doit déjà exister dans le module Website natif. Si ce n'est pas encore le cas :
- Rendez-vous dans Accueil → Sites web (menu du module Website).
- Cliquez sur « Nouveau site ».
- Renseignez les informations suivantes :
- Référence : un identifiant court sans espace, par exemple
monsite. - Description : optionnelle.
- Virtualhost : l'URL publique, par exemple
https://monsite.com. - Langue principale : par exemple
fr_FR. - Autres langues : optionnel, séparées par des virgules.
- Référence : un identifiant court sans espace, par exemple
- Enregistrez.
Note — Le module détecte automatiquement les sites créés dans Website. Aucune configuration parallèle n'est nécessaire.
Étape 2 — Sélectionner le site dans la configuration
- Rendez-vous dans Outils → InfraS → InfraSStudio.
- Cliquez sur l'entrée Configuration dans le menu latéral du module.
- La page Paramètres de configuration s'affiche.
- Repérez la section « Sites Website gérés ».
- Vous y voyez la liste de tous les sites Dolibarr Website disponibles, accompagnés d'une case à cocher.
- Cochez le ou les sites que vous souhaitez éditer via InfraSStudio.
- Cliquez sur « Enregistrer » en bas de la page.
Effet — Le site apparaît désormais sur le tableau de bord du Studio d'Infrasstudio. Vous pouvez commencer à l'éditer.
Étape 3 — Réglages spécifiques par site
Pour chaque site coché, deux réglages complémentaires apparaissent.
Le mode de stockage des médias
Vous choisissez l'emplacement physique où les images téléversées seront enregistrées :
Mode | Quand l'utiliser |
|---|---|
Avec le site (mode native) — recommandé | Les fichiers sont servis directement par Apache via le lien symbolique
standard. Plus rapide, URL plus courte, accessible également depuis l'éditeur Dolibarr Website natif. |
Gerer par le module Infrasstudio | Les fichiers sont servis via
. Utile uniquement lorsque le serveur Apache n'a pas accès au dossier
du site. |
La page d'index du blog
Si votre site comporte une page « Blog » ou « Ressources » qui liste les articles publiés, vous pouvez la désigner ici.
Conseil — Lorsque vous serez sur cette page dans l'éditeur, le bouton « + Nouveau » deviendra automatiquement « + Nouvel article ». C'est un raccourci ergonomique appréciable.
Laissez ce paramètre sur « Aucune » si votre site ne dispose pas de blog.
Étape 4 — Configuration du catalogue produit (optionnel)
Cette section ne concerne que les sites disposant d'un catalogue produit dynamique, c'est-à-dire d'une page web générée automatiquement par produit Dolibarr publié.
Le cas échéant, configurez :
Constante | Valeur |
|---|---|
| La référence du site cible (par exemple
) |
| Le chemin Apache absolu du site (par exemple
) |
Le bouton « Reconstruire maintenant » permet de générer immédiatement les wrappers solution-<ref>.php pour chaque produit publié.
Note — Si vous ne savez pas si vous avez besoin de cette fonctionnalité, ignorez cette section. Le Chapitre 23 explique le catalogue dynamique en détail.
Étape 5 — Réglages avancés
En bas de la page Configuration, une section repliable « Réglages avancés » expose des constantes plus pointues. Pour une première installation, conservez les valeurs par défaut. Le Chapitre 25 documente chacun de ces paramètres.
Liste de contrôle après activation
Votre site est correctement activé si :
- Le tableau de bord Studio (Outils → InfraSStudio) affiche désormais une carte pour ce site.
- Le bouton « Éditer » de cette carte ouvre l'éditeur en trois colonnes.
- La colonne de gauche liste bien les pages de votre site.
- Cliquer sur une page déclenche son aperçu au centre.
Au chapitre suivant, le diagnostic complet permet de valider l'intégration de bout en bout.
Chapitre 6 — Installation du module
Trois méthodes d'installation sont possibles. Choisissez celle qui correspond à votre environnement de travail. Les trois aboutissent au même résultat.
Méthode 1 — Via l'interface Dolibarr (recommandée)
C'est la méthode la plus simple. Elle ne nécessite pas d'accès SSH et fonctionne dès lors que la constante MAIN_DISALLOW_INSTALL_EXTERNAL_MODULES n'est pas activée sur votre instance.
Procédure
- Connectez-vous à Dolibarr en tant qu'administrateur.
- Rendez-vous dans Accueil → Configuration → Modules.
- Cliquez sur le bouton « Déployer / installer un module externe » en haut de la page.
- Cliquez sur « Choisir un fichier » et sélectionnez l'archive
module_infrasstudio-X.Y.Z.zip. - Cliquez sur « Envoyer le fichier ».
- Patientez quelques secondes pendant la décompression de l'archive.
- Un message confirme la réussite de l'installation et vous invite à activer le module.
Conseil — L'archive doit être nommée module_infrasstudio-X.Y.Z.zip, où X.Y.Z correspond au numéro de version. Ce nom est utilisé par Dolibarr pour identifier le module.
Méthode 2 — Manuelle (SSH ou FTP)
Cette méthode est adaptée si vous disposez d'un accès au serveur ou si vous travaillez dans un environnement local.
Procédure
- Décompressez l'archive
module_infrasstudio-X.Y.Z.zipsur votre poste de travail. - Vous obtenez un dossier nommé
infrasstudio/. - Copiez ce dossier dans
<votre_dolibarr>/htdocs/custom/sur votre serveur, par SCP ou FTP. - Vérifiez les permissions : le dossier doit être accessible en lecture par l'utilisateur sous lequel tourne PHP, généralement
www-data.
# Exemple complet en SSH
cd /var/www/dolibarr/htdocs/custom/
unzip /tmp/module_infrasstudio-1.9.0.zip
chown -R www-data:www-data infrasstudio/
Méthode 3 — Via Git (pour les développeurs)
Cette méthode est appropriée si vous souhaitez suivre les évolutions du module au fil des versions.
cd /var/www/dolibarr/htdocs/custom/
git clone https://github.com/infras/infrasstudio.git
cd infrasstudio
git checkout v1.9.0 # ou la version souhaitée
Avertissement — En production, ne pointez jamais sur la branche main. Utilisez toujours un tag de version stable.
Activer le module dans Dolibarr
Une fois le dossier en place, l'activation s'effectue depuis l'interface :
- Rendez-vous dans Accueil → Configuration → Modules.
- Recherchez « InfraSStudio » dans le filtre.
- La carte du module apparaît : « InfraSStudio — surcouche d'édition Website ».
- Cliquez sur l'interrupteur d'activation à droite de la carte.
- Patientez. Dolibarr exécute alors plusieurs opérations en tâche de fond :
- création des cinq tables SQL,
- enregistrement des sept permissions,
- installation des hooks (
main,login,websitepage,websitenav), - déclaration des tâches planifiées,
- restauration des constantes éventuellement sauvegardées lors d'une désactivation antérieure.
- L'interrupteur passe au vert : le module est activé.
Vérification rapide — Survolez le menu Outils en haut de Dolibarr. Une nouvelle entrée doit apparaître : InfraS → InfraSStudio.
En cas d'échec de l'activation
Voici les erreurs les plus fréquentes et leurs solutions :
Message d'erreur | Cause et solution |
|---|---|
« Module Website non activé » | Activez le module Website dans Configuration → Modules, puis revenez activer InfraSStudio. |
« Version Dolibarr incompatible » | Mettez Dolibarr à jour vers une version supportée. En dernier recours, définissez la constante
. |
« Erreur SQL CREATE TABLE » | L'utilisateur SQL ne dispose pas du droit
. Accordez-le, ou créez les tables manuellement à partir des fichiers
. |
« Permission denied » sur le système de fichiers | Exécutez
côté serveur. |
Page blanche après activation | Consultez le fichier
. La cause est presque toujours une extension PHP manquante. |
Vérification après installation
Le module est correctement installé si :
- L'entrée InfraS → InfraSStudio apparaît dans le menu Outils.
- La carte du module dans Configuration → Modules est verte.
- Aucune erreur n'est consignée dans
htdocs/documents/dolibarr.log. - La page Configuration → InfraSStudio → Diagnostic est accessible.
Au chapitre suivant, vous configurerez votre premier site géré par le module.
Chapitre 5 — Prérequis et compatibilité
Avant l'installation du module, il convient de vérifier que votre environnement répond aux conditions techniques requises. Cette page liste l'ensemble des prérequis. Aucun n'est facultatif.
Côté Dolibarr
Élément | Exigence |
|---|---|
Version Dolibarr | 18.0.0 minimum, 24.x.x maximum |
Module Website | Activé. Cette dépendance est obligatoire ; sans elle, l'installation du module échoue. |
Au moins un site Website | Créé avec une référence et un virtualhost |
Module Categories | Recommandé. Utile pour la catégorisation des contenus. |
Conseil — La version de votre Dolibarr est consultable depuis Accueil → À propos. La liste des modules activés est disponible dans Configuration → Modules.
Côté serveur (PHP et système)
Élément | Exigence |
|---|---|
Version PHP | 7.4 minimum, 8.4 maximum |
Extensions PHP |
,
,
,
,
|
Base de données | MySQL 5.7 ou supérieur, ou MariaDB 10.3 ou supérieur |
Serveur web | Apache (recommandé) ; nginx pris en charge avec une configuration dédiée |
Espace disque | Environ 50 Mo pour le module, en plus de l'espace nécessaire à vos médias |
Permissions du système de fichiers | PHP doit pouvoir écrire dans
ainsi que dans le docroot des sites |
Note — Tous ces prérequis sont contrôlés automatiquement par la page Diagnostic du module après installation. En cas de doute, procédez à l'installation et laissez le diagnostic identifier les manquements éventuels.
Vérification rapide en ligne de commande
Si vous disposez d'un accès SSH au serveur, les commandes suivantes vous permettent de contrôler l'environnement en quelques instants :
# Version PHP
php -v
# Extensions PHP installées
php -m | grep -iE "mbstring|json|pdo_mysql|gd|fileinfo"
# Version de Dolibarr
grep "version =" /var/www/dolibarr/htdocs/filefunc.inc.php
# Espace disque disponible
df -h /var/www/
Liste de contrôle avant installation
Avant de passer au chapitre suivant, assurez-vous des points suivants :
- Votre installation Dolibarr est en version 18.x à 24.x.
- Le module Website est activé.
- Au moins un site Website est créé, avec une référence et un virtualhost configurés.
- Vous disposez des droits d'administrateur sur Dolibarr.
- Vous avez à votre disposition l'archive du module ou un accès au répertoire
htdocs/custom/.
Avertissement — Sur une instance de production, il est impératif d'effectuer une sauvegarde complète (base de données et fichiers) avant l'installation. C'est l'occasion idéale de tester votre procédure de restauration.
Partie I — Comprendre InfraSStudio
CHAPITRE 4 — InfraSStudio dans l'écosystème Dolibarr
Pour utiliser le module efficacement, il est utile de comprendre son positionnement par rapport à Dolibarr et au module Website natif. Ce chapitre présente la répartition des rôles, les dépendances et les limites de la responsabilité du module.
Une analogie pour introduire
L'écosystème Dolibarr et ses extensions peuvent être comparés à un musée et sa galerie d'exposition.
Composant | Rôle |
|---|---|
Dolibarr ERP | Le musée. Il abrite les collections (produits, tiers, médias), les notices (libellés multilingues) et les registres (ventes, factures). |
Module Website | La galerie d'exposition. Elle définit l'espace et l'éclairage où les œuvres choisies sont présentées au public. |
InfraSStudio | Le commissaire d'exposition. Il choisit la mise en valeur des œuvres existantes, sans intervenir sur les œuvres elles-mêmes. Il rédige les notices et organise les parcours. |
Lorsqu'une nouvelle œuvre rejoint les collections du musée, elle est automatiquement présentée dans la galerie selon la mise en page prévue. C'est le rôle du catalogue produit dynamique, présenté en détail au Chapitre 15.
Une architecture en trois couches
Le module fonctionne dans un système composé de trois couches superposées, chacune avec un rôle précis.
Couche | Rôle |
|---|---|
InfraSStudio | Édition des slots et des médias, gestion des traductions, catalogue produit dynamique, fonctionnalités de blog, outils de référencement. |
Module Website (natif Dolibarr) | Stockage des pages, génération des fichiers Apache, gestion des virtualhosts, support multicompany. |
Dolibarr ERP | Tiers, produits, factures, utilisateurs, permissions, traductions, base de données, médias. |
Chaque couche s'appuie sur celle qui se trouve en dessous, sans la remplacer ni la dupliquer.
Dolibarr ERP, la couche fondamentale
Dolibarr ERP constitue le socle. Il fournit l'ensemble des services dont les couches supérieures ont besoin :
- Une base de données structurée (environ 300 tables préfixées
llx_). - Un système d'utilisateurs avec gestion fine des permissions.
- Une gestion multicompany permettant à plusieurs entités juridiques de cohabiter sur la même installation.
- Un système de constantes pour le stockage des configurations.
- Des classes métier réutilisables :
Product,Societe,Contact,User,CMailFile,Translate, etc. - Un système de traductions par fichiers
.lang. - Des mécanismes d'extension par hooks et triggers.
Recommandé — Le module s'appuie systématiquement sur les classes natives de Dolibarr lorsque c'est possible. Cette approche garantit la cohérence avec le reste de l'instance et limite les divergences en cas de mise à jour de Dolibarr.
Le module Website, la couche d'hébergement
Le module Website est livré nativement avec Dolibarr. Pour chaque site qu'il prend en charge, il assure les fonctions suivantes :
- Création d'une entrée dans la table
llx_websitecontenant la référence, le virtualhost et les langues. - Stockage des pages dans la table
llx_website_pageavec leur contenu HTML. - Génération d'un fichier
page<N>.tpl.phpsur le disque. - Création des wrappers Apache
<alias>.phpqui redirigent vers le bon template. - Prise en charge du multilingue via le mécanisme de pages sœurs.
Important — Le module Website est l'hôte d'InfraSStudio. Sans lui, le module n'a rien à éditer. La dépendance est inscrite dans le descripteur : InfraSStudio refuse de s'activer si le module Website ne l'est pas.
Le module InfraSStudio, la couche d'édition
InfraSStudio ajoute par-dessus le module Website l'ensemble des fonctionnalités nécessaires à un usage par des utilisateurs non techniques :
- Le scanner de slots qui détecte automatiquement les zones éditables.
- L'éditeur en trois colonnes accessible depuis l'interface Dolibarr.
- La bibliothèque de médias mutualisée.
- Le système de traductions, synchronisé avec les fichiers
.langde Dolibarr. - Le catalogue produit dynamique, qui transforme la table
llx_producten pages publiques. - Le mécanisme de brouillons et de publication.
- La génération automatique du sitemap et des balises hreflang.
- Le système de gabarits permettant aux éditeurs de créer leurs propres pages.
Note — Ce qu'InfraSStudio ne fait pas
- Il ne sert pas les pages publiques. Cette fonction est assurée par Apache et le module Website.
- Il ne stocke pas les pages elles-mêmes, qui restent dans
llx_website_pageet leurs templates correspondants. - Il ne gère pas les utilisateurs ni les permissions globales : ce sont les utilisateurs Dolibarr qui sont autorisés via les permissions du module.
Le déroulement d'une requête publique
Pour clarifier le rôle de chaque couche, suivons le parcours d'une requête HTTP de bout en bout :
- Le visiteur demande une URL, par exemple
https://exemple.com/page1.php. - Apache reçoit la requête. Le virtualhost pointe vers le docroot du site.
- Le wrapper
page1.php, généré par le module Website, inclut le fichiermaster.inc.phplocal et amorce Dolibarr. - Le wrapper inclut ensuite le fichier
page<N>.tpl.phpcorrespondant. - Le template produit le HTML, contenant encore les tokens
{{slot:...}}et{{shortcode:...}}. - InfraSStudio intercepte le HTML via le hook
completeHtmlOutputet résout chaque token : valeurs courantes des slots filtrées par la locale du visiteur, données Dolibarr lues en direct. - Apache transmet au navigateur le HTML final, dépourvu de tout token.
Résultat — Du point de vue du navigateur, la page est un document HTML standard. Aucun token n'est visible et aucun traitement JavaScript spécifique n'est nécessaire.
L'emplacement des données
Pour comprendre le module en profondeur, le tableau ci-dessous récapitule où chaque type de donnée est stocké.
Donnée | Emplacement |
|---|---|
HTML d'une page (avec tokens) | Disque (
) et base (
) |
Métadonnées de page (titre SEO, description) |
,
,
,
|
Valeurs des slots |
|
Brouillons en attente de publication |
|
Médias téléversés |
|
Métadonnées des médias |
|
Texte alternatif par locale |
|
Traductions natives produit |
(FR) et
(autres locales) |
Traductions des extrafields produit |
et
|
Historique des modifications |
|
Configuration du module |
(constantes préfixées
) |
Ce qui reste géré dans Dolibarr lui-même
Le module ne remplace aucun module Dolibarr existant. Les opérations suivantes continuent à se faire dans Dolibarr :
- L'édition d'une fiche produit (libellé, prix, catégories, photos rattachées) reste l'usage standard de la fiche produit Dolibarr. Le module InfraSStudio n'édite que les extrafields traduisibles et leurs versions linguistiques, qui se synchronisent automatiquement avec la fiche native.
- La gestion des tiers, des contacts, des devis et des factures s'effectue via les modules natifs Dolibarr.
- L'administration des utilisateurs et des permissions reste dans l'interface d'administration Dolibarr.
- La création d'un nouveau site Website (référence, virtualhost, langues principales) se fait dans l'administration du module Website. InfraSStudio prend ensuite le relais pour l'édition du contenu.
- La sauvegarde de la base et des fichiers suit la procédure standard de Dolibarr.
Recommandé — Le module ne crée aucun outil parallèle pour ces fonctions. Il s'appuie sur l'existant, ce qui simplifie la formation et limite la duplication d'information.
CHAPITRE 3 — Le principe de séparation entre contenu et design
Une analogie pour comprendre
Le rapport entre développeur et éditeur peut être comparé à celui qui unit un architecte et l'occupant d'un appartement.
Rôle | Responsabilité |
|---|---|
L'architecte | Conçoit les murs, les ouvertures, les volumes, les circulations. Une fois le chantier livré, sa mission est terminée. |
L'occupant | Choisit la peinture, le mobilier, l'agencement. Vit dans le logement et l'adapte à ses besoins, dans le respect des volumes existants. |
InfraSStudio applique le même découpage à votre site. Le développeur conçoit la structure et la livre. L'éditeur en remplit les contenus, sans toucher aux volumes.
Cette discipline est la condition pour qu'un site reste maintenable et cohérent dans la durée.
L'approche fondamentale du module se résume à un principe simple :
Le design relève de la responsabilité du développeur. Le contenu relève de celle de l'éditeur. Les deux périmètres ne se superposent jamais.
Cette séparation détermine l'architecture du module, le fonctionnement de l'éditeur, le découpage des permissions et même les fonctionnalités qui ne sont volontairement pas implémentées.
Pourquoi cette séparation est essentielle
Dans la majorité des outils de gestion de contenu, les frontières entre contenu et structure finissent par s'estomper. Le rédacteur a accès au HTML, au CSS, à la mise en page. À l'usage, il modifie sans s'en rendre compte des éléments structurels — parce que les outils l'autorisent à toucher à ce qui ne devrait pas l'être.
InfraSStudio adopte la position inverse : la structure est verrouillée et seules les zones explicitement marquées comme éditables par le développeur sont accessibles à l'éditeur.
Bénéfices observés
- L'éditeur ne peut pas altérer la mise en page
Il modifie uniquement les zones identifiées comme slots. Les conteneurs, les classes CSS et l'ordre des sections lui sont totalement inaccessibles.
- Le design peut évoluer indépendamment du contenu
Une refonte ne casse pas les contenus existants. Les valeurs des slots sont conservées et viennent simplement remplir la nouvelle structure.
- La maintenance reste compréhensible dans la durée
Plusieurs mois après la livraison, un autre développeur peut reprendre le code et identifier sans ambiguïté ce qui est éditable et ce qui ne l'est pas.
Les mécanismes qui matérialisent cette séparation
La séparation n'est pas une simple convention, elle est inscrite à plusieurs niveaux dans le fonctionnement technique du module.
Le HTML reste sous le contrôle du développeur
Le HTML d'une page Dolibarr Website est stocké dans deux emplacements synchronisés : la base de données et un fichier .tpl.php sur le disque. Le module ne propose à aucun moment d'éditer ce HTML. Il n'existe pas de bouton « voir le code source », pas d'éditeur de texte brut, pas d'option dissimulée. L'éditeur n'a accès qu'aux zones marquées comme slots, le reste lui demeure transparent.
Les slots sont détectés automatiquement
Lorsque le développeur ajoute un slot dans un template, aucune autre opération n'est nécessaire. Le module dispose d'un scanner qui parcourt les fichiers .tpl.php du site, détecte les tokens {{slot:...}}, les enregistre dans la table dédiée et génère l'interface d'édition correspondante.
<h2>{{slot:section_title|type=text|default=Nos services|label=Titre de la section}}</h2>
Au prochain rescan, manuel ou automatique, le slot apparaît dans le panneau d'édition. Aucune configuration intermédiaire n'est requise.
Le rendu public est transparent
Lorsqu'un visiteur consulte une page publique, le navigateur ne voit jamais de slot. Le module intercepte le HTML avant son envoi, remplace chaque token {{slot:...}} par sa valeur courante et transmet au visiteur un document HTML standard.
Cette substitution intervient au moment du rendu, jamais au moment de l'édition. Le fichier .tpl.php conserve toujours les tokens originaux, ce qui présente plusieurs avantages :
- Le développeur peut consulter et modifier le template sans craindre une pollution par les modifications de l'éditeur.
- Si vous purgez la table des slots, le site affichera simplement les valeurs par défaut, sans cesser de fonctionner.
- L'export du code d'un site et l'export de son contenu sont deux opérations distinctes, ce qui simplifie les migrations.
Les permissions traduisent la séparation
Le module définit sept permissions Dolibarr distinctes, qui permettent d'adapter précisément l'accès aux différents rôles :
Permission | Destinataire type |
|---|---|
| Tout utilisateur autorisé à voir le menu du module |
| Lecteur seul, par exemple un commercial qui consulte le site avant un rendez-vous |
| Rédacteur autorisé à modifier les slots de texte |
| Traducteur intervenant sur les versions linguistiques |
| Gestionnaire des médias, autorisé à téléverser et remplacer des images |
| Responsable de la publication finale des contenus |
| Administrateur du module : configuration, sites gérés, gabarits |
En pratique, un rédacteur reçoit en général readContent et editContent. Un traducteur reçoit editTranslations. L'intégrateur conserve admin. Aucune permission n'est attribuée au-delà du strict nécessaire.
Ce qui n'est volontairement pas proposé
Pour rester fidèle à ce principe, certaines fonctionnalités ne sont pas implémentées. Ce choix est délibéré.
Pas d'éditeur visuel par blocs
Il n'est pas possible de déposer des blocs à la souris pour composer une page. La structure reste codée par le développeur. Si une nouvelle section est nécessaire, deux options se présentent : utiliser un slot de type richtext, qui autorise une mise en forme limitée à l'intérieur d'une zone existante, ou demander au développeur d'ajouter un nouvel emplacement dans le template.
Pourquoi — Les éditeurs visuels par blocs produisent fréquemment des pages incohérentes lorsque l'utilisateur n'est pas formé à la mise en page. La structure verrouillée garantit la cohérence visuelle dans la durée.
Pas d'édition HTML brute
Même un éditeur expérimenté ne dispose pas d'un mode permettant de modifier le HTML directement. Les slots de type richtext proposent un éditeur visuel avec mise en forme (gras, italique, listes, liens, sous-titres) mais aucun bouton « source ».
Pourquoi — L'édition de HTML brut est la première source d'erreurs de mise en forme. Si une présentation spécifique est nécessaire, elle relève du CSS, et donc du développeur, non du contenu.
Pas de gestion de menus côté éditeur
Pas de logique conditionnelle dans les slots
Les slots ne portent aucune logique métier. Il n'est pas possible de définir une règle du type « afficher ce texte uniquement si l'utilisateur est connecté ». Les slots sont strictement des conteneurs de contenu.
Pourquoi — La logique relève du PHP, donc du développeur. Mêler logique et contenu rend les sites difficiles à maintenir au-delà de quelques années.
CHAPITRE 2 — À qui s'adresse le module
InfraSStudio s'adresse à trois publics qui collaborent autour d'un même site web. Identifier votre rôle vous aidera à repérer les sections de cette documentation qui vous concernent en priorité.
Le rédacteur ou utilisateur final
Vous êtes en charge de la rédaction ou de la mise à jour des contenus publiés sur votre site.
Conseil — Votre lecture prioritaire est la Partie III. Commencez par le Chapitre 9 pour le tour de l'interface, puis le Chapitre 10 pour vos premières modifications.
Vos attentes
- Modifier rapidement un texte ou une image, sans craindre d'altérer la mise en page.
- Visualiser immédiatement le résultat de vos modifications.
- Travailler sans dépendance technique : ne pas avoir à solliciter un développeur pour chaque ajustement.
- Gérer les versions linguistiques sans dupliquer les pages.
- Préparer plusieurs modifications avant publication, et tout publier en une fois.
Ce que le module vous apporte
Fonctionnalité | Avantages |
|---|---|
Interface en trois colonnes | Liste des pages, aperçu en direct et formulaires d'édition rassemblés dans un seul écran. |
Édition au clic | Cliquer sur un texte de l'aperçu ouvre directement le formulaire correspondant. |
Bibliothèque média partagée | Réutilisation des images d'une page à l'autre sans téléchargement répété. |
Mécanisme de publication | Les modifications restent privées tant qu'elles ne sont pas explicitement publiées. |
Onglets de langue | Bascule rapide entre les versions linguistiques, avec drapeaux comme repères visuels. |
Le développeur intégrateur
Vous êtes en charge de la conception ou de l'évolution technique d'un site Dolibarr Website.
Conseil — Votre lecture prioritaire est la Partie IV pour les aspects pratiques, complétée par la Partie VI en référence.
Vos attentes
- Conserver la maîtrise complète du HTML, du CSS et de la structure des pages.
- Permettre à votre client d'éditer ses contenus sans solliciter votre intervention.
- Réutiliser une même structure pour des pages similaires.
- Afficher des données Dolibarr (produits, catégories, informations société) sans dupliquer ces informations.
- Livrer un site dont la maintenance courante ne vous incombe pas.
Ce que le module vous apporte
Outil | Usage |
|---|---|
Système de slots | Rendre éditable n'importe quelle balise HTML par l'ajout d'un token
. |
Shortcodes | Insérer des données Dolibarr en direct :
,
, etc. |
Catalogue de gabarits | Modèles de page réutilisables (page libre, article, landing produit) que vos clients peuvent instancier. |
Génération automatique de pages produit | Un seul template pour N produits Dolibarr ; le module génère automatiquement les pages publiques. |
Outils en ligne de commande | Scripts pour le rescan des slots, la génération de sitemap, les migrations, intégrables dans des pipelines. |
L'administrateur Dolibarr
Vous êtes en charge de l'instance Dolibarr : installation, mises à jour, permissions, sauvegardes.
Conseil — Votre lecture prioritaire est la Partie II pour la mise en service, puis la Partie V pour la maintenance.
Vos attentes
- Installer le module sans surprise et de manière reproductible.
- Vérifier que l'intégration est complète : versions compatibles, tables créées, hooks en place, tâches planifiées actives.
- Distribuer les permissions selon les rôles de chacun.
- Disposer de points de vérification clairs en cas de problème.
- Maîtriser les mises à jour sans interruption du site public.
Ce que le module vous apporte
Outil | Usage |
|---|---|
Module Dolibarr standard | Installation par la procédure classique des modules externes Dolibarr. |
Page Diagnostic | Vérification automatisée de tous les points d'intégration : versions, extensions PHP, tables, hooks, tâches planifiées, état des sites. |
Permissions granulaires | Sept permissions distinctes pour adapter l'accès à chaque rôle. |
Mécanismes de portabilité | Constantes de configuration permettant l'adaptation à différents types d'hébergement. |
Historique des versions | Changelog au format XML standard Dolibarr, consultable depuis l'administration. |
Le cas des équipes réduites
Sur de nombreuses installations, une seule personne porte plusieurs rôles. C'est typiquement le cas du consultant indépendant qui livre un site à un petit commerce, de l'agence où le développeur senior assure aussi l'administration, ou du dirigeant d'une jeune entreprise qui édite lui-même son site avant de pouvoir déléguer.
Recommandé — Si vous combinez plusieurs rôles, lisez la documentation dans l'ordre des parties. Le ton et le niveau technique évoluent progressivement, du général vers le spécifique.
CHAPITRE 1 — Qu'est-ce qu'InfraSStudio ?
Définition
InfraSStudio est un module d'édition de contenu pour Dolibarr. Il s'installe par-dessus le module Website natif de Dolibarr et permet aux utilisateurs non techniques de modifier les textes, les images et les données affichées sur leur site web public, sans manipuler de code HTML ni de base de données.
Le module est conçu pour s'intégrer dans le quotidien d'une équipe : le développeur livre la structure d'un site, l'éditeur en remplit les contenus, et chacun reste dans son rôle.
Le besoin auquel il répond
Dolibarr propose depuis plusieurs versions un module Website complet, capable de gérer des pages, des langues, des images et des virtualhosts. Toutefois, l'édition d'une page passe par la modification directe du HTML stocké en base. Pour un développeur, cette opération est triviale ; pour la personne chargée de rédiger des contenus marketing, d'actualiser des fiches ou d'ajuster une page de contact, elle constitue un obstacle.
Sans outil intermédiaire, le scénario qui se reproduit régulièrement est le suivant :
- Le développeur livre un site abouti.
- Plusieurs mois plus tard, un changement mineur est demandé par le client.
- Le client ouvre l'éditeur de Dolibarr, voit du HTML, hésite à modifier.
- Une demande est envoyée par e-mail au développeur.
- La modification, qui prend quelques minutes, est appliquée plusieurs jours plus tard, après deux ou trois échanges.
InfraSStudio interrompt ce cycle. Le développeur conserve la responsabilité du HTML, mais y insère des balises invisibles aux endroits qui doivent rester modifiables. Lorsque l'éditeur ouvre l'interface du module, il voit non plus du code, mais des champs de formulaire correspondant exactement aux zones éditables. Il modifie, il enregistre, le site est à jour.
Le principe de fonctionnement
L'unité de base du module est le slot. Un slot est un emplacement nommé dans une page, déclaré par le développeur dans le HTML, qui correspond à une zone éditable. Chaque slot possède un type (texte court, texte riche, image, lien, couleur, etc.) et, si nécessaire, une valeur par défaut.
<!-- Page non éditable -->
<h1>Bienvenue sur notre site</h1>
<!-- Page rendue éditable via InfraSStudio -->
<h1>{{slot:hero_title|type=text|default=Bienvenue sur notre site}}</h1>
Le HTML reste lisible pour le développeur. Lorsqu'un visiteur consulte la page publique, le module substitue le slot par sa valeur courante avant l'envoi au navigateur. Dans l'interface du module, l'éditeur ne voit pas le HTML mais un champ de saisie nommé « Hero Title » avec un bouton de validation.
Ce que le module n'est pas
Pour situer correctement InfraSStudio, il est utile de préciser ce qu'il ne cherche pas à être :
Ce n'est pas | Pourquoi |
|---|---|
Un éditeur visuel par blocs (de type Elementor, Divi, WordPress Gutenberg) | La structure des pages reste codée par le développeur. L'éditeur remplit les emplacements prévus, sans réorganiser la mise en page. |
Un thème prêt à l'emploi | Le module ne fournit pas de composants visuels, mais une couche d'édition pour le HTML que vous écrivez. |
Un système de gestion de contenu autonome | Le module dépend de Dolibarr et du module Website. Il fonctionne comme une surcouche, non comme un remplacement. |
Ce que le module apporte
Fonctionnalités | Avantages |
|---|---|
Un éditeur de slots | Détecte automatiquement les zones éditables dans le HTML et génère l'interface de saisie correspondante. |
Une bibliothèque de médias centralisée | Gère les images, vidéos et documents partagés entre les pages. |
Un système de traduction local | Aligné sur les langues prises en charge par Dolibarr. |
Un éditeur de fiches produit | Transforme le catalogue Dolibarr en pages web dynamiques. |
Une gestion de blog | Repose sur les pages standard du module Website, sans table dédiée. |
Un mécanisme de brouillons et de publication | Prépare plusieurs modifications avant de les rendre visibles. |
Des outils de référencement intégrés | Offrent un aperçu des résultats Google ainsi que la génération de sitemap et de balises hreflang multilingues. |
La promesse du module
Le développeur conserve le contrôle du HTML. L'éditeur conserve le contrôle du contenu. Chacun travaille dans son périmètre, sans empiéter sur celui de l'autre.
Infrasstudio
📚 InfraSStudio — Le wiki
Le manuel complet du module InfraSStudio. Ce wiki est organisé comme un livre : six parties, qui vont de la présentation générale jusqu'aux références techniques détaillées et aux procédures pas à pas.
🎯 Vous éditez le contenu de votre site ?
Lisez la Partie I (pour comprendre l'outil) puis sautez à la Partie III (l'utilisation au quotidien).
🛠️ Vous installez le module sur une instance Dolibarr ?
Lisez la Partie II puis la Partie V.
👨💻 Vous intégrez un nouveau site ou personnalisez un template ?
Tout y passe, mais commencez par la Partie IV après les fondamentaux.
📖 Table des matières
Partie I — Comprendre InfraSStudio
- Qu'est-ce qu'InfraSStudio ?
- À qui s'adresse le module
- La philosophie : séparer contenu et design
- InfraSStudio dans l'écosystème Dolibarr
Partie II — Démarrer
- Prérequis et compatibilité
- Installation du module
- Activer un site managé
- Vérifier l'installation avec la page Diagnostic
Partie III — Pour l'utilisateur final
- Tour de l'interface Studio
- Éditer les textes (slots)
- Gérer les images et la bibliothèque média
- Brouillon, publication et versions
- Travailler en plusieurs langues
- Gérer les articles de blog
- Catalogue produit dynamique
- SEO, sitemap et partage social
Partie IV — Pour le développeur intégrateur
- Préparer un site Dolibarr Website
- Annoter un template avec des slots
- La grammaire des slots en détail
- Insérer des données Dolibarr (shortcodes)
- Gérer le multilingue (pages sœurs)
- Créer ses propres gabarits de page
- Le catalogue produit dynamique en profondeur
Partie V — Administration et maintenance
- Permissions et rôles utilisateur
- Configuration avancée (constantes)
- Diagnostic et dépannage
- Mettre à jour le module
Partie VI — Référence
- Référence des constantes
- Référence des shortcodes
- Référence des hooks et triggers
- Référence SQL : tables et colonnes
- Référence des scripts CLI
Partie VII — Annexes
- Glossaire
- Foire aux questions
- Historique des versions
- Crédits et licence
🧭 Conventions de lecture
ℹ️ Information — Une mise en contexte ou un complément utile à la compréhension.
💡 Astuce — Un raccourci, une bonne pratique optionnelle, un gain de temps.
⚠️ Attention — Une action irréversible ou un piège fréquent.
✅ Bonne pratique — Une recommandation validée par l'expérience.