¨ Un template est modèle de document, c’est-à-dire un document dont la forme est définie, mais dont une partie du contenu est variable.
¨ Pour réaliser les parties variables, on insère dans le texte du document des instructions qui permettront au moteur de template de produire le texte variable.
¨ On utilise généralement des balises telles que <% et %>, pour séparer les instructions que le moteur de template doit interpréter, du texte qu’il doit copier sans changement dans le ou les documents résultants.
EPAI, Jérôme Frossard (2016) Notion de moteur de template
2
¨ Un moteur de templates (template processor) est un programme qui combine un template (modèle) et des données pour produire un ou plusieurs documents.
Données
...
Moteur de Documents templates résultants
...
Template (patron)
¨ Quelques exemples : ASP.NET, JSP, Apache Velocity
EPAI, Jérôme Frossard (2016) PHP, un langage de template ?
3
¨ Le code PHP peut être intégré dans n’importe quel fichier de texte grâce aux balises PHP ()
¨ À l’exécution, les balises PHP sont remplacées par le texte affiché par le code.
¨ PHP peut donc être utiliser comme un langage de template et son interpréteur comme un moteur de template.
EPAI, Jérôme Frossard (2016) Exemple de template PHP
Livre d'or // inclut le fichier autoload.php qui contient // les fonctions nécessaires au chargement des // classes utilisée dans le script. require_once('../library/autoload.php');
Livre d'or
// appelle la méthode getAllMessages définie
// dans la classe MessageDAO et qui renvoie
// un tableau d’objets de type Message. Jean $dao = new \Guestbook\MessageDAO(); Merci pour toutes ces informations! $messages = $dao->getAllMessages();
?>
Cette portion de code ne Pierre produit pas de texte Super site, plein d'informations utiles.
Ce retour à la ligne est
LivreCopié dans d’or la sortie standard Grégoire Bof... Rien de bien intéressant
Les balises PHP peuvent
Livre d’or
apparaître n'importe où
getPseudo(); ?> getMessage(); ?>
Interpréteur Pour chaque message, répète la partie du PHP
template qui se trouve entre ces deux lignes (ces lignes ne produise pas de texte) EPAI, Jérôme Frossard (2016) Exemple de template JSP
Servlet <% } %> Pour chaque message, répète la partie du Container
template qui se trouve entre ces deux lignes (ces lignes ne produise pas de texte) EPAI, Jérôme Frossard (2016) Remarques
6
¨ Le jeu de caractères de PHP est l’ASCII mais en dehors des balises et dans les chaînes de caractères, n’importe quel caractère (octet) est transmis tel quel. En conséquence : ¤ l’encodage de la sortie est le même que celui du fichier source. ¤ L’encodage du fichier source est sans importance tant que le jeu de caractères est compatible avec l’ASCII.
¨ Tous les caractères (octets) se trouvant en dehors des balises PHP sont copiés dans la sortie standard, cela inclut les caractères blancs tels que : ¤ espaces, tabulations, retours de chariot (CR), fins de ligne (LF) ¤ les trois octets du BOM au début d’un fichier UTF-8
EPAI, Jérôme Frossard (2016) PHP et HTTP
7
¨ Le but d’un script côté serveur est fournir une réponse à une requête HTTP reçue par le server HTTP.
¨ Lorsque le serveur HTTP passe un script à l’interpréteur PHP, il passe donc également un certain nombre d’informations concernant la requête à traiter.
¨ Parmi ces informations, les plus utilisées sont : ¤ La méthode : $_SERVER[REQUEST_METHOD] ¤ Les paramètres de l’URL : $_GET ¤ Les données d’un formulaire : $_POST ¤ Les cookies : $_COOKIE
EPAI, Jérôme Frossard (2016) Informations pour une requête GET
¨ Le but d’un script PHP est de produire une réponse HTTP, le document (HTML ou autre) n’en est que le contenu.
¨ L’interpréteur PHP ajoute les en-têtes indispensables à la réponse, mais c’est la responsabilité du script de spécifier son statut ainsi que certains en-têtes, tels que : ¤ Cache-Control
¤ Last-Modified, Expires, ETag
¨ Pour spécifier des en-têtes, on utilise la fonction header. Cette fonction doit être appelée avant d’écrire le premier caractère dans la sortie standard.
EPAI, Jérôme Frossard (2016) Template de réponse HTTP
11
Fichier guestbook.php Status: 200 OK Content-Type: text/html header("Cache-Control: no-cache"); // inclut le fichier autoload.php qui contient
// les fonctions nécessaires au chargement des Livre d'or // classes utilisée dans le script. require_once('../library/autoload.php'); // appelle la méthode getAllMessages définie // dans la classe MessageDAO et qui renvoie
Livre d'or
// un tableau d’objets de type Message.
$dao = new \Guestbook\MessageDAO();
$messages = $dao->getAllMessages(); Jean ?> Merci pour toutes ces informations!
Pierre Super site, plein d'informations utiles. Livre d’or
Livre d’or
getPseudo(); ?> getMessage(); ?> Interpréteur
PHP
EPAI, Jérôme Frossard (2016) Séparer PHP et HTML
12
¨ Dans les exemples précédent, le code PHP et le code HTML sont mélangé dans le même fichier. Bien que cela soit du code valide, ce n’est pas une bonne pratique pour au moins trois raisons : ¤ Les code HTML sont souvent réalisés par des spécialistes du design (souvent non-programmeurs). ¤ D’une manière générale, on cherche à éviter l’utilisation de plusieurs langage dans un même fichier source. ¤ Le mécanisme d’inclusion (transculsion) permet de facilement séparer le code PHP et le code HTML.
EPAI, Jérôme Frossard (2016) Template HTML en PHP
13
¨ Un template HTML devrait avoir une extension .phtml et ne devrait contenir que du code HTML et le sous-ensemble de PHP suivant : ¤ Affichage d’une expression n ou getMembre()?> ¤ Structures de contrôle avec la syntaxe alternative n … n … n … ¨ On utilise l’instruction include pour inclure le template et exécuter les instructions PHP qu’il contient. ¨ Ces règles sont conventionnelles, PHP ne vérifie pas leur application. Une autre option est d’utiliser un moteur de template comme Smarty, Twig ou Haml au lieu de PHP.
EPAI, Jérôme Frossard (2016) Exemple de template HTML
getPseudo(); ?> Jean getMessage(); ?> Merci pour toutes ces informations!
Pierre Super site, plein d'informations utiles.
Fichier guestbook.php (code uniquement) // On peut utiliser l'inclusion de fichier, // pour séparer le code PHP du template HTML http_response_code(200); header("Content-Type: text/html"); header("Cache-Control: no-cache"); require_once('../library/autoload.php'); $dao = new \Guestbook\MessageDAO(); Interpréteur // définition de la variable $messages // utilisée dans le template PHP $messages = $dao->getAllMessages(); // inclut le fichier de tempate include('guestbook.phtml'); EPAI, Jérôme Frossard (2016)