portfolio

{ Related Posts }

Related Posts
related posts

Projet : related posts

PHP | mySQL

Projet personnel :

Une fonctionnalité inspirée par les plugins Wordpress "related posts".

  • Objectif : afficher 3 liens aléatoires pointant vers des sujets de même catégorie
  • Sélection aléatoire des sujets gérée par une requète sql
2020
avr
#code

Réalisation :

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>
	

Ci-dessous le résultat de ce code :

Sur le thème code voir aussi :