[5.0] Affichage des mots-clés en tagcloud
PPmarcel
Member
Bonjour.
Comme certains, j'attendais la gestion des tags avec PluXML, et c'est maintenant chose faite. Mais la chose qui me conviens moins est l'affichage de ces mots-clés sous forme d'une liste dans le sidebar, qui devient vite problématique si 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.show
Dans votre panneau d'administration, créez une nouvelle page statique ayant ces propriétés:
Glissez ces 2 lignes dans le fichier obtenu:
Il vous faut éditer le fichier sidebar.php de votre thème et y ajouter ceci:
Le résultat final devrait ressembler à ça:
La mise en application est visible ici.
Edit (25/08/10) : ajout du tri par ordre alphabetique
Comme certains, j'attendais la gestion des tags avec PluXML, et c'est maintenant chose faite. Mais la chose qui me conviens moins est l'affichage de ces mots-clés sous forme d'une liste dans le sidebar, qui devient vite problématique si 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.show
vi core/lib/class.plx.show.php
Puis nous allons ajouter ce code à la fin du fichier (avant les éléments " } ?>") :
/**
* Méthode qui affiche un nuage de tags.
* (inspiré de http://www.bytemycode.com/snippets/snippet/415/ )
* @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]++;
}
}
}
}
}
}
uksort($array, create_function('$a, $b', 'return strcasecmp($a,$b);'));
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 statiqueDans 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 sidebarIl vous faut éditer le fichier sidebar.php de votre thème et y ajouter ceci:
<h2>Mots clé</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:
La mise en application est visible ici.
Edit (25/08/10) : ajout du tri par ordre alphabetique
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
il manque juste un symbole "$" dans la dernière ligne pour le $nb_art = nbtags;
il faudrait mettre $nb_art = $nbtags;
par contre, pas corrigé sur ton site semble-t-il
Consultant PluXml
Ancien responsable et développeur de PluXml (2010 à 2018)
Il ne s'agissait là que d'une solution "en attendant". L'utilisation d'une page statique pour tout le cloud fait un peu bricolage aussi
Tout d'abord la fonction tagList (à remplacer dans le fichier class.plx.show.php
le bout de css à mettre dans le fichier style.css de son thème
Donc pour afficher le nuage de tag, l'appel de la fonction tagList se fait de cette façon
Il faut mettre le 3ieme paramètre à true.
Pour personnaliser la taille des tags, il suffit de modifier les valeurs font-size dans le css
Je n'ai pas encore pousser les tests avec un jeu d'essai ayant beaucoup de tags. Si quelqu'un peut s'en charger et me faire un retour. Merci d'avance
Consultant PluXml
Ancien responsable et développeur de PluXml (2010 à 2018)
(à valider également)
Consultant PluXml
Ancien responsable et développeur de PluXml (2010 à 2018)
Est-ce que ce sera ceux qui ont le plus grand nombre d'articles associés, ou bien est-ce aléatoire? (je ne parle pas du classement alphabetique que tu as proposé sur un des forums)
(La première option serait le meilleure bien sûr).
Consultant PluXml
Ancien responsable et développeur de PluXml (2010 à 2018)
Consultant PluXml
Ancien responsable et développeur de PluXml (2010 à 2018)
sinon, pour votre interrogation, la version de Stéphane me parait plus intéressante, car un poil plus configurable. seule ombre au tableau : l'affichage non aléatoire des tags.
je vais tester ça avant les vacs jspr
En ce qui concerne le cloud, il ne marche pas chez moi. Si je mets $cloud=false, j'ai bien une liste. Si il est sur true, j'ai la même liste avec les éléments triés du moins important au plus important.
link image.
En effet pour le code de la page statique, j'ai un peu été vite dans le copier coller. tu as bien corrigé
Consultant PluXml
Ancien responsable et développeur de PluXml (2010 à 2018)
on peut y voir que les tags sont classés par ordre de "force", et non en aléatoire..
EDIT : j'ai comparé les 2 sur une installation propre, voici le screen :
on peut voir qu'il y a des bugs d'affichage sur la version de PPmarcel, mais qu'elle est plus "belle" dans son caractère aléatoire.
d'ailleurs, tu as une faute de syntaxe dans ta fonction (le dernier "echo", ne pas écrire "echo =") j'ai viré aussi el symbole ";" de trop dans cette ligne echo
En ce qui concerne mon essai, j'ai dû louper quelque chose, pour ne même pas parvenir à avoir le cloud.
juste mettre ça (même si d'un point de vue html, c'est "moche.... non strict"....) :
tiens, je pensai à un truc : Stéphane, tu avais fait un addons pour Ti_Pierre pour l'ancienne version de PXL.. avec le réel aspect d'un tag cloud, bougeant toussa...
c'est encore possible d'implémenter ce dispositif? c'était un javascript??
j'voudrais bien ... mais j'peux point ... installer ce sytème de 'tags', avec, si possible quelques effets 'visuels', en fonction du nombre de fois que le mot est cité par exemple,mais là, j'avoue, je m'y perds en (gros) peu ...
serait-il possible d'avoir un récapitulatif ?
@+
mes sites principaux : fonds d'écran gratuits - longue traîne - référencer votre site - brocante en ligne -
Consultant PluXml
Ancien responsable et développeur de PluXml (2010 à 2018)
du coup le tri par ordre alphabétique des tags ne me semble peut etre pas judicieux pour avoir quelque chose de sympa à l'écran
Consultant PluXml
Ancien responsable et développeur de PluXml (2010 à 2018)
@super_g2 : c'est un plugin jQuery qui gère ça et si mes souvenirs sont bon, il s'appel tagSphere.
t'as un tuto ici si tu veux http://bidouilleur.com/nuage-de-tags-mots-cles-3d-dynamique-en-jquery/
je testerai une fois les vacs réellement finies xD (2 semaines encore mouhahaha)
vous penserez que cette fonctionnalité sera ajouté quand dans une prochaine version ? Étant donnée que je n'aime pas trop bidouiller les CMS/Blogs/... Je préfère attendre que les fonctionnalités soit ajoutés officiellement