🏛️ Arborescence du site de la mairie
📁 mairie
│
├── 📁 🏠 Accueil
│ ├── 📄 accueil.md
│ ├── 📄 actualites.md
│ ├── 📄 agenda.md
│ ├── 📄 alertes.md
│ ├── 📄 informations_importantes.md
│ └── 📄 recherche.md
│
├── 📁 📑 Services
│ │
│ ├── 📁 Démarches administratives
│ │ ├── 📄 etat_civil.md
│ │ ├── 📄 carte_identite.md
│ │ ├── 📄 passeport.md
│ │ ├── 📄 elections.md
│ │ ├── 📄 recensement.md
│ │ ├── 📄 certificats.md
│ │ ├── 📄 formulaires.md
│ │ └── 📄 teleservices.md
│ │
│ ├── 📁 Urbanisme
│ │ ├── 📄 plu.md
│ │ ├── 📄 plui.md
│ │ ├── 📄 cadastre.md
│ │ ├── 📄 zonage.md
│ │ ├── 📄 permis_construire.md
│ │ ├── 📄 declaration_prealable.md
│ │ ├── 📄 certificat_urbanisme.md
│ │ ├── 📄 adressage.md
│ │ └── 📄 habitat.md
│ │
│ ├── 📁 Vie quotidienne
│ │ ├── 📄 eau.md
│ │ ├── 📄 assainissement.md
│ │ ├── 📄 dechets.md
│ │ ├── 📄 voirie.md
│ │ ├── 📄 eclairage_public.md
│ │ ├── 📄 stationnement.md
│ │ ├── 📄 transports.md
│ │ ├── 📄 mobilite.md
│ │ ├── 📄 cimetieres.md
│ │ └── 📄 sante.md
│ │
│ ├── 📁 Solidarité
│ │ ├── 📄 ccas.md
│ │ ├── 📄 seniors.md
│ │ ├── 📄 handicap.md
│ │ └── 📄 aides_sociales.md
│ │
│ └── 📁 Enfance et éducation
│ ├── 📄 petite_enfance.md
│ ├── 📄 creche.md
│ ├── 📄 ecoles.md
│ ├── 📄 cantine.md
│ ├── 📄 garderie.md
│ └── 📄 jeunesse.md
│
├── 📁 🏛️ Ma commune
│ │
│ ├── 📁 Municipalité
│ │ ├── 📄 maire.md
│ │ ├── 📄 elus.md
│ │ ├── 📄 conseil_municipal.md
│ │ └── 📄 commissions.md
│ │
│ ├── 📁 Administration
│ │ ├── 📄 services_municipaux.md
│ │ ├── 📄 organigramme.md
│ │ ├── 📄 annuaire.md
│ │ ├── 📄 horaires.md
│ │ └── 📄 contact.md
│ │
│ ├── 📁 Vie municipale
│ │ ├── 📄 deliberations.md
│ │ ├── 📄 comptes_rendus.md
│ │ ├── 📄 arretes.md
│ │ ├── 📄 budget.md
│ │ ├── 📄 finances.md
│ │ ├── 📄 marches_publics.md
│ │ └── 📄 bulletin_municipal.md
│ │
│ └── 📁 Intercommunalité
│ ├── 📄 communaute_de_communes.md
│ ├── 📄 syndicats.md
│ ├── 📄 departement.md
│ ├── 📄 region.md
│ ├── 📄 prefecture.md
│ └── 📄 france_services.md
│
├── 📁 🌿 Cadre de vie
│ │
│ ├── 📁 Environnement
│ │ ├── 📄 developpement_durable.md
│ │ ├── 📄 biodiversite.md
│ │ ├── 📄 espaces_verts.md
│ │ ├── 📄 qualite_air.md
│ │ ├── 📄 economie_eau.md
│ │ └── 📄 energies_renouvelables.md
│ │
│ ├── 📁 Adaptation climatique
│ │ ├── 📄 changement_climatique.md
│ │ ├── 📄 plan_climat.md
│ │ ├── 📄 ilots_fraicheur.md
│ │ └── 📄 adaptation.md
│ │
│ ├── 📁 Risques naturels
│ │ ├── 📄 incendies.md
│ │ ├── 📄 inondations.md
│ │ ├── 📄 secheresse.md
│ │ ├── 📄 canicule.md
│ │ ├── 📄 tempetes.md
│ │ └── 📄 mouvements_terrain.md
│ │
│ └── 📁 Sécurité civile
│ ├── 📄 pcs.md
│ ├── 📄 dicrim.md
│ ├── 📄 alertes.md
│ └── 📄 numeros_urgence.md
│
├── 📁 🎭 Vie locale
│ │
│ ├── 📁 Culture
│ │ ├── 📄 bibliotheque.md
│ │ ├── 📄 patrimoine.md
│ │ ├── 📄 expositions.md
│ │ └── 📄 spectacles.md
│ │
│ ├── 📁 Sports
│ │ ├── 📄 equipements.md
│ │ ├── 📄 clubs.md
│ │ ├── 📄 competitions.md
│ │ └── 📄 manifestations_sportives.md
│ │
│ ├── 📁 Associations
│ │ ├── 📄 annuaire.md
│ │ ├── 📄 subventions.md
│ │ └── 📄 creer_association.md
│ │
│ └── 📁 Loisirs
│ ├── 📄 agenda.md
│ ├── 📄 manifestations.md
│ ├── 📄 tourisme.md
│ ├── 📄 salles.md
│ └── 📄 fetes.md
│
└── 📁 📞 Contact
├── 📄 contact.md
├── 📄 rendez_vous.md
├── 📄 plan_acces.md
├── 📄 horaires.md
├── 📄 numeros_utiles.md
└── 📄 formulaire_contact.md
💡 Remarque
Je verrais bien un CMS qui ne limite pas la profondeur de l'arborescence.
Chaque dossier pourrait contenir :
- des sous-dossiers ;
- des pages Markdown ;
- des images ;
- des fichiers PDF, DOCX, XLSX, etc.
Ainsi, le menu serait construit automatiquement à partir de cette arborescence. Si, dans quelques années, une nouvelle compétence apparaît (par exemple « Énergie » ou « Intelligence artificielle »), il suffira d'ajouter un dossier sans modifier le fonctionnement du site.
🏛️ Arborescence simplifiée d'un site de mairie
🏠 Accueil
- Actualités
- Agenda
- Alertes
- Informations importantes
- Accès rapides
- Recherche
📑 Services aux habitants
Démarches administratives
- État civil
- Carte nationale d'identité
- Passeport
- Élections
- Recensement citoyen
- Certificats
- Formulaires
- Téléservices
Urbanisme
- PLU
- PLUi
- Cadastre
- Zonage
- Permis de construire
- Déclaration préalable
- Certificat d'urbanisme
- Adressage
- Habitat
Vie quotidienne
- Eau potable
- Assainissement
- Déchets
- Voirie
- Éclairage public
- Stationnement
- Transports
- Mobilité
- Cimetières
- Santé
Solidarité
- CCAS
- Seniors
- Handicap
- Aides sociales
Enfance et éducation
- Crèche
- Petite enfance
- Écoles
- Cantine
- Garderie
- Jeunesse
🏛️ Ma commune
La municipalité
- Le maire
- Les élus
- Conseil municipal
- Commissions
Administration
- Services municipaux
- Organigramme
- Horaires
- Annuaire
- Contact
Vie municipale
- Délibérations
- Comptes rendus
- Arrêtés
- Budget
- Finances
- Marchés publics
- Bulletin municipal
Intercommunalité
- Communauté de communes
- Syndicats
- Département
- Région
- Préfecture
- France Services
🌿 Cadre de vie
Environnement
- Développement durable
- Biodiversité
- Espaces verts
- Qualité de l'air
- Économies d'eau
- Énergies renouvelables
Changement climatique
- Adaptation
- Plan climat
- Îlots de fraîcheur
Risques naturels
- Incendies
- Inondations
- Sécheresse
- Canicule
- Tempêtes
- Mouvements de terrain
Sécurité civile
- PCS
- DICRIM
- Alertes
- Numéros d'urgence
🎭 Vie locale
Culture
- Bibliothèque
- Patrimoine
- Expositions
Sports
- Équipements sportifs
- Clubs
- Manifestations sportives
Associations
- Annuaire
- Demandes de subvention
Loisirs
- Agenda
- Fêtes
- Manifestations
- Tourisme
- Salles communales
📞 Contact
- Contacter la mairie
- Prendre rendez-vous
- Plan d'accès
- Horaires
- Numéros utiles
- Formulaire de contact
📱 Menu principal
🏠 Accueil
📑 Services aux habitants
🏛️ Ma commune
🌿 Cadre de vie
🎭 Vie locale
📞 Contact
🏛️ Architecture d'un CMS Markdown pour un site de mairie
🎯 Objectif
Créer un système simple, durable et facilement maintenable permettant de gérer un site de mairie avec :
- des pages en Markdown ;
- une organisation par dossiers ;
- des métadonnées simples ;
- une génération automatique du HTML ;
- une gestion sans base de données.
Le principe général :
La complexité est dans le moteur PHP, pas dans les pages écrites par les utilisateurs.
📁 Organisation générale du projet
site-mairie/
├── config.ini
├── arborescence.ini
├── generate.php
│
├── templates/
│ ├── page.html
│ ├── head.html
│ └── menu.html
│
├── pages/
│ ├── accueil/
│ ├── services/
│ ├── mairie/
│ ├── cadre_de_vie/
│ ├── vie_locale/
│ └── contact/
│
├── assets/
│ ├── images/
│ ├── css/
│ └── js/
│
└── cache/
⚙️ 1 - Fichier config.ini
Le fichier config.ini contient toutes les informations communes à l'ensemble du site.
Il évite de répéter les mêmes informations dans chaque page.
Exemple :
[site]
title = Mairie d'Estagel
description = Site officiel de la commune
keywords = mairie, commune, Pyrénées-Orientales
author = Michel Garnier
publisher = Commune d'Estagel
copyright = Commune d'Estagel
language = fr
country = FR
charset = utf-8
robots = index,follow
background = #f8fcff
logo = /assets/images/logo.png
favicon = /assets/favicon.ico
image = /assets/images/partage-default.jpg
twitter_card = summary_large_image
theme = mairie
template = default
css = default.css
javascript = default.js
breadcrumb = true
search = true
sitemap = true
🗂️ 2 - Fichier arborescence.ini
Ce fichier décrit l'organisation du site.
Il permet de modifier la structure sans modifier le programme PHP.
Exemple :
[Accueil]
accueil
actualites
agenda
alertes
recherche
[Services/Démarches administratives]
etat_civil
carte_identite
passeport
elections
recensement
formulaires
[Services/Urbanisme]
plu
plui
cadastre
zonage
permis_construire
declaration_prealable
[Ma commune/Municipalité]
maire
elus
conseil_municipal
commissions
[Cadre de vie/Risques naturels]
incendies
inondations
secheresse
canicule
dicrim
pcs
[Vie locale/Culture]
bibliotheque
patrimoine
expositions
[Contact]
contact
horaires
plan_acces
Le programme PHP crée automatiquement :
- les dossiers ;
- les sous-dossiers ;
- les fichiers Markdown.
📝 3 - Structure des pages Markdown
Chaque page contient :
- quelques métadonnées spécifiques ;
- le contenu Markdown.
Exemple :
<script type="text/plain" id="metadata">
title = Cadastre
description = Consultation du plan cadastral de la commune.
keywords = mairie, urbanisme, cadastre
background = #fff8ee
image = /assets/images/cadastre.jpg
icon = 🗺️
</script>
# Cadastre
Contenu de la page...
🧬 4 - Système d'héritage des métadonnées
Les informations sont récupérées dans un ordre précis :
config.ini
↓
metadata.ini du dossier
↓
metadata.ini du sous-dossier
↓
métadonnées de la page
La valeur la plus proche de la page est prioritaire.
Exemple :
config.ini
background = #f8fcff
image = default.jpg
La page :
background = #fff8ee
image = cadastre.jpg
Résultat :
background = #fff8ee
image = cadastre.jpg
Toutes les autres valeurs viennent du fichier général.
📂 5 - Métadonnées possibles
Informations principales
title
description
keywords
author
Apparence
background
icon
theme
Images
image
banner
thumbnail
logo
Référencement
robots
canonical
language
Réseaux sociaux
og_title
og_description
og_image
twitter_card
Navigation
menu
menu_order
breadcrumb
search
Publication
draft
published
visible
sitemap
🌐 6 - Génération automatique du HTML
Le moteur PHP lit :
config.ini
+
métadonnées de la page
+
contenu Markdown
Puis génère automatiquement :
<title>Cadastre - Mairie d'Estagel</title>
<meta name="description">
<meta name="keywords">
<meta name="author">
<meta name="robots">
<meta property="og:title">
<meta property="og:description">
<meta property="og:image">
<meta name="twitter:image">
📱 7 - Menu principal adapté aux smartphones
Le menu ne doit pas contenir trop de catégories.
Structure recommandée :
🏠 Accueil
📑 Services
🏛️ Ma commune
🌿 Cadre de vie
🎭 Vie locale
📞 Contact
📁 8 - Grandes catégories du site
🏠 Accueil
- Actualités
- Agenda
- Alertes
- Informations importantes
📑 Services
Démarches administratives
- État civil
- Carte d'identité
- Passeport
- Élections
- Formulaires
Urbanisme
- PLU
- PLUi
- Cadastre
- Permis de construire
- Déclarations de travaux
Vie quotidienne
- Eau
- Assainissement
- Déchets
- Voirie
- Mobilité
Solidarité
- CCAS
- Seniors
- Handicap
- Aides sociales
Enfance et éducation
- Écoles
- Cantine
- Jeunesse
🏛️ Ma commune
- Le maire
- Les élus
- Conseil municipal
- Délibérations
- Budget
- Services municipaux
- Intercommunalité
🌿 Cadre de vie
Environnement
- Biodiversité
- Eau
- Énergies renouvelables
Adaptation climatique
- Changement climatique
- Sécheresse
- Canicule
Risques naturels
- Incendies
- Inondations
- Tempêtes
- PCS
- DICRIM
🎭 Vie locale
- Culture
- Sports
- Associations
- Loisirs
- Manifestations
📞 Contact
- Horaires
- Plan d'accès
- Rendez-vous
- Formulaire de contact
✅ Avantages de cette architecture
- Simple pour les contributeurs ;
- Aucun besoin de base de données ;
- Sauvegarde facile ;
- Compatible avec un hébergement limité ;
- Pages lisibles directement ;
- Structure évolutive ;
- Génération automatique du HTML ;
- Réutilisable pour plusieurs communes.
🏗️ Philosophie générale
Le système repose sur quatre principes :
STRUCTURE
↓
Dossiers et fichiers Markdown
CONFIGURATION
↓
config.ini
CONTENU
↓
Pages écrites simplement
PRÉSENTATION
↓
PHP + templates + CSS
Cette séparation permet de créer des sites municipaux durables, simples à administrer et faciles à faire évoluer.
[site] title = Mairie d'Estagel description = Site officiel de la commune d'Estagel keywords = mairie, commune, Pyrénées-Orientales author = Michel Garnier publisher = Commune d'Estagel copyright = Commune d'Estagel language = fr country = FR charset = utf-8 background = #f8fcff logo = /assets/images/logo.png favicon = /assets/favicon.ico theme = mairie template = default layout = page css = default.css javascript = default.js
[seo] robots = index,follow canonical = generator = Markdown CMS sitemap = true
[social] og_site_name = Mairie d'Estagel og_type = website og_locale = fr_FR og_title = Mairie d'Estagel og_description = Site officiel de la commune d'Estagel og_image = /assets/images/partage-default.jpg og_image_width = 1200 og_image_height = 630 og_image_alt = Site officiel de la commune d'Estagel twitter_card = summary_large_image twitter_site = twitter_creator = twitter_title = Mairie d'Estagel twitter_description = Site officiel de la commune d'Estagel twitter_image = /assets/images/partage-default.jpg
[navigation] breadcrumb = true search = true menu = true
[publication] draft = false published = true visible = true
[system] comments = false cache = true
structure.ini
[Accueil] accueil actualites agenda alertes informations_importantes recherche
[Services/Démarches administratives] etat_civil carte_identite passeport elections recensement certificats formulaires teleservices
[Services/Urbanisme] plu plui cadastre zonage permis_construire declaration_prealable certificat_urbanisme adressage habitat
[Services/Vie quotidienne] eau assainissement dechets voirie eclairage_public stationnement transports mobilite cimetieres sante
[Services/Solidarité] ccas seniors handicap aides_sociales
[Services/Enfance et éducation] petite_enfance creche ecoles cantine garderie jeunesse
[Ma commune/Municipalité] maire elus conseil_municipal commissions
[Ma commune/Administration] services_municipaux organigramme annuaire horaires contact
[Ma commune/Vie municipale] deliberations comptes_rendus arretes budget finances marches_publics bulletin_municipal
[Ma commune/Intercommunalité] communaute_de_communes syndicats departement region prefecture france_services
[Cadre de vie/Environnement] developpement_durable biodiversite espaces_verts qualite_air economie_eau energies_renouvelables
[Cadre de vie/Adaptation climatique] changement_climatique plan_climat ilots_fraicheur adaptation
[Cadre de vie/Risques naturels] incendies inondations secheresse canicule tempetes mouvements_terrain
[Cadre de vie/Sécurité civile] pcs dicrim alertes numeros_urgence
[Vie locale/Culture] bibliotheque patrimoine expositions spectacles
[Vie locale/Sports] equipements_sportifs clubs competitions manifestations_sportives
[Vie locale/Associations] annuaire_associations subventions creer_association
[Vie locale/Loisirs] agenda_loisirs manifestations tourisme salles fetes
[Contact] contact rendez_vous plan_acces horaires numeros_utiles formulaire_contact
=======