La page « Le facteur l'a perdu » a son gabarit, et Madame Lou en veut un pour la page d'un article : son HTML est encore noyé dans les concaténations de versHtmlComplet(). Celui-là demande un peu plus de PHP, car la photo ne s'affiche que si l'article en a une.
Votre mission
- Écrivez
templates/article.phpen reprenant le HTML deversHtmlComplet(), classes comprises :<main class="lecture">, l'article avec sa rubrique (p.rubrique, avec son lien), son titre, sa photo (img.photo), son auteur (p.auteur, « Par … »), son texte dans<p class="texte">, puis le liena.retour.etiquette()étant privée, recopiez son lien :Url::vers('/rubriques/' . $article->rubrique->value)etmb_strtoupper($article->rubrique->libelle()). Chaque valeur qui vient de l'article (titre, auteur, texte) passe parhtmlspecialchars(). Le texte étant privé, le neveu a ajouté àArticleune méthodetexte()pour le lire. - Dans
public/index.php, la route de l'article utiliseVue::rendre('article', ['article' => $article]). Importez la classe en haut du fichier :use Gazette\Web\Vue;. La méthodeversHtmlComplet()ne sert plus : vous pouvez la supprimer.
Une condition dans un gabarit
<?php use Gazette\Web\Url; ?> <main class="lecture"> <article class="article"> <h2><?= htmlspecialchars($article->titre) ?></h2> <?php if ($article->photo !== null): ?> <img class="photo" src="<?= Url::vers('images/' . $article->photo) ?>" alt="<?= htmlspecialchars($article->titre) ?>"> <?php endif; ?> … </article> </main>
Le if s'écrit avec deux-points et se ferme par endif;, chaque morceau dans sa propre balise PHP.
Rappel
Dans un gabarit, la syntaxe alternative (if (...): … endif;, foreach (...): … endforeach;) se lit mieux que des accolades perdues au milieu du HTML.
texte() est un accesseur : une méthode publique qui donne à lire une propriété privée, sans permettre de la changer. Le gabarit l'appelle comme n'importe quelle méthode : $article->texte().