🏛️ 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 :

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


📑 Services aux habitants

Démarches administratives

Urbanisme

Vie quotidienne

Solidarité

Enfance et éducation


🏛️ Ma commune

La municipalité

Administration

Vie municipale

Intercommunalité


🌿 Cadre de vie

Environnement

Changement climatique

Risques naturels

Sécurité civile


🎭 Vie locale

Culture

Sports

Associations

Loisirs


📞 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 :

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 :


📝 3 - Structure des pages Markdown

Chaque page contient :

  1. quelques métadonnées spécifiques ;
  2. 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


📑 Services

Démarches administratives

Urbanisme

Vie quotidienne

Solidarité

Enfance et éducation


🏛️ Ma commune


🌿 Cadre de vie

Environnement

Adaptation climatique

Risques naturels


🎭 Vie locale


📞 Contact


✅ Avantages de cette architecture


🏗️ 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

=======