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

### <span style="color: rgb(35, 111, 161);">Sites gérés</span>

<table id="bkmrk-constantedescription" style="width: 100%; border-collapse: collapse; margin: 1rem 0px; font-size: 0.95em;"><colgroup><col></col><col></col></colgroup><tbody><tr style="background: rgb(25, 5, 45); color: rgb(254, 252, 232);"><th class="align-left" style="padding: 0.6rem 1rem; text-align: left; border: 1px solid rgb(25, 5, 45);">Constante

</th><th class="align-left" style="padding: 0.6rem 1rem; text-align: left; border: 1px solid rgb(25, 5, 45);">Description

</th></tr><tr><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">`<span class="editor-theme-code">INFRASSTUDIO_MANAGED_SITES</span>`

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);"><span style="white-space: pre-wrap;">CSV des identifiants de sites gérés. Exemple : </span>

`<span class="editor-theme-code">1,2,5</span>`

.

</td></tr><tr style="background: rgb(250, 245, 255);"><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">`<span class="editor-theme-code">INFRASSTUDIO_SITE_<id>_MEDIA_MODE</span>`

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);"><span style="white-space: pre-wrap;">Mode média par site. </span>

`<span class="editor-theme-code">native</span>`

<span style="white-space: pre-wrap;"> (par défaut) ou </span>

`<span class="editor-theme-code">module</span>`

.

</td></tr><tr><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">`<span class="editor-theme-code">INFRASSTUDIO_SITE_<id>_BLOG_INDEX_PAGE</span>`

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">Identifiant de la page d'index du blog (active l'assistant « + Nouvel article »).

</td></tr><tr style="background: rgb(250, 245, 255);"><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">`<span class="editor-theme-code">INFRASSTUDIO_SITE_<id>_DOCROOT</span>`

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">Surcharge du docroot Apache pour ce site spécifique.

</td></tr></tbody></table>

### <span style="color: rgb(35, 111, 161);">Portabilité du système de fichiers</span>

Pour les hébergements aux configurations non standards :

<table id="bkmrk-constantedescription-1" style="width: 100%; border-collapse: collapse; margin: 1rem 0px; font-size: 0.95em;"><colgroup><col></col><col></col></colgroup><tbody><tr style="background: rgb(25, 5, 45); color: rgb(254, 252, 232);"><th class="align-left" style="padding: 0.6rem 1rem; text-align: left; border: 1px solid rgb(25, 5, 45);">Constante

</th><th class="align-left" style="padding: 0.6rem 1rem; text-align: left; border: 1px solid rgb(25, 5, 45);">Description

</th></tr><tr><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">`<span class="editor-theme-code">INFRASSTUDIO_DOCROOT_PATTERN</span>`

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);"><span style="white-space: pre-wrap;">Modèle de chemin partagé utilisant le marqueur </span>

`<span class="editor-theme-code">{ref}</span>`

<span style="white-space: pre-wrap;">. Exemple : </span>

`<span class="editor-theme-code">/srv/sites/{ref}</span>`

.

</td></tr><tr style="background: rgb(250, 245, 255);"><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">`<span class="editor-theme-code">INFRASSTUDIO_TEMPLATE_EXTRA_DIR</span>`

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">Dossier supplémentaire à scanner pour les gabarits de page.

</td></tr></tbody></table>

**Note — Cascade de résolution —**<span style="white-space: pre-wrap;"> Pour le docroot d'un site, l'ordre de recherche est : </span>`<span class="editor-theme-code">INFRASSTUDIO_SITE_<id>_DOCROOT</span>`<span style="white-space: pre-wrap;">, puis </span>`<span class="editor-theme-code">INFRASSTUDIO_DOCROOT_PATTERN</span>`<span style="white-space: pre-wrap;">, puis le repli sur </span>`<span class="editor-theme-code">/var/www/<ref></span>`.

### <span style="color: rgb(35, 111, 161);">Catalogue produit</span>

