[5.1.1] nuage de tags.

Voila ce matin j'ai testé tout les code existant pour pouvoir faire un nuage de tag tout en respectant les mises en forme et la validité Xhtml.

Merci à PPmarcel car tout vient de lui.

Il faudra édité votre fichier: core/lib/class.plx.show.php


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 statique

Dans votre panneau d'administration, créez une nouvelle page statique ayant ces propriétés:

alltags_static.png


Glissez ces 2 lignes dans la page statique obtenu en appuyant sur éditer puis voir pour verifié que les tags s'affichent correctement :
<?php global $plxShow;
$plxShow->tagCloud($max='300'); ?>
Puis dans votre sidebar (ou le footer cela dépendra de vous et de votre CSS)
<p><?php $plxShow->tagCloud($max='45'); ?></p>
	 <p><a href="VOTRE URL/?static7/alltags" title="Tous les tags">[ Tous les tags ]</a></p>
Je rappelle que ce code vient de PPmarcel a cette adresse: http://forum.pluxml.org/viewtopic.php?id=1822
juste rendu valide au normes W3C Xhtml strict 1.1

Merci PP ;);)
Solution d'attente du Tagcloud officiel ^^(message subliminal pour Stéphane :D)

Réponses

  • J'ai essayer d'enlever le caractère de séparation des tags le (( ; )) mais cela ne marche pas.
    une idée ?
  • bankai a écrit:
    J'ai essayer d'enlever le caractère de séparation des tags le (( ; )) mais cela ne marche pas.
    une idée ?
    qu'est-ce qui ne 'marche' pas, je viens de placer ta solution ici :
    http://refok.free.fr/
    tu peux tester si tu veux, ça fonctionne ;)
    et j'attendais bien après car un peu plus sympa que la liste 'verticale' qui prend un peu trop de place ;)
  • Tout fonctionne, je veux juste enlever le caractère de séparation ";" et mettre un espace à la place ;)
  • Merci Bankaï pour l'astuce. ;)

    Pour simplifier, j'ai modifié la dernière ligne comme ceci :
    <p><a href="<?php $plxShow->racine(); ?>static7/alltags" title="Tous les tags">[ + Tous les tags ]</a></p>
    
    Pour le ";", je pense que c'est un héritage de <?php $plxShow-> artTags( ); ?> ? :/
  • Pardon, je suis allé un peu vite. :P

    Bankai, tu as un ";" de trop dans ton echo. Il suffit de le supprimer et tout redevient nickel. :)

    Il faut remplacer
    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>;";
    
    par
    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>";
    
  • Kikou Bloody, oui j'avais réussis enfin à trouver ce fichu ";" ^^
    Merci de ton retour l'ami.
  • De rien, c'était le minimum que je pouvais faire pour un passionné de drôle de petites bêtes. ;)
  • Merci ^^
  • Merci
  • pleinement fonctionnel avec le passage de mon blog en 5.1.2, le nuage de tags marche a merveille :)

    Merci bankai pour l'adaptation ;)

    voila juste un retour positif sur la perso de notre CMS favori :D

    J'explore encore les nouveautés (surtout les plugins) et est il prévu d'inclure le nuage dans un futur plugin officiel ?
  • bg62bg62 Member
    ben je ne vous dit pas tous les tags que je vais devoir entrer quand je vais me décider à faire la mise à jour !!!
    mais il est vrai que c'est bien utile ;)
  • De rien, merci à son auteur plutôt, je pense que pour avoir un beau nuage de tag il faut l'intégré au Core de nos PluXml.
  • chilperikchilperik Member
    août 2011 modifié
    +1 pour l'intégration dans le core ! franchement la vue en liste par défaut .... c'est moche et peu pratique (avis perso). Avec un nuage nos sites respirent la modernité et sont attrayants pour les yeux, sans parler du gain de place !! C'est tout simple mais ca fait beaucoup je trouve :)

    edit : et oui un gros +1 pour ppmarcel l'auteur du nuage initial ;)
  • Bonjour,

    Après avoir suivi le mode opératoire de Bankai et en intégrant les modifications de Bloody, je suis enfin arrivé à faire ce fameux nuage de mots-clefs. Merci.

    Cependant, j'ai deux petits soucis à régler avant la mise en ligne :
    1 - l'affichage de la page statique "tous les tags" met à l'écran "; tagCloud($max='300'); ?>". Je n'arrive pas à voir le problème.

    2 - le clic sur l'un des tags affiche bien les articles associés. Mais après, lorsque je clique sur Accueil, le "filtre du tag reste actif et je n'arrive pas à retrouver la vraie page d'accueil du site.

    Si quelqu'un a une idée ... merci.

    A+

    Philippe.
  • Euh, pour le deuxième point, pas la peine. Ayant mis mon site en local, j'avais mal renseigné le parametre racine de parametre.xml.
    Mais le problème 1 reste actuel.
  • ClydClyd Member
    octobre 2011 modifié
    Chez moi le nuage de tags fonctionne bien avec la dernière version (5.1.3)

    En conséquence il serait superbe de ne pas avoir toujours les mêmes tags dans la sidebar, la fonction devrait prendre les tags de façon aléatoire .

    Personnellement j'affiche 20 tags dans la sidebar, mais ces tags sont toujours les mêmes , y a pas moyen de les changer via un tri (rand).

    C'est juste une idée car je n’ai pas suffisamment de connaissances en php pour le faire.

    Dans tous les cas je vous remercie pour le travail déjà effectué.
  • C'est vrai que un beau nuage de tag serait bien mieux. +1 également.
  • PPmarcelPPmarcel Member
    janvier 2012 modifié
    Merci Bankai pour cette mise à jour. ;)

    Pour ma part j'ai temporairement délaissé mes activités en 2011. J'étais même persuadé que le nuage de tags était désormais intégré à PluXML. ^_^'


    bankai a écrit:
    Solution d'attente du Tagcloud officiel ^^(message subliminal pour Stéphane :D)

    Stéphane et les contributeurs du projet ont en tout cas fais un gros effort en intégrant un système de plugin. Ce serait une bonne idée d'évolution de convertir le nuage en plugin, ce qui le rendrait plus accessible à tous les utilisateurs de PluXML.


    Je tâcherais de regarder ça de plus près d'ici quelque temps, mais si toi (Bankai) ou quelqu'un autre est motivé (et plus rapide), n'hésitez pas à vous lancer. :)
  • Hello,
    il y a une version légèrement différente sur le site du lapin bleu.
    On l'a testé avec les mots-clefs de bankaï.
    Le pb est qu'à la vue du nombre de mots-clefs il n'y avait pas assez de récurrences pour les classés en 4-5 groupes.
    L'avantage du tient est que la taille des caractères varie de 12 à 24px, donc plus de groupes = plus de variantes.
    L'idéal serait d'associer un style plutôt qu'une taille ( modif assez facile à faire d'ailleurs mais pas le temps pour le moment.)
    Cordialement,
  • Pour avoir juste le nuage de tags en page statique, il faut seulement suivre les 2 1res étapes données par bankai ?
    Soit ajouter le code de bankai à core/lib/class.plx.show.php (avec la dernière ligne modifiée par Bloody http://forum.pluxml.org/viewtopic.php?pid=19888#p19888 ) et créer la page statique avec le code donné par bankai ?
    La 3è étape sert à quoi (le code à ajouter "dans votre sidebar (ou le footer cela dépendra de vous et de votre CSS)") ?
    J'ai suivi les étapes 1 et 2 mais ça ne marche pas.... cf http://libre-ouvert.toile-libre.org/index.php?static11/alltags
    Merci d'avance
  • DanjoeDanjoe Member
    Bonjour,

    Tout d'abord merci pour ce cms génial.

    J'ai mis en place la page nuage de mots clés qui fonctionne parfaitement sur pluxml 5.1.5.

    Je n'ai fait aucune autre modification sauf celles indiquées or depuis j'ai un message d'erreur :

    Warning: Cannot modify header information - headers already sent by (output started at /(...)/core/lib/class.plx.show.php:1) in /(...)/index.php on line 67

    Je n'ai pas modifié l'index pouvez-vous m'aider à apporter la correction nécessaire ?

    Remerciements
Connectez-vous ou Inscrivez-vous pour répondre.