Présentation

Cette idée qui me trotte dans la tête vient donc de voir le jour : il est désormais possible d'afficher une liste de billets connexes à un billet source. Super ! Oui en effet. Le principe est simple : on récupère les mots-clés du billet source et on les compare à ceux de la base de données à la recherche d'autres billets. Facile, sympa, sexy.


C'est la classe

Oui on peut le dire, c'est de la POO. Mais là n'est pas la question. Point suivant.


En pratique

Le plugin est utilisable dans le fichier post de votre template, mais aussi dans la sidebar ou dans les pages utilisant le plugin Related.

Voici trois exemples d'utilisation de la classe :

geshi php
<?php
/**
pertinence de 2 mots-clés, pas de limite, id auto et clé de tri définie
*/
$bc = new dcBilletsConnexes(2,0,0,'´post_dt´ ASC');
/**
tous les paramètres par défaut
*/
$bc->show();
?>

<?php
/**
pertinence de 1 mot-clé, 5 résultats maximum, id auto et classement par
		défaut
*/
$bc = new dcBilletsConnexes(1,5);
/**
personnalisation du bloc et du titre, formatage par défaut des éléments
		de la liste
et séparation des mots-clés avec '/'
*/
$bc->show('<div>%1$s<ul>%2$s</ul></div>',
	'<h3>Billet(s) connexe(s)</h3>','*',', ');
?>

<?php
/**
pertinence de 3 mots-clés, pas de limite de résultat, id du billet source
		spécifié,
classement par défaut
*/
$bc = new dcBilletsConnexes(3,0,53);
/**
bloc et titre par défaut, formatage personnalisé des éléments de la
		liste
et séparation des mots-clés par défaut
*/
$bc->show('*','*','<li><a href="%2$s"
		title="Mot(s)-clé(s) : %3$s">%1$s</a></li>');
?>


Explication

Instanciation

Lors de l'instanciation de la classe, il est possible de définir 4 paramètres :

  • niveau : nombre qui définit le nombre de mots-clés minimum à avoir en commun avec le billet source
  • limite : nombre de résultats maximum à afficher, utile si vous avez 7000 billets connexes
  • id : le système est malin, il récupère l'id du billet source tout seul, mais il est aussi possible de lui donner
  • ordre : clé de tri des résultats (pour classer les billets par date, par nom et toutes ces choses)

Ces paramètres sont tous optionnels et gardent alors leurs valeurs par défaut qui sont respectivement :

  • 1 (un seul mot-clé à avoir en commun, augmenter pour affiner les résultats)
  • 0 (mettre zéro pour aucune limite, sinon mettre ce que bon vous semble)
  • 0 (par défaut, à zéro donc, l'id est récupéré de façon automatique)
  • '`post_dt` DESC' (le classement par défaut est par date, du plus récent ou plus vieux)

Affichage des résultats

La méthode show accepte elle-aussi 4 paramètres :

  • bloc : chaîne de formatage du bloc à afficher sur le blog
  • titre : titre du bloc (avec gestion intelligente du pluriel)
  • item : chaîne de formatage des éléments de la liste
  • séparateur : définit le séparateur des tags pour l'affichage

Ces paramètres sont aussi tous optionnels, vous pouvez voir les valeurs par défaut dans l'exemple vu plus haut.

La chaîne bloc reçoit deux valeurs : le titre du bloc et les éléments de la liste :

geshi html4strict
<div
		class="billets-connexes">%1$s<ul>%2$s</ul></div
		>

La chaîne des éléments de la liste reçoit quant à elle le titre du billet, son url et les mots-clés récupérés :

geshi html4strict
<li><a href="%2$s" title="Mot(s)-clé(s) :
		%3$s">%1$s</a></li>


Gestion des pluriels

Le titre du bloc et la balise title des liens dans les résultats gèrent leur pluriel de façon intelligente. En effet, si vous utilisez "Billet(s) Connexe(s)" ou 'Mot(s)-clé(s)", la classe affichera automatiquement le sigulier ou le pluriel suivant le nombre de résultats. Stupéfiant !

Pour les pluriels complexes, ça marche aussi :

"Voici (une|des) beau(x) soulier(s) pour l'oncle Henri !"


Personnalisation

Si l'envie vous prend de vouloir récupérer les résultats sans affichage, la méthode getinfo est là pour vous.

Ainsi, avec le code suivant :

geshi php
<?php
$bc = new dcBilletsConnexes(2);
$billets = $bc->getinfo();
?>

On récupère les données sous la forme d'un tableau associatif et on peut alors traiter les infos comme on veut.

L'id des billets est utilisé comme index, le titre, l'url et les tags sont donc utilisables comme ceci :

geshi php
<?php
/**
suite du code vu juste avant donc
*/
foreach ($billets as $id => $billet)
{
echo '<p><a href="'.$billet['url'].'"
		title="'.$billet['tags'].'">'.$billet['titre'].'</a><
		/p>';
}
?>


Installation

  • Pour l'installateur et l'archive, direction le grenier :note: