Ajouter un tagcloud à PluXML 5
Comme je vous l'ai précédement expliqué, PluXML 5 gère désormais le système de tags. Seulement, l'affichage de ces mots-clés sous forme d'une liste dans le sidebar devient vite problématique lorsque nous utilisons plusieurs dizaines de tags.
Pour remédier à ça, je vous propose de créer un système de tagcloud qui prends en compte la récurrence des tags avec un système de polices variables, un peu comme Dotclear ou Wordpress.
Création d'un nouvelle fonction
Nous allons éditer la classe plx.showvi core/lib/class.plx.show.phpPuis nous allons ajouter ce code à la fin du fichier (avant les éléments " } ?>") :
/** * Méthode qui affiche un nuage de tags. * * @param max nombre maxi de tags à afficher * @author PPmarcel **/ public function tagCloud($max) { $time = @date('YmdHi'); $array=array(); # On verifie qu'il y a des tags if($this->plxMotor->aTags) { # On liste les tags sans créer de doublon foreach($this->plxMotor->aTags as $tag) { if($tag['date']<=$time AND $tag['active']) { if($tags = array_map('trim', explode(',', $tag['tags']))) { foreach($tags as $tag) { if($tag!='') { if(!isset($array[$tag])) $array[$tag]=1; else $array[$tag]++; } } } } } } if(intval($max)>0) $array=array_slice($array, 0, $max); $font_max_size = 32; $font_min_size = 12; $tags_max_qty = max(array_values($array)); $tags_min_qty = min(array_values($array)); $tags_spread = $tags_max_qty - $tags_min_qty; if ($tags_spread == 0) { // Evitons la division par 0 $tags_spread = 1; } // Parametrage de l'incrementation $tags_step = ($font_max_size - $font_min_size) / ($tags_spread); foreach($array as $tagname => $nbtags) { $tags_font_size = round($font_min_size + (($nbtags - $tags_min_qty) * $tags_step)); $t = plxUtils::title2url($tagname); $tag_url = $this->plxMotor->urlRewrite('?tag/'.$t); $tag_status = $this->plxMotor->cible==$t?'active':'noactive'; $tag_name = plxUtils::strCheck($tagname); $nb_art = $nbtags; echo "<a class="$tag_status" href="$tag_url" style="font-size:${tags_font_size}px" title="$nb_art articles avec le tag $tag_name"> $tag_name </a>"; } }
Lister tous les tags en page statique
Dans votre panneau d'administration, créez une nouvelle page statique ayant ces propriétés:
Glissez ces 2 lignes dans le fichier obtenu:
<?php global $plxShow; $plxShow->tagCloud($max='300'); ?>
Intégrer le tagCloud dans le sidebar
Il vous faut éditer le fichier sidebar.php de votre thème et y ajouter ceci:
<h2>Mots clés</h2> <p><?php $plxShow->tagCloud($max='25'); ?><br><br> <center><a href="index?static3/alltags" title="Tous les tags"><em>[ Tous les tags ]</em></a></center></p>
Comme vous pouvez le deviner, la variable $max correspond au nombre de tags à afficher. Si vous devez en limiter le nombre, la troisième ligne vous donne un lien vers la page statique listant tous les tags. Editez ce lien en fonction des numéros et nom de la page statique précédement créé.
Le résultat final devrait ressembler à ça: