Ce tutoriel vous permettra de réaliser une prévisualisation de vos contenus en utilisant CKEditor, l’API fetch de JavaScript et du PHP natif.
Vous pouvez retrouver le code du tutoriel dans le repo GitHub.
Nous réutilisons ici le code du Routeur Simple en PHP (le tuto d’explication est disponible ici).
Le but du tuto
Nous voulons créer un moyen de visualiser en avance le rendu d’un contenu sans avoir besoin de recharger la page ou de rechanger de page.
La résultat final ressemble au Gif au dessus : une editeur de texte un peu avancé avec des styles et niveaux de titre, et lorsque nous cliquons sur prévisualiser, nous voyons le contenu mis en forme à côté.
Les routes
Le fichier routes.txt
Le contenu de notre fichier config/routes.txt :
Nous avons donc deux routes :
une route / qui ne fait rien.
une route /page-preview avec notre outil de prévisualisation
Le Routeur
Notre routeur a un peu changé par rapport à celui du tutoriel.
En effet nous allons avoir besoin de gérer les requêtes $_POST. Nous ajoutons donc la gestion des $_POST à nos appels de controllers.
Le contenu du fichier services/Router.php :
Les controllers
Comme nous pouvons le déduire de notre fichier config/routes.txt nous avons deux controllers:
HomeController qui ne fait rien d’autre qu’afficher la page d’accueil
PageController dont la méthode preview va nous afficher notre outil
HomeController
Le code de HomeController n’a pas changé depuis le tuto :
PageController
Le code du PageController controllers/PageController.php:
Comme vous pouvez le constater, PageController hérite d’une autre classe (mot clé extends) : AbstractController.
AbstractController
Le code de l’AbstractController controllers/AbstractController.php :
L’AbstractController est une sorte de modèle de controller. Il contient deux méthodes :
renderPartial qui affiche un bout précis d’un template mais sans remettre tout le layout.
render qui afiche une page complète avec <!-- DOCTYPE>, <head> et autres.
Retour à notre PageController. Il a deux rôles :
Afficher la page
Recevoir le formulaire et générer le HTML pour la visualisation
Les templates
Les templates de la page 404 et de la home sont les mêmes que ceux du tuto du Routeur.
Par contre nous en avons de nouveaux :
layout.phtml
Le contenu du fichier templates/layout.phtml :
Il charge notre style, le javascript de CKEditor et notre propre JavaScript.
page_preview.phtml
Le contenu du fichier templates/page_preview.phtml :
Nous avons d’un côté notre formulaire de saisie :
et de l’autre la zone dans laquelle nous allons prévisualiser :
_preview.phtml
Le contenu de templates/_preview.phtml qui génèrera le HTML de notre prévisualisation :
Le CSS
Ici du CSS assez simpliste, il nous sert juste à créer deux espaces côte à côte pour le formulaire et la prévisualisation.
Il nous sert également à mettre du style différent dans l’espace de prévisualisation pour bien voir la différence.
Le contenu de assets/style.css :
Nous permet de nous assurer que nous aurons assez de place pour écrire dans l’editeur.
Le JavaScript
Le contenu du fichier assets/index.js :
Commençons par le début : nous mettons notre code dans
pour nous assurer que tout le DOM est bien chargé avant de commencer à le manipuler.
Nous sert à initialiser l’éditeur de texte en le chargeant depuis nos textarea qui à l’id content.
Nous récupérons notre bouton de soumission de formulaire.
et nous écoutons chaque clic sur le bouton pour intercepter la soumission du formulaire.
Nous récupérons les valeurs des champs du formulaire et nous nous en servons pour créer un objet FormData qui nous permet d’envoyer les champs du formulaire à PHP.
Nous utilisons l’API fetch pour envoyer notre requête “POST” :
Puis nous récupérons la réponse de PHP (il nous renvoie du HTML c’est donc du texte) :
Nous injectons enfin le HTML récupéré dans notre section de prévisualisation previewContent :
N’oubliez pas de modifier la route qu’appelle fetch en fonction de la configuration de votre serveur !