<table id="bkmrk-constantedescription-2" style="width: 100%; border-collapse: collapse; margin: 1rem 0px; font-size: 0.95em;"><colgroup><col></col><col></col></colgroup><tbody><tr style="background: rgb(25, 5, 45); color: rgb(254, 252, 232);"><th class="align-left" style="padding: 0.6rem 1rem; text-align: left; border: 1px solid rgb(25, 5, 45);">Constante

</th><th class="align-left" style="padding: 0.6rem 1rem; text-align: left; border: 1px solid rgb(25, 5, 45);">Description

</th></tr><tr><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">`<span class="editor-theme-code">INFRASSTUDIO_WEBSITE_KEY</span>`

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">Référence du site cible des wrappers solution.

</td></tr><tr style="background: rgb(250, 245, 255);"><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">`<span class="editor-theme-code">INFRASSTUDIO_PUBLIC_DOCROOT</span>`

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">Docroot Apache absolu où écrire les wrappers.

</td></tr><tr><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">`<span class="editor-theme-code">INFRASSTUDIO_PRODUCT_UNIVERS_MAP</span>`

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">Surcharge JSON de la cartographie catégorie vers univers.

</td></tr><tr style="background: rgb(250, 245, 255);"><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">`<span class="editor-theme-code">INFRASSTUDIO_TRANSLATABLE_PRODUCT_FIELDS</span>`

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">CSV de slugs de champs personnalisés à déclarer comme traduisibles, en complément du registre par défaut.

</td></tr><tr><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">`<span class="editor-theme-code">INFRASSTUDIO_TRANSLATABLE_PRODUCT_FIELDS_JSON</span>`

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">Surcharge JSON complète du registre.

</td></tr><tr style="background: rgb(250, 245, 255);"><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">`<span class="editor-theme-code">INFRASSTUDIO_SITE_<id>_WRAPPER_PREFIX</span>`

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);"><span style="white-space: pre-wrap;">Préfixe des wrappers (par défaut </span>

`<span class="editor-theme-code">solution-</span>`

).

</td></tr><tr><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">`<span class="editor-theme-code">INFRASSTUDIO_SITE_<id>_WRAPPER_TEMPLATE_PAGEURL</span>`

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);"><span style="white-space: pre-wrap;">Slug du gabarit (par défaut </span>

`<span class="editor-theme-code">solution-detail</span>`

).

</td></tr></tbody></table>

### <span style="color: rgb(35, 111, 161);">Apparence du Studio</span>

<table id="bkmrk-constantevaleurspar-" style="width: 100%; border-collapse: collapse; margin: 1rem 0px; font-size: 0.95em;"><colgroup><col></col><col></col><col></col></colgroup><tbody><tr style="background: rgb(25, 5, 45); color: rgb(254, 252, 232);"><th class="align-left" style="padding: 0.6rem 1rem; text-align: left; border: 1px solid rgb(25, 5, 45);">Constante

</th><th class="align-left" style="padding: 0.6rem 1rem; text-align: left; border: 1px solid rgb(25, 5, 45);">Valeurs

</th><th class="align-left" style="padding: 0.6rem 1rem; text-align: left; border: 1px solid rgb(25, 5, 45);">Par défaut

</th></tr><tr><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">`<span class="editor-theme-code">INFRASSTUDIO_UI_THEME</span>`

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">`<span class="editor-theme-code">light</span>`

<span style="white-space: pre-wrap;">, </span>

`<span class="editor-theme-code">dark</span>`

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">`<span class="editor-theme-code">light</span>`

</td></tr><tr style="background: rgb(250, 245, 255);"><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">`<span class="editor-theme-code">INFRASSTUDIO_UI_ACCENT</span>`

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">`<span class="editor-theme-code">indigo</span>`

<span style="white-space: pre-wrap;">, </span>

`<span class="editor-theme-code">ochre</span>`

<span style="white-space: pre-wrap;">, </span>

`<span class="editor-theme-code">plum</span>`

<span style="white-space: pre-wrap;">, </span>

`<span class="editor-theme-code">forest</span>`

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">`<span class="editor-theme-code">indigo</span>`

</td></tr></tbody></table>

