Bonjour à tous,
Je crée un site web avec des pages de différentes natures. Certaines sont en html uniquement et doivent pouvoir être modifiées par les administrateurs du site, d'autre contiennent des scripts php.
Pour charger les pages, je fais appel à une requête AJAX qui envoie le nom de la page à un script php. Le script php recherche la page dans une BDD. La table en question contient le nom de la page, son titre, son contenu si elle est modifiable (et donc en html simple) ou le lien vers le script php si c'est une page dynamique.
1 2 3
| TABLE pages {
nom, titre, contenu, modifiable, lien
} |
Ce que tout cela doit renvoyer à la requête ajax c'est un objet JSON comportant le titre, le contenu et si la page est modifiable, du genre:
{titre:'toto', contenu: '<p>Bonjour</p>', modifiable:true}
Pour les pages statiques tout vas bien. Pour les pages php c'est plus compliqué car le script doit être interprété afin de renvoyer le HTML généré uniquement.
J'ai donc essayé du côté de ob_start() en faisant:
1 2 3 4 5 6 7 8 9
|
ob_start();
include($connexion->attribut('lien'));
$content = ob_get_contents();
$content = str_replace("\n", "", $content);
echo "{";
echo "titre: \"".$titre."\", ";
echo "contenu: \"".addslashes($content)."\", ";
echo "modifiable: true }"; |
ce faisant, je pensais qu'il n'y aurait pas d'affichage lié au 'include' et que tout irai dans la variable. Or il se trouve que dans le résultat, le 'include' provoque l'affichage du html, une fois après "contenu: " (normal) mais aussi une fois avant "{", donc au moment de l'inclusion. J'ai découvert ob_start() aujourd'hui donc j'ai sûrement loupé un épisode, mais d'après ce que j'avais cru comprendre, le include ne devrait pas s'exprimer autre part que dans Quelle est mon erreur?
merci beaucoup
Partager