Je comprends que le découpage est bon dans un sens, mais n'est-il pas trop gênant pour les include lorsqu'il s'agit d'appeler les pages s'y trouvant?
Non pas plus que d'appeler le MVC maintenant mon exemple est fait pour de l'objet.
Pour faire une aparté là-dessus, tu peux très bien imaginer un fonctionnement de cette manière : Contrôleur -> DAO -> Mapper -> PPO pour obtenir un objet de la base au niveau de ton contrôleur. Chaque "couche" s'occupe de son boulot : le DAO récupère les objets en base, le mapper transforme en objet PPO et le PPO te permet de manier tes données dans le contrôleur et dans la vue et pourquoi pas ailleurs (couche Service par exemple..).
Ton architecture est plus complexe mais au final, tu sais directement d'où vient le problème (s'il y en a

), où effectuer des modifications en cas d'évolution du système (changement de SGBD par exemple) et tu n'as pas des classes immenses avec des objets divins qui savent tout faire.
Disons que l'on peut stocker certains chemins classiques dans des constantes comme l'adresse du serveur, le chemin vers contrôleur, le chemin vers la classe de BDD... Mais finalement, il en restera toujours un morceau à personnaliser ^_^
Oui bien sûr qu'il en restera un morceau à personnaliser mais le but est de faciliter et d'automatiser tout ce processus. Il ne s'agit pas non plus de tout stocker dans des constantes mais d'éviter de réécrire à chaque fois le même bout d'URL ceci pour améliorer la maintenabilité de ton code.
En ce qui concerne Ajax, je vois ce que tu veux dire au niveau des appels. En gros, voici le chemin que réalise mon site pour afficher une page.
index.php --> Controleur/page1.php --> Modèle/page1.php --> Controleur/page1.php --> Vue/page1.php --> Controleur/page1.php --> index.php (Affichage)
...
Mon fichier index, lui, include automatiquement le header et le footer
Pour moi (et ça ne regarde que moi ^^), tu as un problème d'architecture ici. Comment se fait-il que l'index fasse l'affichage ?! On a pourtant dit que c'était le travail de la vue :p
index.php --> Contrôleur/page1.php --> Modèle/page1.php -->* Contrôleur/page1.php --> Vue/page1.php
Le -->* signifie qu'il n'y a pas d'appel, c'est juste la fin de l'exécution de la page1.php du modèle qui fait s'exécuter la suite du contrôleur.
index.php : sert de point d'entrée et de bootstrap. En clair, il va initialiser ta session, tes objets (si tu en utilises) que tu peux utiliser partout dans ton application (le caching, la log par exemple) ou appeler tes classes utilitaires. Il va avoir un rôle de sécurisation également. Il appelle le contrôleur dont tu as besoin.
Contrôleur : Il appelle le modèle pour effectuer les traitements que tu désires et il va appeler ta vue.
Modèle : Il va effectuer tout le code métier : appel de WebServices, relation avec la BDD, ...
Vue : Elle récupère les données du modèle qui lui sont envoyés par le contrôleur. Elle les affiche et gère leur mise en page (inclusion css, js, images... ).
Si tu as des parties génériques (ce qui est souvent le cas), tu peux aussi découper ta vue en 2 parties : un layout et un/des bloc(s).
Le layout s'occupe d'afficher les blocs génériques (bannière, menu, pied de page, etc.), d'appeler les CSS, les JS, les métas et tout le tralala d'une page web. Et il va appeler également ton bloc "dynamique" propre à ce que ton contrôleur a renvoyé.
Comme ça :
- ton index reste ton point d'entrée.
- ton contrôleur se charge d'appeler les traitements et d'appeler l'affichage. Il gère le cas d'une requête Ajax et appelle le layout ou non en conséquence.
- ton modèle gère la relation avec la base.
- ta vue est découpée en layout et blocs. Le layout représente ton interface générale, chaque bloc vient se greffer à l'endroit voulu. Dans le cas d'ajax, le bloc sera du json par exemple et le layout ne sera pas appelé.
Au final et dans le cas le plus compliqué, tu as :
index.php --> controller/page1.php --> models/page1.php -->* vues/layout.php --> vues/page1.php
Et pour une requête Ajax :
index.php --> controller/page2.php --> models/page2.php -->* vues/page2.php
Je ne pensais pas que c'était faisable, mais maintenant, je me rend compte que c'est super important, faut que je recherche quelques trucs là dessus, et si tu peux m'indiquer quelques pistes, je t'en serai très reconnaissant

J'ai trouvé ça sur un site, ça doit fonctionner :
if (array_key_exists('HTTP_X_REQUESTED_WITH', $_SERVER) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
// Traitement pour une réponse Ajax
}
J'espère avoir répondu à tes questions et désolé si je parle un peu trop d'objets (en dehors de ma dérive en haut), j'ai essayé de faire attention dans mes explications mais bon s'pas gagné
