En respectant le paradigme MVC, on utilise 3 fichiers pour ajouter cette
fonctionnalité sur toutes les pages de contenu du site.
Le Modèle :
Définition de 2 fonctions :
fetchCat($p1,$p2) pour récupérer la catégorie de la page courante
fetchRelatedPosts($p1,$p2,$p3) pour récupérer l'intégralité de 3 posts sous la forme de
tableaux associatifs
l'instruction SQL ORDER BY RAND() permet de randomiser le choix des posts
l'instruction SQL LIMIT 3 permet d'afficher 3 posts maximum
require "config/database.php";
function fetchCat( $db,$page ) {
$get = $db->prepare("SELECT categorie FROM pages
WHERE canon_tag = '$page'");
$get->execute();
$cat = $get->fetch(PDO::FETCH_COLUMN);
return $cat;
}
function fetchRelatedPosts($db,$cat,$page) {
$get = $db->prepare("SELECT * FROM posts
WHERE categorie = '$cat'
AND canon_tag != '$page'
ORDER BY RAND()
LIMIT 3");
$get->execute();
$threePosts = $get->fetchAll(PDO::FETCH_ASSOC);
return $threePosts;
}
Le Contrôleur :
Traitement des variables qui seront utilisées dans la vue : $categorie & $threePosts
require "model/RelatedPostsModel.php";
$categorie = fetchCat($db,$_GET['page']);
$threePosts = fetchRelatedPosts($db,$categorie,$_GET['page']);
require "views/include/relatedPosts.php";
La Vue :
Affichage de la catégorie courante dans le titre
Lecture de chaque tableaux associatif à l'aide d'une boucle foreach
<h2 class='red border center padtop padbottom'>Sur le thème
<mark class="title">
<?= $categorie ?>
</mark> voir aussi :</h2>
<div class="related border">
<?php foreach ($threePosts as $line) : ?>
<article>
<figure class="fixed_height">
<img src="public/img/logos/<?= $line['img'] ?>" class="bitmap" alt="<?= $line['alt'] ?>">
</figure>
<div class="top_dashed">
<h3 class="overflow_ellipsis">
<?= $line['title_h2'] ?>
</h3>
<div class="padtop">
<!-- show / hide button -->
<?php
Certains posts n'ont pas de bouton, cette condition permet de gérer leur affichage :
if ($line['btn_lien']) {
echo "<a href ='$line[btn_lien]' class='more' title='$line[btn_texte]'>$line[btn_texte]</a>";
}
Fin de la boucle foreach :
?>
</div>
</div>
</article>
<?php endforeach; ?>
</div>
En bas de la page vous pouvez voir le résultat de ce code :