[plugin] catégories mères/filles (suite d'un précédent sujet)

13»

Réponses

  • décembre 2022 modifié

    Bonjour @ Cpalo

    L'affichage des catégories se fait par leur numéro de categories au lieu de l'organisation dan s l'admin, donc ne respecte par les sous-categories.

    heu non, les tableaux des catégories sont construit en parcourant le tableau aCats (ordre. de l'administration) .
    ou peut-être ? : Les sous catégories sont stocké dans un nouveau tableau au fur et à mesure qu'elles sont extraites
    Quand le tablezaau est reconstruit :
    les catégorie mére et orpheline sont affiché dans l'ordre.
    Si c'est une catégorie mêre, alors est injecté dans la boucle le tableau de ses filles ( si un 3eme niveau idem)

    Si plugin activé et qu'on clique sur une categorie, affiche la categorie mais ne permet pas de revenir au menu.

    Je ne comprend pas à moins que tu ai repris la version à deux niveaux et que tu n'est plus sur la dev-3-niveau , auxquel cas , seul la catégories en cours est affiché dans le menu

    Si plugin desactivé, on peut bien passer d'une catégorie à l'autre.

    apparement tu n'utilise pas la dev-3-niveau

    Dans les deux cas, les articles des catégories sont affichées mais pas de dropdown pour les masquer.

    Sans style approprier, c'est le cas

    Et le but était aussi d'avoir un drodown sur la catégorie mère.

    ?? idem

    Je cherche juste un niveau mère /fille

    Le script fonctionne qu'il y ait 3,2 ou 1 seul niveau

    et le second niveau ce sont juste les liens des articles dans une catégorie fille.

    Le plugin ne gère pas ça du tout, et comme indiqué précédemment, il est possible de modifier ce script et y insérer un $plxShow->lastArtList(); dans l'une des boucles.

    MAJ du script

            <h3>
                <?php $plxShow->lang('CATEGORIES'); ?>
            </h3>   
    
            <?php
            if (class_exists('categories')) {
            $lvl1='ul';
            $lvl2='ul';
            $lvl3='ul';
            $title='span';
            $kid='li';
            $mark= 'mark';
            $menuCat=array();
            $subCat=array();
            $subsubCat=array();
    
    
                foreach($plxShow->plxMotor->aCats as $k => $ar) {
                    // on recherche les catégories qui ne sont ni fille ni mére
                    if($ar['mother'] =='0' && $ar['daughterOf'] =='000' && $ar['active'] =='1') {
                        $menuCat[$k] =$k;   
                    }
                    // on recherche les catégories uniquement mére
                    if($ar['mother'] =='1' && $ar['active'] =='1') {
                        $menuCat[$k]=$k;
                    }
                    // on recherche les catégories qui  sont  fille et mére
                    if($ar['mother'] =='0' && $ar['daughterOf'] !='000' && $ar['active'] =='1' ) {
                        $bothCat[$ar['daughterOf']][]=array($k=>$k);
                    }
                    // on recherche les catégories qui  sont  fille 
                    if($ar['mother'] =='0' && $ar['daughterOf'] !='000' && $ar['active'] =='1' ) {
                        // fille de 3eme niveau
                        if ($plxShow->plxMotor->aCats[$ar['daughterOf']]['daughterOf'] !='000') {
                        $subsubCat[$ar['daughterOf']][]=$k;
                        }
                        else {
                        // fille de second niveau
                        $subCat[$ar['daughterOf']][]=$k;
                        }
                    }
                }
    
                if($menuCat) {// on a un premier niveau, let's go
                echo '<'.$lvl1.' class="cat-list unstyled-list plx-cat">'.PHP_EOL;
                foreach($menuCat as $order => $category ) {
                    echo '<'.$kid.'>'.PHP_EOL ;                     
                    $plxShow->catList('','<a id="#cat_id" class="#cat_status" data-mother="#cat_mother" data-daughter="#data_daughter"  a href="#cat_url" title="#cat_name">#cat_name</a> '.PHP_EOL, $category);    
                    if (array_key_exists($category,$subCat)) {
                    echo "<$mark></$mark>";
                        echo '<'.$lvl2.' class="cat-list unstyled-list">'.PHP_EOL;
                            foreach($subCat[$category] as $k => $v ){
                            echo '<'.$kid.'>'.PHP_EOL ; 
                            $plxShow->catList('','<a id="#cat_id" class="#cat_status" data-mother="#cat_mother" data-daughter="#data_daughter"  a href="#cat_url" title="#cat_name">#cat_name</a>'.PHP_EOL, $v);
                                if (array_key_exists($v,$subsubCat)) {
                                echo "<$mark></$mark>";
                                    echo '<'.$lvl3.' class="cat-list unstyled-list">';  
                                    foreach($subsubCat[$v] as $ksub => $vsub ){
                                            $plxShow->catList('','<'.$kid.'><a id="#cat_id" class="#cat_status" data-mother="#cat_mother" data-daughter="#data_daughter"  a href="#cat_url" title="#cat_name">#cat_name</a></'.$kid.'>'.PHP_EOL, $vsub);
                                    }
                                    echo "</$lvl3>".PHP_EOL;
                                }
                            echo '</'.$kid.'>'.PHP_EOL ;    
                            }
                        echo "</$lvl2>".PHP_EOL;
                        }
                    echo '</'.$kid.'>'.PHP_EOL;
                    }
                echo "</$lvl1>".PHP_EOL;
                }
    
            }
                else { // pas de plugin catégories activé on repasse en affichage natif
                ?>
                    <ul class="cat-list unstyled-list">
                    <?php
            $plxShow->catList('','<li id="#cat_id" class="#cat_status" data-mother="#cat_mother" data-daughter="#data_daughter"><a href="#cat_url" title="#cat_name">#cat_name</a> <span> (#art_nb)</span></li>'); 
            ?>
                    </ul>
                    <?php
            }
            ?>
    

    et remise du CSS pour la demo du déroulement :

                .plx-cat mark {
                  display: inline-block;
                  background: none;
                  float: left;
                  rotate: -90deg;
                  translate: -100%;
                  transition:0.25s;
                  margin-inline-end:-1em;
                }
                .plx-cat mark:before {
                  content: '\2b9f';
                }
                .plx-cat ul {
                  display: none
                }
                .plx-cat:hover  li:hover > ul {
                  display:block
                }.plx-cat:hover  li:hover > mark {
                  rotate:0deg;
                }
                ul:empty,li:empty,li>mark:first-child {
                  display: none;
                }
    

    PS Le plugin n'est actuellement pas compatible avec la version 5.8.1x en cours , une maj de dev-3-niveau est faite mais encore à mettre en ligne en devenant la branche principale et la seule version pour 5.8.10 (la compatibilité <5.8.5 n'est plus maintenu et disparaitra du code)

    Cdt


    Cordialement,
    gcyrillus

    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

  • Bonjour,
    oups! effectivement je travaillais sur deux pluxml et je n'avais pas la même version de ton plugin sur les deux!!
    Pour le site que je développe j'utilise seulement ( catégorie-mere /catégorie-fille) ; je pourrai envisager (cas d'une table des matières)
    ulterieurement ( et quand tout fonctionnera) catégorie-mere /categorie-fille-mère/catégorie-fille.
    Mon souhait était que les catégories filles ne s'affichent que lorsqu'on clique ou survole la catégorie mère (menu-dropdown) mais en regardant mieux le code, j'avais zappé qu'il n'y avait pas d'ul imbriquée comme de "vraies" listes imbriquée d'où l'utilité de ton script.
    Enfin chaque catégorie dans le menu peut afficher ou non un certain nombre de liens vers les articles concernés ( menu drodown). Ca pas de problème pour l'affichage des liens vers les articles car j'ai ce script que j'ai déjà utilisé sur plusieurs sites.

  • oki,
    à tout hasard,
    pour afficher les derniers articles seulement sur le dernier niveau existant :

            <h3>
                <?php $plxShow->lang('CATEGORIES'); ?>
            </h3>   
    
            <?php
            if (class_exists('categories')) {
            $lvl1='ul';
            $lvl2='ul';
            $lvl3='ul';
            $title='span';
            $kid='li';
            $mark= 'mark';
            $menuCat=array();
            $subCat=array();
            $subsubCat=array();
    
                foreach($plxShow->plxMotor->aCats as $k => $ar) {
                    // on recherche les catégories qui ne sont ni fille ni mére
                    if($ar['mother'] =='0' && $ar['daughterOf'] =='000' && $ar['active'] =='1') {
                        $menuCat[$k] =$k;   
                    }
                    // on recherche les catégories uniquement mére
                    if($ar['mother'] =='1' && $ar['active'] =='1') {
                        $menuCat[$k]=$k;
                    }
                    // on recherche les catégories qui  sont  fille et mére
                    if($ar['mother'] =='0' && $ar['daughterOf'] !='000' && $ar['active'] =='1' ) {
                        $bothCat[$ar['daughterOf']][]=array($k=>$k);
                    }
                    // on recherche les catégories qui  sont  fille 
                    if($ar['mother'] =='0' && $ar['daughterOf'] !='000' && $ar['active'] =='1' ) {
                        // fille de 3eme niveau
                        if ($plxShow->plxMotor->aCats[$ar['daughterOf']]['daughterOf'] !='000') {
                        $subsubCat[$ar['daughterOf']][]=$k;
                        }
                        else {
                        // fille de second niveau
                        $subCat[$ar['daughterOf']][]=$k;
                        }
                    }
                }
    
                if($menuCat) {// on a un premier niveau, let's go
                echo '<'.$lvl1.' class="cat-list unstyled-list plx-cat">'.PHP_EOL;
                foreach($menuCat as $order => $category ) {
                    echo '<'.$kid.'>'.PHP_EOL ;                     
                    $plxShow->catList('','<a id="#cat_id" class="#cat_status" data-mother="#cat_mother" data-daughter="#data_daughter"  a href="#cat_url" title="#cat_name">#cat_name</a> '.PHP_EOL, $category); 
                    if (array_key_exists($category,$subCat)) {
                    echo "<$mark></$mark>";
                        echo '<'.$lvl2.' class="cat-list unstyled-list">'.PHP_EOL;
                            foreach($subCat[$category] as $k => $v ){
                            echo '<'.$kid.'>'.PHP_EOL ; 
                            $plxShow->catList('','<a id="#cat_id" class="#cat_status" data-mother="#cat_mother" data-daughter="#data_daughter"  a href="#cat_url" title="#cat_name">#cat_name</a>'.PHP_EOL, $v);
                                if (array_key_exists($v,$subsubCat)) {
                                echo "<$mark></$mark>";
                                    echo '<'.$lvl3.' class="cat-list unstyled-list">';  
                                    foreach($subsubCat[$v] as $ksub => $vsub ){
                                            $plxShow->catList('','<'.$kid.'><a id="#cat_id" class="#cat_status" data-mother="#cat_mother" data-daughter="#data_daughter"  a href="#cat_url" title="#cat_name">#cat_name</a></'.$kid.'>'.PHP_EOL, $v );
                                    }
                                    echo "</$lvl3>".PHP_EOL;
                                }
                                else {// affichage derniers articles categorie
                                echo '<ul><li><small>'.$plxShow->getLang('LATEST_ARTICLES').'</small></li>';
                                $plxShow->lastArtList(' <li class="#art_status"><a href="#art_url" title="#art_title">#art_title</a></li>',3, intval($v));
                                echo '</ul>';
                                }
                            echo '</'.$kid.'>'.PHP_EOL ;    
                            }
                        echo "</$lvl2>".PHP_EOL;
                        }
                        else {// affichage derniers articles categorie
                                echo '<ul><li><small>'.$plxShow->getLang('LATEST_ARTICLES').'</small></li>';
                                $plxShow->lastArtList(' <li class="#art_status"><a href="#art_url" title="#art_title">#art_title</a></li>',3, intval($order));
                                echo '</ul>';                   
                        }
                    echo '</'.$kid.'>'.PHP_EOL;
                    }
                echo "</$lvl1>".PHP_EOL;
                }
            }
                else { // pas de plugin categories activé on repasse en affichage natif
                ?>
                    <ul class="cat-list unstyled-list">
                    <?php
            $plxShow->catList('','<li id="#cat_id" class="#cat_status" data-mother="#cat_mother" data-daughter="#data_daughter"><a href="#cat_url" title="#cat_name">#cat_name</a> <span> (#art_nb)</span></li>'); 
            ?>
                    </ul>
                    <?php
            }
            ?>
    


    Cordialement,
    gcyrillus

    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

  • Je viens de t'envoyer un message
    Je viens de ré-installer le plugin et je vais procéder étape par étape.
    si on clique sur une catégorie sans article...
    si on va sur une page statique (avec sidebar) ou sur les archives(avec sidebar) message d'erreur

  • décembre 2022 modifié

    Je viens de faire une MAJ du plugin et passer la dernière version en Master sur le repo github, les messages ou incohérence du script ne devrait plus se montrer.

    https://github.com/gcyrillus/plx-gc-categories

    Un thème basé sur le thème par défaut de pluxml embarque le script ainsi que les script des données structuré et quelques attribut essentiel pour l'accessibilité numérique (wai aria) https://github.com/gcyrillus/theme-sub-cat-list Ce thème fonctionne avec ou sans le plugin.


    Cordialement,
    gcyrillus

    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

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