Le gabarit de l'article

Exercice 2 sur 7 du chapitre 6 · 150 XP · 2 objectifs vérifiés par des tests

Notions abordées : Syntaxe alternativeAccesseur

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

  1. Écrivez templates/article.php en reprenant le HTML de versHtmlComplet(), 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 lien a.retour. etiquette() étant privée, recopiez son lien : Url::vers('/rubriques/' . $article->rubrique->value) et mb_strtoupper($article->rubrique->libelle()). Chaque valeur qui vient de l'article (titre, auteur, texte) passe par htmlspecialchars(). Le texte étant privé, le neveu a ajouté à Article une méthode texte() pour le lire.
  2. Dans public/index.php, la route de l'article utilise Vue::rendre('article', ['article' => $article]). Importez la classe en haut du fichier : use Gazette\Web\Vue;. La méthode versHtmlComplet() 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().