### <span style="color: rgb(35, 111, 161);">Multilingue côté gabarits</span>

<table id="bkmrk-constantedescription-3" style="width: 100%; border-collapse: collapse; margin: 1rem 0px; font-size: 0.95em;"><colgroup><col></col><col></col></colgroup><tbody><tr style="background: rgb(25, 5, 45); color: rgb(254, 252, 232);"><th class="align-left" style="padding: 0.6rem 1rem; text-align: left; border: 1px solid rgb(25, 5, 45);">Constante

</th><th class="align-left" style="padding: 0.6rem 1rem; text-align: left; border: 1px solid rgb(25, 5, 45);">Description

</th></tr><tr><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">`<span class="editor-theme-code">INFRASSTUDIO_LANG_ISO</span>`

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">Force la langue active. Définie dynamiquement par les gabarits.

</td></tr><tr style="background: rgb(250, 245, 255);"><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">`<span class="editor-theme-code">INFRASSTUDIO_LANG_COOKIE</span>`

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);"><span style="white-space: pre-wrap;">Nom du cookie de persistance de la langue (par défaut </span>

`<span class="editor-theme-code">infras_lang</span>`

).

</td></tr><tr><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">`<span class="editor-theme-code">INFRASSTUDIO_LANG_MAP_JSON</span>`

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);"><span style="white-space: pre-wrap;">Surcharge de la cartographie ISO2 vers locale (exemple : </span>

`<span class="editor-theme-code">{"en":"en_GB"}</span>`

).

</td></tr><tr style="background: rgb(250, 245, 255);"><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">`<span class="editor-theme-code">INFRASSTUDIO_BLOG_FALLBACK_IMAGE</span>`

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">Image par défaut affichée lorsqu'un article ne possède pas d'image principale.

</td></tr></tbody></table>

### <span style="color: rgb(35, 111, 161);">Compatibilité et débogage</span>

<table id="bkmrk-constantedescription-4" style="width: 100%; border-collapse: collapse; margin: 1rem 0px; font-size: 0.95em;"><colgroup><col></col><col></col></colgroup><tbody><tr style="background: rgb(25, 5, 45); color: rgb(254, 252, 232);"><th class="align-left" style="padding: 0.6rem 1rem; text-align: left; border: 1px solid rgb(25, 5, 45);">Constante

</th><th class="align-left" style="padding: 0.6rem 1rem; text-align: left; border: 1px solid rgb(25, 5, 45);">Description

</th></tr><tr><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">`<span class="editor-theme-code">INFRASSTUDIO_DOL_VERSION</span>`

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">Version de Dolibarr lors de l'activation du module. Géré automatiquement.

</td></tr><tr style="background: rgb(250, 245, 255);"><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">`<span class="editor-theme-code">INFRASSTUDIO_MAIN_VERSION</span>`

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">Version du module. Géré automatiquement.

</td></tr><tr><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">`<span class="editor-theme-code">INFRASSTUDIO_DISABLE_CHECK_VERSION_MIN</span>`

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);"><span style="white-space: pre-wrap;">À régler sur </span>

`<span class="editor-theme-code">1</span>`

<span style="white-space: pre-wrap;"> pour contourner la vérification de version Dolibarr minimale (usage avancé).</span>

</td></tr></tbody></table>

### <span style="color: rgb(35, 111, 161);">Définir une constante</span>

##### **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);
"
```

### <span style="color: rgb(35, 111, 161);">Vérifier la configuration</span>

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.

### <span style="color: rgb(35, 111, 161);">Onglet Sites — administration centralisée</span>

<span style="white-space: pre-wrap;">L'onglet </span>**Outils → InfraS → InfraSStudio → Configuration → Sites**<span style="white-space: pre-wrap;"> est le point d'entrée canonique pour piloter chaque site Dolibarr Website pris en charge par le module. Il consolide en une seule page la liste des sites détectés, leur statut (géré / non géré), le nombre de pages et de slots qu'ils contiennent, la date de dernière édition et les actions disponibles pour chacun : configurer, voir le site public, exporter en ZIP, restaurer depuis un ZIP, nettoyer.</span>

<span style="white-space: pre-wrap;">Le tableau s'alimente à la volée à partir de </span>`<span class="editor-theme-code">llx_website</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">llx_website_page</span>`<span style="white-space: pre-wrap;"> et </span>`<span class="editor-theme-code">llx_infrasstudio_slot</span>`. Aucune configuration préalable n'est nécessaire : tout site Dolibarr Website existant apparaît automatiquement dans la liste, qu'il soit déjà géré par InfraSStudio ou non.

