Pages publiques génériques¶
Pages publiques séparées du CRUD admin, orientées visiteur. Forge génère contrôleurs, routes et vues via cinq commandes dédiées. Chaque génération est non destructive : les fichiers existants sont préservés.
Pages publiques — Principe général¶
Les pages publiques et le CRUD admin coexistent dans le même projet mais ne partagent ni contrôleurs, ni vues, ni routes. Le flux est serveur d'abord :
Règles :
- une page publique ne doit pas exposer un CRUD admin brut aux visiteurs ;
- le SQL reste visible et explicite dans le code généré — pas d'ORM ;
- le HTML classique est la base : HTMX peut améliorer l'expérience sans la remplacer ;
- aucune logique métier spécifique (réservation, paiement, workflow) dans le core.
Pages publiques — Commandes disponibles¶
| Commande | Rôle |
|---|---|
forge make:public-page <nom> |
Page publique simple sans entité |
forge make:public-list <Entite> |
Liste publique depuis une entité |
forge make:public-show <Entite> |
Fiche publique depuis une entité |
forge make:public-form <Entite> |
Formulaire public de saisie |
forge make:public-contact |
Page contact statique |
Toutes les commandes sont non destructives et idempotentes.
→ Voir les sections détaillées dans ### Pages publiques simples, ### Listes publiques simples, ### Fiches publiques simples, ### Formulaires publics et ### Page contact publique.
Pages publiques — Templates et layout public¶
Convention de fichiers :
mvc/views/layouts/public.html # layout visiteur
mvc/views/public/ # pages et vues publiques générées
mvc/views/components/ # composants Jinja réutilisables
Le layout public (layouts/public.html) expose les blocs title, content et
scripts. Il charge Tailwind et reste indépendant de HTMX et Alpine.js. Tous
les templates générés étendent ce layout.
Pages publiques — Compatibilité i18n¶
Les générateurs utilisent des clés i18n standards si i18n est activé. Clés
prédéfinies dans translations/fr.json :
| Clé | Valeur par défaut |
|---|---|
public.page.generated |
Page publique générée par Forge. |
public.list.empty |
Aucun élément public à afficher. |
public.show.back |
Retour |
public.show.not_found |
Élément public introuvable. |
public.form.submit |
Envoyer |
public.form.success |
Votre demande a été envoyée. |
public.contact.title |
Contact |
public.contact.intro |
Vous pouvez nous contacter... |
public.contact.coordinates |
Coordonnées |
public.contact.address |
Adresse |
public.contact.email_label |
|
public.contact.phone |
Téléphone |
Pas de traduction automatique, pas de routes traduites, pas de détection de langue imposée.
Pages publiques — Médias publics¶
Les listes et fiches publiques générées intègrent les médias déclarés dans
l'entité en lecture seule. Aucun upload, aucune suppression, aucune
réorganisation n'est possible côté public.
→ Voir ### Médias dans les pages publiques pour le comportement détaillé.
Le mécanisme de position des médias (media_order) est propre au système média
et ne dépend pas du champ order_column des relations many_to_many.
Limites actuelles¶
- Pas de CMS complet ni d'éditeur visuel ;
- pas de constructeur de page ou de thème graphique avancé ;
- pas de gestion SEO avancée (méta dynamiques, sitemap) ;
- pas de recherche publique avancée ni de filtres publics complexes ;
- pas de pagination publique générée automatiquement ;
- pas d'envoi d'email depuis les formulaires publics générés ;
- pas de captcha ni de protection anti-spam intégré ;
- pas de workflow, réservation ou paiement dans le core ;
- pas de SPA, pas de React/Vue/Svelte ;
- pas de logique métier Communes & Séjours dans le core ;
- pas de génération automatique d'un site complet sans intervention développeur ;
- pas de modification automatique des pages publiques existantes.