Créer ses propres gabarits de page
📐 Chapitre 22 — Créer ses propres gabarits de page
Quand votre client clique sur « + Nouvelle page » dans le Studio, il choisit un gabarit de départ. Ce chapitre vous montre comment créer vos propres gabarits adaptés à la charte de votre site.
🎯 À quoi sert un gabarit ?
Un gabarit est un squelette de page avec :
- 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 donner une page « pleine » dès la création.
- Des métadonnées (titre par défaut, slug, type container).
Quand le client crée une page depuis un gabarit, le module :
- Crée une entrée dans
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 de 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
Renvoie un tableau de configuration :
<?php
return array(
'code' => 'mon-gabarit', // identifiant unique
'label' => 'Mon Gabarit', // affiché dans le wizard
'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 |
|---|---|
| ID unique. Doit correspondre au nom du dossier. |
| Texte affiché dans la grille de sélection du wizard. |
| Pour grouper visuellement (page, landing, blog). |
| Classe FontAwesome de l'icône de la tuile. |
| Valeur écrite dans
. Standards :
,
,
,
. |
| Slug suggéré dans le formulaire. Le client peut le changer. |
🎨 Le fichier skeleton.tpl.php
C'est le squelette HTML, identique à un tpl.php de page Dolibarr Website normal, sauf qu'il contient des placeholders qui seront remplacés à la création.
Placeholders supportés
Placeholder | Substitué par |
|---|---|
| L'ID Dolibarr de la nouvelle page (ex. 42). |
| Le slug URL final (ex.
). |
| Le code ISO2 de la locale 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 include dol_buildpath('/infrasstudio/core/tpl/website_output.tpl.php', 0);. C'est lui qui déclenche la résolution des slots et shortcodes au rendu.
📂 Localiser vos gabarits hors du module
Si vous voulez 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 plus de htdocs/custom/infrasstudio/templates/.
🎁 Gabarits livrés par défaut
Code | Description |
|---|---|
| Page libre avec titre + grand richtext. Pour pages ad hoc. |
| Article de blog générique avec hero, intro, body, CTA. |
| Article de blog avec design moderne (hero CSS background, lead italique, image secondaire, related). Adaptable à votre charte. |
| Landing page produit complète (~70 slots). Hero, problème, solution, fonctionnalités, contact, FAQ. |
💡 Bonne pratique — Inspirez-vous de example-landing pour comprendre comment structurer un gabarit complexe avec ~70 slots organisés en groupes.
🎯 Bonnes pratiques pour vos gabarits
- 📦 Préfixer tous les slots du gabarit avec un identifiant commun (ex.
landing_) pour éviter les collisions entre gabarits. - 📂 Regrouper les slots avec
group=par section logique (hero, features, contact, …). - 📝 Donner des valeurs par défaut représentatives — le rédacteur a un exemple à modifier plutôt qu'une page vide intimidante.
- 🌐 Inclure les slots SEO (
page_title,page_meta_description) dans tout gabarit de type page. - 🖼️ Inclure les balises Open Graph dans le head pour le partage social.
- 🔗 Inclure le helper hreflang si le site est multilingue.
- 🧪 Tester le gabarit en créant une page réelle depuis le wizard, vérifier que le rendu public est correct.
📋 Récapitulatif
✅ Vous savez maintenant :
- 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 placeholders
@@PAGEID@@,@@PAGEURL@@,@@ISO2@@. - Localiser vos gabarits hors du module via
INFRASSTUDIO_TEMPLATE_EXTRA_DIR. - Suivre les bonnes pratiques (préfixe, groupes, valeurs par défaut, SEO, multilingue).
Dernier chapitre de la Partie IV : le catalogue produit dynamique en profondeur.