##### **Configurer automatiquement un site**

<span style="white-space: pre-wrap;">Pour un site qui n'est pas encore géré par le module (par exemple un site Dolibarr Website existant créé avant l'activation d'InfraSStudio), le bouton </span>**« Configurer automatiquement »**<span style="white-space: pre-wrap;"> exécute en un clic la cascade d'opérations habituellement éparpillées dans plusieurs pages d'administration :</span>

1. <span style="white-space: pre-wrap;">Détection du docroot Apache effectif en suivant la </span>**cascade de résolution en cinq niveaux**<span style="white-space: pre-wrap;"> : </span>`<span class="editor-theme-code">INFRASSTUDIO_SITE_<id>_DOCROOT</span>`<span style="white-space: pre-wrap;"> → </span>`<span class="editor-theme-code">INFRASSTUDIO_DOCROOT_PATTERN</span>`<span style="white-space: pre-wrap;"> → entrée dans </span>`<span class="editor-theme-code">/etc/apache2/sites-enabled/</span>`<span style="white-space: pre-wrap;"> → réutilisation d'un docroot voisin → repli </span>`<span class="editor-theme-code">/var/www/<ref></span>`.
2. <span style="white-space: pre-wrap;">Pose des constantes </span>`<span class="editor-theme-code">INFRASSTUDIO_WEBSITE_KEY</span>`<span style="white-space: pre-wrap;"> et </span>`<span class="editor-theme-code">INFRASSTUDIO_PUBLIC_DOCROOT</span>`.
3. <span style="white-space: pre-wrap;">Ajout du site à </span>`<span class="editor-theme-code">INFRASSTUDIO_MANAGED_SITES</span>`<span style="white-space: pre-wrap;"> pour qu'il apparaisse dans le Studio.</span>
4. <span style="white-space: pre-wrap;">Patch des </span>`<span class="editor-theme-code">pageN.tpl.php</span>`<span style="white-space: pre-wrap;"> pour invoquer le moteur de slots.</span>
5. <span style="white-space: pre-wrap;">Scan initial des tokens </span>`<span class="editor-theme-code">{{slot:...}}</span>`<span style="white-space: pre-wrap;"> présents dans le HTML et peuplement de </span>`<span class="editor-theme-code">llx_infrasstudio_slot</span>`.

L'opération est idempotente — un site déjà configuré ne sera pas écrasé, et un re-clic ne pose aucun problème. Pratique pour aligner d'un coup une instance qui contient déjà plusieurs sites Dolibarr Website.

##### **Voir mon site public**

<span style="white-space: pre-wrap;">Le bouton </span>**« Voir mon site public »**<span style="white-space: pre-wrap;"> ouvre dans un nouvel onglet l'URL publique réelle du site, telle qu'un visiteur la verrait. L'URL est résolue dynamiquement à partir du docroot configuré et du virtual host Apache associé, ce qui évite d'avoir à mémoriser ou retaper l'adresse. Le même bouton est également présent dans la barre supérieure de l'éditeur Studio pour basculer en un clic entre l'édition et le rendu live.</span>

##### **Sitemap automatique**

