Taglist - Choisir quels mots clés afficher

krockroc Member
1 sept. modifié dans Entraide

Bonjour chers Pluxmleurs <3

Je me demandais si la fonction tagList était personnalisable pour n'afficher que certains mots clés ?

En effet, je souhaite pouvoir choisir précisément quels mots clés afficher sur tel ou tel page, de la même façon qu'avec catList.
Et si ce n'est pas possible, comment faire un lien vers un mot clé particulier ?

D'avance merci!

Mots clés:

Réponses

  • Bonsoir,
    Non, mais cette fonction dispose d'un hook qui permettrait de retravailler le tableau des mots clés avant affichage.

    Est ce que 'certains mots clés' ne serait que ceux de l'article en cours ? Dans ce cas les fonctions d'affichage des tag de l'article conviendrait.
    J'imagine que c'est plus subtile que ça et dans ce cas c'est un plugin qu'il faudrait avec une page configuration.


    Cordialement,
    gcyrillus , simple membre du forum et utilisateur de pluxml

    Mon site PluXml: https://re7net.com | Plugins: https://ressources.pluxopolis.net/banque-plugins/index.php?all_versions | demos sur free http://gcyrillus.free.fr/new | Thèmes: tester et télécharger @ https://pluxthemes.com
    Indiquez [RESOLU] dans le titre de votre question une fois le soucis réglè, Merci

  • krockroc Member
    2 sept. modifié

    Merci pour la réponse.
    Je cherche à afficher une liste de mots clés pour afficher les articles liés à ces mots clés.
    Comme une sorte de menu en fait. Mais je souhaite cacher certains mots clés dans cette liste, et aussi pouvoir choisir l'ordre d'affichage.

    Pour info, l'utilisation de ces mots clés se retrouve ici :
    https://krocui.com/work

    D'ailleurs, je me disais que ça serait pas mal que PluXml propose en "natif" une gestion en backoffice des mots clés, au même titre que les catégories ? Le plugin TagOptions fait le job en attendant :)

  • krockroc Member
    2 sept. modifié

    Est-ce que ça serait éventuellement possible d'avoir un exemple de hook pour triturer la fonction PlxShow->tagList ?
    Merci !

  • 2 sept. modifié

    Oui, comme tu utilises le pluginTagOptions et que celui ci a déjà ce hook en reserve, je te propose de tester en local cette exemple

    L'idée est d'avoir un tableau pour les tags choisis (ou pas) et comparé les tags extrait à ceux autorisés, si il y a quelque chose dans le tableau on compare . on saute au tag suivant si il n'est pas dans la liste. Si la liste est vide, on prend tout.

    Il faut penser à mettre cette variable dans le thème pour son fonctionnement par défaut , je lui donne comme nom $tagFilter et la laisse vide ('',0, ou false renvoient vide au test empty() )

            <ul class="tag-list">
                <?php $plxShow->tagList('<li class="tag #tag_size"><a class="#tag_status" href="#tag_url" title="#tag_name">#tag_name</a></li>', 20, $tagFilter=''); ?>
            </ul>
    
    

    Et le hook de test rempli devient

            /** 
                * Méthode plxShowTagList
                * 
                * Descrition    :
                * @author       : TheCrok
                * 
            **/
    
            public function plxShowTagList() {
                # code à executer
    
    
                echo self::BEGIN_CODE;
            ?>
            // here the code to inject into native function at hook's position
    
            // return true; // use if needed : stops native function at this point
    
            /*POC  prevoir une page de config pour chaque article et stocker les tags autorisés dans un tableau que l'on renvoi dans la variable $tagFilter
            ne pas oublier d'initialiser la variable dans le thème : < ?php $plxShow->tagList('<li class="tag #tag_size"><a class="#tag_status" href="#tag_url" title="#tag_name">#tag_name</a></li>', 20, $tagFilter=''); ? >
            exemple avec les mots clés*/
            $tagFilter = array('pluxml', 'plugins');
    
            # On verifie qu'il y a des tags
            if ($this->plxMotor->aTags) {
                $now = date('YmdHi');
                # On liste les tags sans créer de doublon
                $counters = array();
                foreach ($this->plxMotor->aTags as $idart => $tag) {
                    if (isset($this->plxMotor->activeArts[$idart]) and $tag['date'] <= $now and $tag['active']) {
                        if ($tags = array_map('trim', explode(',', $tag['tags']))) {
                            foreach ($tags as $tag) {           
                                if (!empty($tag)) {
    if(!empty($tagFilter) && !in_array(strtolower($tag), $tagFilter)) { continue;} //// Le tri se fait ici          
                                    if (!array_key_exists($tag, $counters)) {
                                        $counters[$tag] = 1;
                                    } else {
                                        $counters[$tag]++;
                                    }
                                }
                            }
                        }
                    }
                }
                # tri des tags
                switch ($order) {
                    case 'alpha':
                        # Le tri alpha se fait sur la clé
                        ksort($counters); # éventuellement uksort pour tri spécifique sur $tag
                        break;
                    case 'random':
                        $keys = array_keys($counters);
                        shuffle($keys);
                        $arr_elem = array();
                        foreach ($keys as $key) {
                            $arr_elem[$key] = $counters[$key];
                        }
                        $counters = $arr_elem;
                        break;
                    default:
                        arsort($counters);
                }
    
                # limite sur le nombre de tags à afficher
                if ($max != '') $counters = array_slice($counters, 0, intval($max), true);
    
                # Recherche de la valeur maxi pour $counters. A multiplier par 10.
                $max_value = array_reduce(
                    array_values($counters),
                    function ($lastValue, $value) {
                        return ($lastValue > $value) ? $lastValue : $value;
                    },
                    0
                );
                $max_value *= 0.1; # Pour faire varier la taille des caractères de 1 à 11;
    
                $mode = $this->plxMotor->mode;
    
                # Récupération de la liste des tags de l'article si on est en mode 'article'
                # pour mettre en évidence dans la sidebar les tags attachés à l'article
                $artTags = array();
                switch ($mode) {
                    case 'article':
                        $artTagList = $this->plxMotor->plxRecord_arts->f('tags');
                        if (!empty($artTagList)) {
                            $artTags = array_map('trim', explode(',', $artTagList));
                        }
                        break;
                    case 'home':
                        foreach ($this->plxMotor->plxRecord_arts->result as $record) {
                            foreach (array_map('trim', explode(',', $record['tags'])) as $tag) {
                                if (!in_array($tag, $artTags)) {
                                    $artTags[] = $tag;
                                }
                            }
                        }
                }
    
                # On affiche la liste
                $id = 0;
                foreach ($counters as $tag => $counter) {
                    $url = plxUtils::urlify($tag);
                    $status = 'noactive';
                    switch ($mode) {
                        case 'article':
                            if (in_array($tag, $artTags)) {
                                $status = 'active';
                            }
                            break;
                        case 'tags':
                            $status = ($this->plxMotor->cible == $url) ? 'active' : 'noactive';
                    }
                    $replaces = array(
                        '#tag_id' => 'tag-' . $id++,
                        '#tag_size' => 'tag-size-' . (1 + intval($counter / $max_value)), # taille des caractères
                        '#tag_count' => $counter,
                        '#nb_art' => $counter,
                        '#tag_item' => $url,
                        '#tag_url' => $this->plxMotor->urlRewrite('?tag/' . $url),
                        '#tag_name' => plxUtils::strCheck($tag),
                        '#tag_status' => $status
                    );
                    echo str_replace(array_keys($replaces), array_values($replaces), $format);
                }
            }
                return true; // ici on remplace la fonction native avec celle modifiée en arretant ici la fonction 
            <?php
                echo self::END_CODE;
    
    
            }
    
    
    

    Cette fonction est extraite de la 5.8.15, modifié pour la comparaison. Elle remplace entièrement la fonction native.
    L'extraction se fait en amont. puis la comparaison se fait juste après que l'on à vérifier que nous avons un tag actif, ce test est commun à toutes les versions de Pluxml

    Si cela te convient , ils manque l'essentiel, enregistrer pour chaque article les tag que l'on veut choisir. Une page de configuration ou squatter la page d’édition des articles via le hook AdminArticleSidebar.

    voilou en esperant que cel t'aide un peu en attendant d'avoir mieux


    Cordialement,
    gcyrillus , simple membre du forum et utilisateur de pluxml

    Mon site PluXml: https://re7net.com | Plugins: https://ressources.pluxopolis.net/banque-plugins/index.php?all_versions | demos sur free http://gcyrillus.free.fr/new | Thèmes: tester et télécharger @ https://pluxthemes.com
    Indiquez [RESOLU] dans le titre de votre question une fois le soucis réglè, Merci

  • Voici une maj du plugin à tester qui permet de sélectionné quels tags afficher par article https://ressources.pluxopolis.net/banque-plugins/plugins/tagOptions.1.zip
    un champ supplémentaire apparait dans la sidebar d'édition de l'article et permet de filtrer les tags à afficher par article . Si laisser vide, pas de filtrage. Penser à y inserer aussi les mots clés de l'article ...


    Cordialement,
    gcyrillus , simple membre du forum et utilisateur de pluxml

    Mon site PluXml: https://re7net.com | Plugins: https://ressources.pluxopolis.net/banque-plugins/index.php?all_versions | demos sur free http://gcyrillus.free.fr/new | Thèmes: tester et télécharger @ https://pluxthemes.com
    Indiquez [RESOLU] dans le titre de votre question une fois le soucis réglè, Merci

  • krockroc Member

    Merci beaucoup, je vais tester.

    Cependant, est-ce qu'il est possible de choisir précisément l'ordre d'affichage des mots clés dans un menu avec TagList ?
    Pour cela, il faudrait que je puisse récupérer les identifiants de chaque tag pour les appeler ensuite dans un menu j'imagine ?
    Pour préciser, je ne cherche pas à affiche la liste de tags sur une page article, mais plutôt de proposer un menu permettant de filtrer l'affichage des articles dans une page catégorie.

  • 3 sept. modifié

    Okay, je crois comprendre à peu près

    1. Tu souhaites filtrer les tags en fonction des catégories.
    2. Tu souhaites filtrer les articles par tag et en fonctions de la catégorie demandée
    3. J'ai faut sur les deux premières possibilités et il faut que tu m'explique plus en détails ;)

    Ceci étant, un article peut-être relier à plusieurs catégories et de nombreux tag. Il y a aussi un plugin pour des catégories et sous catégories qui permettrait de filtrer en fonction d'une sous catégorie.


    Cordialement,
    gcyrillus , simple membre du forum et utilisateur de pluxml

    Mon site PluXml: https://re7net.com | Plugins: https://ressources.pluxopolis.net/banque-plugins/index.php?all_versions | demos sur free http://gcyrillus.free.fr/new | Thèmes: tester et télécharger @ https://pluxthemes.com
    Indiquez [RESOLU] dans le titre de votre question une fois le soucis réglè, Merci

  • krockroc Member
    3 sept. modifié

    Alors je m'explique de façon plus claire :)
    1. J'ai plein d'articles, auxquels sont assignés des mots clés (parfois 1, parfois plus). ex : "musique, dessin, cinéma"
    2. J'ai créé, sur la page d'accueil de mon site, une liste de lien vers ces mots clés (fonction tagList)
    3. Quand je clique sur un mot clé de cette liste, je me retrouve sur une liste d'articles auxquels j'ai assigné ce mot clé. ex : je clique sur "musique", j'arrive sur la page "musique" listant tout les articles avec le mot clé "musique".

    Voici maintenant ce qui est bloquant, ou plutôt embêtant :

    • Je ne peux pas choisir l'ordre d'affichage de cette liste de lien vers les mots clés. ex: "cinéma, musique, dessin" au lieu de "musique, dessin, cinéma"
    • Je ne peux pas choisir d'afficher ou de cacher certains mots clés de cette liste de lien. ex: "cinéma, musique" (en enlevant "dessin).

    Je pense qu'il serait utile de pouvoir gérer les mots clés de la même façon que les catégories, ce qui permettrait :

    • de pouvoir exclure certains mots clés
    • d'indiquer la liste des mots clés souhaités.
    • de les modifier

    Merci beaucoup, j'espère que c'est plus clair comme ça :)
    Effectivement, le plugin de sous-catégorie pourrait venir en remplacement, mais je préfère utiliser au maximum les possibilités natives, et ces mots clés sont bien utiles :)

  • 3 sept. modifié

    Pour la liste de mots clés choisis, tu peut déjà le faire avec le plugin en remplissant une variable supplémentaire dans ta page d'accueil ou statique :

    <?php $plxShow->tagList('<li class="tag #tag_size"><a class="#tag_status" href="#tag_url" title="#tag_name">#tag_name</a></li>', 20, $tagFilter=''); ?>
    

    Il te suffit en principe de mettre dans la variable les mots-clés choisis séparés par une virgule. Pour le tri, à tester si le tri natif suffit, je ne pourrais tester que ce soir après dîner.

    Édit : variable injectée : $tagFilter , utilisable par le plugin


    Cordialement,
    gcyrillus , simple membre du forum et utilisateur de pluxml

    Mon site PluXml: https://re7net.com | Plugins: https://ressources.pluxopolis.net/banque-plugins/index.php?all_versions | demos sur free http://gcyrillus.free.fr/new | Thèmes: tester et télécharger @ https://pluxthemes.com
    Indiquez [RESOLU] dans le titre de votre question une fois le soucis réglè, Merci

  • krockroc Member
    3 sept. modifié

    Le tri natif ne suffit pas, car il ne permet que les options suivantes : random, alpha, popularité (si laisser vide)
    https://wiki.pluxml.org/docs/develop/plxshow.html#taglist

    Par ailleurs, j'ai essayé le $tagFilter, mais ça ne semble pas fonctionner.

    Merci encore pour ton aide !

  • Ah zut, je crois que j'ai zapper en cours de route la gestion de cette variable si injectée dans la fonction pour les autre mode que article. Je regarde ce soir et testerai l'ordre d'affichage.


    Cordialement,
    gcyrillus , simple membre du forum et utilisateur de pluxml

    Mon site PluXml: https://re7net.com | Plugins: https://ressources.pluxopolis.net/banque-plugins/index.php?all_versions | demos sur free http://gcyrillus.free.fr/new | Thèmes: tester et télécharger @ https://pluxthemes.com
    Indiquez [RESOLU] dans le titre de votre question une fois le soucis réglè, Merci

  • 4 sept. modifié

    voici une autre modification qui affiche la liste des tags dans l'ordre du filtre https://ressources.pluxopolis.net/banque-plugins/plugins/tagOptions-beta-2.zip
    Ajout d'un hook pour passer le filtre dans les fichiers du thème ou une page statique.
    exemple

    <?php eval($plxShow->callHook('tagOptionList', 'PluXml, tag inconnu, tag connu')) ?>
            <ul class="tag-list">
                <?php $this->tagList('<li class="tag #tag_size"><a class="#tag_status" href="#tag_url" title="#tag_name">#tag_name</a></li>', 20); ?>
            </ul>
    

    Affichera dans $plxShow->tagList() comme liste - PluXml - tag connu
    Si un tag n'est pas trouvé, il n'y a pas d''affichage, attention le filtre est sensible à la casse.

    Pour réinitialisé les filtres

    • lancer le hook sans paramètres
    • ou lancer le hook avec un autre filtre
    <?php eval($plxShow->callHook('tagOptionList')) ?>
    <?php eval($plxShow->callHook('tagOptionList','autre filtre,a appliquer')) ?>
    

    Dans une page statique, appeler le hook avec $this

    <?php eval($this->callHook('tagOptionList')) ?>
    

    A suivre


    Cordialement,
    gcyrillus , simple membre du forum et utilisateur de pluxml

    Mon site PluXml: https://re7net.com | Plugins: https://ressources.pluxopolis.net/banque-plugins/index.php?all_versions | demos sur free http://gcyrillus.free.fr/new | Thèmes: tester et télécharger @ https://pluxthemes.com
    Indiquez [RESOLU] dans le titre de votre question une fois le soucis réglè, Merci

  • krockroc Member
    4 sept. modifié

    Merci beaucoup, ça fonctionne ! Bravo ! =)
    J'ai un beau menu de tags bien rangé maintenant :)
    https://www.krocui.com/work

  • krockroc Member

    Une dernière chose : y a t-il un moyen de conserver la hiérarchie de la catégorie active à l'affichage d'une liste de mots clés ?
    Que dans mon menu, "portfolio" reste souligné quand on affiche une liste de tags liés à cette catégorie ?

  • krockroc Member

    J'imagine que je pourrais passer manuellement cette variable dans mon template de tag ?

  • 4 sept. modifié

    Une dernière chose : y a t-il un moyen de conserver la hiérarchie de la catégorie active à l'affichage d'une liste de mots clés ?
    Que dans mon menu, "portfolio" reste souligné quand on affiche une liste de tags liés à cette catégorie ?

    Coté plugin, je ne pense pas car nous sommes dans deux mode différents. mais si tu peut probablement faire quelque choses en CSS via le selecteur :has() .

    exemple

    #sidebar_in:has(#tags li a.active) #cat-9 {
    border-bottom:3px solid black;  
    }
    

    Cela ne marche que pour la categorie 009 :(


    Cordialement,
    gcyrillus , simple membre du forum et utilisateur de pluxml

    Mon site PluXml: https://re7net.com | Plugins: https://ressources.pluxopolis.net/banque-plugins/index.php?all_versions | demos sur free http://gcyrillus.free.fr/new | Thèmes: tester et télécharger @ https://pluxthemes.com
    Indiquez [RESOLU] dans le titre de votre question une fois le soucis réglè, Merci

  • krockroc Member

    Ah ben oui, tout simplement... Merci bcp encore !

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