Tout savoir pour devenir un pro de PluXml, mais pas seulement...

Recommander des articles


Rédigé par jack le 8 commentairese

PluXml ne dispose pas de fonction permettant de recommander la lecture d'articles en fonction d'un article particulier. Je vous propose de mettre en place sur la page de lecture d'un article, une liste aléatoire d'articles publiés dans les mêmes catégories que l'article en cours de visualisation (mode article).

Mise en place

Le code que nous allons utiliser pour afficher la liste des articles à recommander est prévu pour fonctionner uniquement à partir de la page article.php du thème.

Éditer le fichier article.php stocké dans le dossier de votre thème. Pour la démonstration j'utiliserai le thème par défaut de PluXml stocké dans le dossier /themes/defaut/

Avant la ligne:

<?php include(dirname(__FILE__).'/commentaires.php'); ?>
Ajoutez les lignes suivantes:

<?php
# paramétrage
$nb_arts = 7; 
$format='<li>#art_date : <a href="#art_url" title="#art_title">#art_title</a></li>';
# recherche des catégories actives de l'article en cours de lecture
$cat_ids = $plxShow->artActiveCatIds();
$cat_ids = ($cat_ids ? implode('|', $cat_ids) : '');
# recherche de tous les articles publiés dans les catégories actives de l'article en cours de lecture
$plxGlob_arts = clone $plxMotor->plxGlob_arts;
$motif = '/^[0-9]{4}.((?:[0-9]|home|,)*(?:'.str_pad($cat_ids,3,'0',STR_PAD_LEFT).')(?:[0-9]|home|,)*).[0-9]{3}.[0-9]{12}.[a-z0-9-]+.xml$/';
$aFiles = $plxGlob_arts->query($motif,'art','rsort',0,9999,'before');
if($aFiles and sizeof($aFiles)>1) {
	$arts = array();
	# recherche aléatoire des articles à recommander
	$random = array_rand($aFiles, ($nb_arts > sizeof($aFiles) ? sizeof($aFiles) : $nb_arts) );
	foreach($random as $numart) {
		# on ne liste pas l'article en cours de lecture 
		if($aFiles[$numart] <> basename($plxMotor->plxRecord_arts->f('filename'))) {
			$art = $plxMotor->parseArticle(PLX_ROOT.$plxMotor->aConf['racine_articles'].$aFiles[$numart]);
			$row = str_replace('#art_url',$plxMotor->urlRewrite('?article'.intval($art['numero']).'/'.$art['url']),$format);	
			$row = str_replace('#art_title',plxUtils::strCheck($art['title']),$row);	
			$row = str_replace('#art_date',plxDate::formatDate($art['date'],'#num_day/#num_month/#num_year(4)'),$row);	
			$author = plxUtils::getValue($plxMotor->aUsers[$art['author']]['name']);
			$row = str_replace('#art_author',plxUtils::strCheck($author),$row);
			$arts[] = $row;		
		}
	}
	# affichage des résultats
	if($arts) {
		echo '<h2>À lire également</h2>';
		echo '<ul>'.implode('', $arts).'</ul>';
	}
}
?>

Explications et paramétrage

Le nombre d'articles affichés est paramétrable grâce à la ligne suivante

<?php 
# paramétrage
$nb_arts = 7; 
Dans cet exemple, 7 articles sont choisis aléatoirement parmi les articles publiés dans les catégories de l'article en cours de visualisation. Si l'article en cours de visualisation appartient à la liste aléatoire, il ne sera pas pris en compte et retiré de l'affichage. Ne vous étonnez pas donc si vous ne voyez que 6 articles listés au lieu de 7.

L'affichage des articles se fait sous forme de liste html grâce aux lignes suivantes:

$format='<li>#art_date : <a href="#art_url" title="#art_title">#art_title</a></li>';
et

echo '<ul>'.implode('', $arts).'</ul>';
Dans le format d'affichage vous disposez des variables suivantes:
  • #art_date: date de publication de l'article
  • #art_url: url de l'article tenant compte de la réécriture d'url
  • #art_title: titre de l'article
  • #art_author: auteur de l'article
Si vous souhaitez changer le titre À lire également, localiser la ligne suivante et faite la modification que vous souhaitez:

echo '<h2>À lire également</h2>';
Voici donc un bon point de départ pour mettre en place facilement une liste d'articles à recommander. Les plus téméraires verront certainement un avantage a en faire un plugin. N'hésitez pas à venir partager vos réalisations sur le forum de PluXml

Vous pouvez voir le résultat plus bas sur cette page sous la ligne: À lire également

DClassé dans : PluXml ,Mots clés : Article, PluXml, Programmation, Tuto, Thème

A propos de l'auteur, jack:

Webmestre de PluXopolis de 2018 à Avril 2023.

8 commentaires

LolYangccool a dit : #1

Super ! Mais pourquoi dans une catégorie ou j'ai 6 articles, je n'ai que 4 propositions alors que j'ai demandé à en avoir 5.

Ne devrait-il pas y avoir 5 articles puisque le 6ème est celui en cours de visualisation ?

Merci. :)

cfdev a dit : #2

Slt,
est-il possible d'associer les vignettes à ce code? Du plugin vignette :D par exemple.

admin a dit : #3

@cfdev :
Bonjour. Je ne connais pas le fonctionnement du plugin "vignette". Je ne sais donc pas répondre.

cfdev a dit : #4

Voici la méthode pour ceux que cela intéresse:

# recupere la vignette
$vignette = plxUtils::strCheck($art['vignette']);
$medias_path = empty($plxShow->plxMotor->aConf['medias'])?$plxShow->plxMotor->aConf['images']:$plxShow->plxMotor->aConf['medias'];
$vignette_path = empty($vignette)?'':$medias_path.$vignette;
# On remplace avec le format
$row = str_replace('#art_vignette', $vignette_path, $format);

Djb a dit : #5

Bonjour à tous,

On peut maintenant ajouter la vignette d'accroche

Jerry Wham a dit : #6

Je viens d'en faire un plugin compatible avec la v 5.6
https://github.com/jerrywham/ALireEgalement

David a dit : #7

Super sympa. merci ;)

David a dit : #8

Salut.
Je voulais intégrer cette possibilité à mon blog, mais le code proposé n'affiche rien.
Sauriez-vous à quoi c'est dû ?

rFil RSS des commentaires de cet article

Les commentaires sont fermés.

Top