MyAllArchive avec PluXml 5.8.7 ?

PeyoPeyo Member

Bonjour,
Après sauvegardes et mise à jour vers 5.8.7, j'ai chargé le plugin MyAllArchive dans le répertoire Plugins par Ftp ; dans la page de gestion des plugins, il n'apparaît pas.
Par Ftp, je vois que le nom du répertoire est PixMyAllArchive-master :

  • y a t il une activation à effectuer quelque part, comment ?
  • y a t il compatibilité du plugin avec la version actuelle de PluX ?
  • sinon, peut-on avoir une liste par année des articles sans passer par ce plugin ?
    Merci, Pierre
    https://www.ecodiv.fr
Mots clés:

Réponses

  • Bonjour,

    pour l'installation d'un plugin, tu peut regarder ici : https://forum.pluxml.org/discussion/7059/installation-dun-plug-in

    Cependant, c'est un vieux plugin et PluXml à depuis un moment un mode archive. Si tu utilise un vieux thème, il est possible que la partie du théme par défaut qui affiche les archives :


    <h3> <?php $plxShow->lang('ARCHIVES'); ?> </h3> <ul class="arch-list unstyled-list"> <?php $plxShow->archList('<li id="#archives_id"><a class="#archives_status" href="#archives_url" title="#archives_name">#archives_name</a> (#archives_nbart)</li>'); ?> </ul>

    soit passer inaperçu à tes yeux ;)

    Cdt

    ♣♣♣♣ <°(((((-{ ~ Mon site avec PluXml: https://re7net.com | Mes plugins pour PluXml : https://github.com/gcyrillus }-))))°> ♣♣♣♣

  • PeyoPeyo Member

    Merci gcyrillus pour ta réponse rapide,
    j'ai d'abord renommé (en retirant -master) le dossier que j'avais déjà chargé : il n'est pas apparu et les trois autres plugins ont notifié en rouge "plugin non configuré". J'ai retiré par ftp le dossier modifié (anciennement PixMyAllArchive-master) sans pour autant rétablir la configuration des trois autres ( KzGallery, PixEditor et MySearch).
    Si je veux enregistrer à nouveau la configuration des trois plugins, une notification en rouge apparaît "erreur d'enregistrement..."
    J'y retourne :)

  • PeyoPeyo Member

    Après avoir rechargé la sauvegarde d'hier, puis appliqué le conseil en lien plus haut, (retiré "-master" du nom du répertoire du plugin), tout fonctionne positivement.
    S'il avait été possible d'avoir un menu par année pour les archives, plutôt que global, ça aurait été "encore mieux" mais c'est très utile de pouvoir consulter les archives ainsi.
    Problème réglé, Merci du conseil !

  • cpalocpalo Member

    Qu'entends-tu par un menu par année?
    Que pour chaque année il y ait les 12 mois?

  • PeyoPeyo Member

    Bonjour cpalo,
    pouvoir consulter les archives en sélectionnant une année, un peu comme sur l'encart bleu en lien :
    https://www.ecodiv.fr/data/medias/archives-annualisees-ecodiv.jpg
    Actuellement, c'est la liste complète des archives qui s'ouvre à partir de l'onglet du menu, c'est un peu indigeste.
    En utilisant la Recherche, avec 2020 en critère, il n'y a pas tous les articles de 2020, alors que sur la liste de l'onglet Archives, on peut accéder à toutes les publications de 2020.

  • cpalocpalo Member

    Bonjour,
    Je ne comprends pas trop.
    Je n'ai aucune difficulté. Par exemple si dans la sidebar bloc archives je clique sur l'année 2020, ce sont uniquement les archives de l'année 2020 qui apparaitront avec un style comme l'accueil blog.
    Et le plugin plxMyAllArchives te permet d'avoir une option pour créer dans le menu un lien vers une page archives qui te présente une liste de liens vers toutes les archives, un peu plus agréable à lire que celle de la sidebar.
    Perso moi je la trie par catégories et ensuite par dates.

  • PeyoPeyo Member
    24 févr. modifié

    Je suis très peu familier de la manière d'organiser la navigation avec PluXml, je suis désolé. Je suis malheureusement habitué à l'usage de "widget" et au outils de personnalisation bien différents, mais je vais chercher. Peut-être plus de détails en fouillant la doc..
    Ce que je crois comprendre, c'est que l'organisation de la colonne sidebar se fait directement dans le fichier du thème ? Il me faudrait donc éditer le fichier sidebar, y ajouter un appel pour Archives (ou y copier le contenu du fichier archives ?) pour disposer dans la colonne, de l'accès aux archives.
    Je vais voir le paramètrage du plugin, mais j'avais déjà placé la page d'archive dans le menu : c'est cette page que je trouve un peu chargée ; comme je dois y rajouter une quarantaine d'article de 2021 et une quarantaine de 2019, il y aura près de 200 articles en liens.
    Actuellement, si je vais sur "animations", j'ai les 69 articles les uns à la suite des autres, c'est pas terrible. Ton option de rajouter le critère de dates permettrait d'affiner recherche et présentation.
    J'y retourne :)
    [edit] Ok, j'ai modifié le critère sur le plugin, c'est un peu mieux (catégories, puis dates descendantes) Merci

  • cpalocpalo Member
    24 févr. modifié

    Exactement, il faut éditer le fichier sidebar.php. Et tu peux très bien créer plusieurs sidebars differentes.
    Par exemple sidebar-categories.php qui ne s'affichera que lorsque le template categorie.php sera appelé et qui pourra être completement différente de celle qui apparaît habituellement..
    Ainsi dans home.php tu peux modifier la ligne suivante

    <!-- <?php include __DIR__.'/sidebar.php'; ?> -->
    <?php include __DIR__.'/sidebar-categorie.php'; ?>
    

    Après c'est aussi une histoire de présentation avec le Css ( balises details/summary ou menus déroulant)

  • bazooka07bazooka07 Moderator

    @Peyo,
    Pour afficher les archives classées par catégorie, nul besoin de plugin.
    Crée une page statique et colle le code suivant :

    <ul id="tabs">
    <?php
    # Dans ce contexte, $this représente $plxShow
    
    $cats = array_filter(
        $this->plxMotor->aCats,
        function ($v) {
            # voir plxShow::catList()
            return (in_array($v['menu'], array('oui', 1)) && $v['active'] && $v['articles'] > 0);
        }
    );
    
    foreach($cats as $catId=>$catInfos) {
    ?>
       <li><label for="id_cat_<?= $catId ?>"><?= $catInfos['name'] ?></label></li>
    <?php
    }
    ?>
    </ul>
    <div id="tab-contents">
    <?php
        $this->plxMotor->bypage = 9999;
        $this->tri = 'rsort';
        foreach(array_keys($cats) as $catId) {
    ?>
           <input id="id_cat_<?= $catId ?>" type="radio" name="categories" class="toggle" />
           <ul>
    <?php
            $this->plxMotor->motif = '#^\d{4}\.(?:home,|\d{3},)*' . $catId . '(?:,\d{3}|,home)*\.\d{3}.\d{12}\..*\.xml$#';
            $this->plxMotor->getArticles();
            while ($this->plxMotor->plxRecord_arts->loop()) {
    ?>
               <li><?php $this->artDate('#num_day/#num_month/#num_year(4)'); ?> : <?php $this->artTitle('link') ?></li>
    <?php
            }
    ?>
           </ul>
        </li>
    <?php
    }
    ?>
    </div>
    <style type="text/css">
    #tabs {
        list-style: none;
        padding: 0;
        display: flex;
        gap: 1rem;
    }
    
    #tab-contents .toggle,
    #tab-contents .toggle:not(:checked) + ul { display: none; }
    
    #tabs {
        white-space: nowrap;
        overflow-x: auto;
        padding-bottom: 0.5rem;
    }
    #tabs label {
        padding: 0 0.25rem;
        border-radius: 0.25rem;
        background-color: #f8f8f8;
    }
    
    #tabs .active {
        background-color: #258fd6;
        color: #fff;
    }
    
    #tab-contents ul {
        padding-left: 2rem;
    }
    </style>
    <script>
        (function() {
            'use strict';
            const active = 'active';
            const container = document.getElementById('tab-contents');
            if (container) {
                const tabs =  document.getElementById('tabs');
                container.addEventListener('change', function(ev) {
                    Array.from(tabs.querySelectorAll('.' + active)).forEach(function(node) {
                        node.classList.remove(active);
                    });
                    event.target.labels[0].classList.add(active);
                    console.log('click');
                });
    
                const radioFirst = container.querySelector('input[type="radio"]');
                if (radioFirst) {
                    radioFirst.click();
                    radioFirst.labels[0].classList.add(active);
                }
            }
        })();
    </script>
    

    Attention, il y a un bug dans PluXml pour sauvegarder une page statique. Il faut doubler les caractères "\" comme ceci :

    $this->plxMotor->motif = '#^\\d{4}\\.(?:home,|\\d{3},)*' . $catId . '(?:,\\d{3}|,home)*\\.\\d{3}.\\d{12}\\..*\\.xml$#';
    

    Mais le plus simple pour contourner ce bug, c'est de créer une page statique. Ouvrir le page statique avec l'éditeur de ton logiciel FTP et coller le code ci-dessus.

  • @Peyo Tu as éventuellement ce plugin qui t'aidera à minimiser ce bug . https://github.com/gcyrillus/PLX-cssBackSlash Il ajoute un caractère d’échappement aux caractères ..\ d’échappement trouvés dans un fichier en édition au moment de son chargement . Il ne te dispense pas de les échappés manuellement lorsque tu en insere toi même, à la première édition/création, mais tu n'auras plus a t'en soucier une fois sauvegarder. Je l'avais au départ mis sur les feuilles de styles éditer dans l'admin jusqu'à ce que je m'aperçoive que cela était aussi utile pour l'édition des articles et pages statiques.
    Cdt

    ♣♣♣♣ <°(((((-{ ~ Mon site avec PluXml: https://re7net.com | Mes plugins pour PluXml : https://github.com/gcyrillus }-))))°> ♣♣♣♣

  • PeyoPeyo Member

    Merci de votre aide à tous deux,
    je reviendrai sous peu pour compléter le site Ecodiv, j'y appliquerai sans doute cette méthode d'organisation d'archives.
    Peyo

  • cpalocpalo Member
    24 févr. modifié

    Pour afficher une catégorie ou les catégories dans le menu, ou dans la sidebar.
    Je viens de mettre une demo http://creer-son-theme.plugeek.fr/
    Utilisation des plugins plxMySubCategories et plxMyAllArchive

    <li class="submenus"><a href="#"><?php $plxShow->lang('CATEGORIES') ?> ▼</a>
        <ul>
            <?php $plxShow->catList('','<li id="#cat_id"><a class="#cat_status" href="#cat_url" title="#cat_name">#cat_name</a> (#art_nb)</li>'); ?>
        </ul>
    </li>
    
    <?php
        $idCat = '002';
        if(isset($plxMotor->aCats[$idCat])) {
            if($plxMotor->aCats[$idCat]['menu']=='oui' AND $plxMotor->aCats[$idCat]['active']) {
                $id = 'cat-'.intval($idCat);
                $url = $plxMotor->urlRewrite('?categorie'.intval($idCat).'/'.$plxMotor->aCats[$idCat]['url']);
                $name = plxUtils::strCheck($plxMotor->aCats[$idCat]['name']);
               $active = ($plxShow->catId()==intval($idCat)?'active':'noactive');
               echo '<li><a title="'.$name.'" href="'.$url.'">'.$name.'</a></li>';
          }
        }
    ?> 
    
  • cpalocpalo Member

    Bonjour
    @bazooka07
    J'obtiens ce message d'erreur :

    Fatal error: Uncaught Error: Using $this when not in object context in F:\htdocs\testing-PluXml\themes\myPluTheme-grid-12col\static-category.php:13 Stack trace: #0 F:\htdocs\testing-PluXml\index.php(63): include() #1 {main} thrown in F:\htdocs\testing-PluXml\themes\myPluTheme-grid-12col\static-category.php on line 13
    

    la ligne 13:

    $this->plxMotor->aCats,
    
  • bazooka07bazooka07 Moderator

    Normal !
    Tu mets le code dans ton thème. Dans ce cas, il faut remplacer $this par $plxShow.

    Le code que j'ai donné est pour le contenu de la page statique. Il faut se connecter à PluXml, éditer ou créer une page statique et copiez-collez le code que j'ai donné.
    On peut le faire avec l'éditeur html ou avec le plugin kzCodemirror pour une meilleure expérience utilisateur ( coloration syntaxique, fermeture auto des balises, ..).

    Avec l'édition de la page statique, on injecte du code PHP dans PluXml avec un "require" (voir plxShow::staticContent()).

  • cpalocpalo Member

    @bazooka07
    J'ai refait comme tu disais et en prenant le template par défaut static.php.
    Et j'ai collé ton code via kzCodeMirror
    Maintenant #tabs s'affiche correctement mais pas #tabs-content

    <div id="tab-contents">
        <input id="id_cat_002" type="radio" name="categories" class="toggle" />
        <ul>
    <b>Fatal error</b>:  Uncaught Error: Call to a member function loop() on bool in F:\htdocs\testing-PluXml\data\statiques\012.test-category.php:33
    Stack trace:
    
  • bazooka07bazooka07 Moderator

    Hélas, c'est dû à un bug de PluXml à cause de la fonction plxUtils::unslash(), utilisé dans le fichier core/admin/prepend.php, qui supprime tous les caractères "\" seuls.
    Pour y pallier la première solution est de doubler ces caractères comme ceci "\". Sauf qu'il faudra le faire à chaque fois qu'on enregistre la page statique. Bof !!!
    Il vaut mieux utiliser une alternative plus fiable mais assez sophistiqué pour calculer la nouvelle valeur de $this->plxMotor->motif.
    La première tentation est de remplacer "\d" par "[0-9]". C'est équivalent mais un poil plus long à évaluer.
    On peut remplacer "\." par "chr(92) . '.'". 92 est le code Ascii de "\".
    D'où l'idée de remplacer "\d{3}" par une fonction digits :

        function digits($n) { return chr(92) . 'd{' . $n . '}'; }
    

    avec $n=3.
    On se retrouve maintenant à calculer $this->plxMotor->motif par la concaténation de 17 chaines de caractères. Ouf, ouf, ouf !!!
    Parmi les 17 chaînes, il n'y qu'une chaîne qui varie dans chaque tour de boucle : l'id de la catégorie. Donc on va évalue les 16 autres en dehors de la boucle pour faire 2 sous-chaines et assembler tout cela avec implode en utilisant l'id comme glue.
    Au final on arrive au code ci-dessous pour hacker PluXml :

    <ul id="tabs">
    <?php
    # Dans ce contexte, $this représente $plxShow
    
    $cats = array_filter(
        $this->plxMotor->aCats,
        function ($v) {
            # voir plxShow::catList()
            return (in_array($v['menu'], array('oui', 1)) && $v['active'] && $v['articles'] > 0);
        }
    );
    
    foreach($cats as $catId=>$catInfos) {
    ?>
       <li><label for="id_cat_<?= $catId ?>"><?= $catInfos['name'] ?></label></li>
    <?php
    }
    ?>
    </ul>
    <div id="tab-contents">
    <?php
        $motifSave = $this->plxMotor->motif;
        $this->plxMotor->bypage = 9999;
        $this->tri = 'rsort';
    
        // Hack against PluXml
        $dot = chr(92) . '.';
        function digits($n) {
            return chr(92) . 'd{' . $n . '}';
        }
        $parts = array(
            '#^' . digits(4) . $dot . '(?:home,|' . digits(3) . ',)*',
            '(?:,' . digits(3) . '|,home)*' . $dot . digits(3) . $dot . digits(12) . $dot . '.*' . $dot . 'xml$#',
        );
    
        foreach(array_keys($cats) as $catId) {
    ?>
           <input id="id_cat_<?= $catId ?>" type="radio" name="categories" class="toggle" />
           <ul>
    <?php
            $this->plxMotor->motif = implode($catId, $parts);
            echo '<!-- $motif = \'' . $this->plxMotor->motif . '\'; -->' . PHP_EOL;
            $this->plxMotor->getArticles();
            while ($this->plxMotor->plxRecord_arts->loop()) {
    ?>
               <li><?php $this->artDate('#num_day/#num_month/#num_year(4)'); ?> : <?php $this->artTitle('link') ?></li>
    <?php
            }
    ?>
           </ul>
    <?php
    }
    ?>
    </div>
    <style type="text/css">
    #tabs {
        list-style: none;
        padding: 0;
        display: flex;
        gap: 1rem;
    }
    
    #tab-contents .toggle,
    #tab-contents .toggle:not(:checked) + ul { display: none; }
    
    #tabs {
        white-space: nowrap;
        overflow-x: auto;
        padding-bottom: 0.5rem;
    }
    #tabs label {
        padding: 0 0.25rem;
        border-radius: 0.25rem;
        background-color: #f8f8f8;
    }
    
    #tabs .active {
        background-color: #258fd6;
        color: #fff;
    }
    
    #tab-contents ul {
        padding-left: 2rem;
    }
    </style>
    <script>
        (function() {
            'use strict';
            const active = 'active';
            const container = document.getElementById('tab-contents');
            if (container) {
                const tabs =  document.getElementById('tabs');
                container.addEventListener('change', function(ev) {
                    Array.from(tabs.querySelectorAll('.' + active)).forEach(function(node) {
                        node.classList.remove(active);
                    });
                    event.target.labels[0].classList.add(active);
                    console.log('click');
                });
    
                const radioFirst = container.querySelector('input[type="radio"]');
                if (radioFirst) {
                    radioFirst.click();
                    radioFirst.labels[0].classList.add(active);
                }
            }
        })();
    </script>
    

    L'enregistrement de la page statique ne pose plus de problème avec le caractère "\".

    Franchement, pourquoi faire simple quand on peut faire compliquer ?

    Ce bug de PluXml est bien embarrassant.

  • cpalocpalo Member

    Bonjour,
    Merci d'avoir pris le temps d'expliquer la démarche.
    Je ne vais donc pas simplement recopier le code mais prendre le temps de le saisir pour comprendre et apprendre.
    Franchement, pourquoi faire simple quand on peut faire compliquer ?
    Cordialement

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