<span style="white-space: pre-wrap;">Chaque site géré dispose d'un fichier </span>`<span class="editor-theme-code">sitemap.xml</span>`<span style="white-space: pre-wrap;"> régénéré automatiquement à chaque modification de page. Pas de cron à configurer, pas de bouton à cliquer : la classe </span>`<span class="editor-theme-code">StudioSitemap</span>`<span style="white-space: pre-wrap;"> est appelée à la volée chaque fois qu'un slot est publié, qu'une page passe de brouillon à publié ou inversement, ou qu'une page est dupliquée ou supprimée. Le sitemap respecte les bonnes pratiques SEO : les pages en brouillon sont exclues, les pages sœurs (canon + traductions) sont regroupées avec leurs </span>`<span class="editor-theme-code"><xhtml:link rel="alternate"></span>`.

##### **Exporter un site en ZIP**

<span style="white-space: pre-wrap;">Le bouton </span>**« Exporter en ZIP »**<span style="white-space: pre-wrap;"> télécharge une archive complète des données InfraSStudio du site sélectionné, indépendamment du dump SQL global de Dolibarr. L'archive contient :</span>

- <span style="white-space: pre-wrap;">Tous les </span>**slots**<span style="white-space: pre-wrap;"> du site (canonique + overrides de locale) au format SQL idempotent.</span>
- <span style="white-space: pre-wrap;">Toutes les </span>**configurations de formulaire**<span style="white-space: pre-wrap;"> scopées au site (</span>`<span class="editor-theme-code">fk_website=<id></span>`), avec leur descripteur JSON complet.
- <span style="white-space: pre-wrap;">Les </span>**médias**<span style="white-space: pre-wrap;"> InfraSStudio rattachés au site, fichiers binaires inclus, avec leurs alts par locale.</span>
- <span style="white-space: pre-wrap;">Un </span>**manifest**<span style="white-space: pre-wrap;"> qui décrit le contenu de l'archive et la version du module qui l'a produite.</span>

Cette archive sert principalement à :

- **Cloner un site**<span style="white-space: pre-wrap;"> d'une instance Dolibarr vers une autre (recette → production, démo → client).</span>
- **Sauvegarder ponctuellement**<span style="white-space: pre-wrap;"> un état stable avant une refonte risquée.</span>
- **Archiver**<span style="white-space: pre-wrap;"> un site en fin de vie sans perdre la trace de sa configuration.</span>

##### **Restaurer un site depuis un ZIP**

<span style="white-space: pre-wrap;">Le bouton </span>**« Restaurer depuis un ZIP »**<span style="white-space: pre-wrap;"> applique un export précédemment téléchargé sur le site sélectionné. La restauration est idempotente et préserve par défaut les éditions utilisateur déjà présentes :</span>

- <span style="white-space: pre-wrap;">Les slots déjà saisis ne sont pas écrasés, sauf si l'option </span>**Forcer le remplacement**<span style="white-space: pre-wrap;"> est cochée.</span>
- <span style="white-space: pre-wrap;">Les médias dont la </span>`<span class="editor-theme-code">ref</span>`<span style="white-space: pre-wrap;"> existe déjà sont conservés, sauf en mode force.</span>
- <span style="white-space: pre-wrap;">Les configurations de formulaire en conflit (même </span>`<span class="editor-theme-code">name</span>`) sont signalées et l'admin choisit explicitement de les fusionner ou de les remplacer.

**Note — Cleanup automatique —**<span style="white-space: pre-wrap;"> Quand un site Dolibarr Website est supprimé via l'interface native (</span>**Module Site Internet → Supprimer**<span style="white-space: pre-wrap;">), un hook InfraSStudio déclenche automatiquement le nettoyage en cascade des données associées : slots, médias, configurations de formulaire scopées au site, wrappers </span>`<span class="editor-theme-code">solution-*.php</span>`<span style="white-space: pre-wrap;">, retrait de </span>`<span class="editor-theme-code">INFRASSTUDIO_MANAGED_SITES</span>`<span style="white-space: pre-wrap;">. Aucune donnée orpheline ne reste en base. Le helper </span>`<span class="editor-theme-code">infrasstudio_cleanup_after_website_delete()</span>`<span style="white-space: pre-wrap;"> est également exposé pour les scripts CLI de migration ou de réinitialisation d'instance.</span>

### <span style="color: rgb(35, 111, 161);">Récapitulatif</span>

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