plxShow->navPrevious() et plxShow->navNext() ?

Bonjour,

Serait-il possible, en s'inspirant de plxShow->pagination() de créer deux fonctions qui permettent de passer d'un article à un autre au sein de la même catégorie?

plxShow->navPrevious() permettrait d'aller à l'article plus ancien et plxShow->navNext() à celui tout juste un peu plus récent.

Je demande si c'est possible d'avoir deux fonctions distinctes de façon à laisser la possibilité au personnes qui conçoivent des thèmes soit de placer les deux en bas de chaque article (avant ou après commentaire...) soit de les placer dans des colonnes de part et d'autres de chaque article?

Merci pour vos réponses et votre aide,

Thatoo

Réponses

  • AlbaAlba Member

    +1 :-)

  • bazooka07bazooka07 PluXml Lead Developer, Moderator

    Idée intéressante !

    Tant qu'à faire, cela serait bien d'avoir aussi $plxShow->navFirst() et $plxShow->navLast(), pour les premier et dernier articles.

    Pour avoir quelque chose de plus homogène, je conserverai plutôt $plxShow->artUrl() en lui rajoutant un troisième paramètre dans le fichier core/lib/class.plx.show.php
    public function artUrl($echo=true, $extra='', $position=false) {} avec pour $position :

    • pas renseigné or égal à false : article courant pour assurer rétro-compatibilité
    • plxShow::ART_PREV article précèdent
    • plxShow::ART_NEXT article suivant
    • plxShow::ART_FIRST 1er article
    • plxShow::ART_LAST dernier article

    La liste des articles ci-dessus et à afficher serait à stocker dans le tableau $result dans l'objet $plxShow->plxMotor->plxRecord_arts.
    La taille de ce tableau devra être augmenté de 4 par rapport au nombre d'articles à afficher dans la page. Il est rempli par la fonction plxMotor::getArticles().
    Il faudra aussi modifier la fonction plxRecord::f() pour démarrer à l'indice 2.

    Et si tu veux afficher les articles sur plusieurs colonnes sauf pour le premier article qui prendra toute la largeur, il faut faire un petit calcul pour connaitre l'indice du premier article à afficher dans la fonction plxMotor::getArticles(). Là il faudra créer un nouveau paramètre dans la configuration avancée de PluXml pour définir le nombre de colonnes (1, 2, 3, 4, ...)

    Je note l'idée. Mais je ne le ferai que sur ma version de PluXml.

    Je ne peux pas le faire sur la version officielle de PluXml.
    Certains se plaignent déjà que je vais trop loin pour améliorer PluXml et qu'ils ne peuvent plus suivre.
    D'où grand rétro-pédalage de la prochaine version de PluXml ce week-end.

    P.S. : Ce nouveau vert dans Mini-site fait trop bling-bling. Il faudrait une couleur plus froide et écrire en blanc.

  • assodefisassodefis Member
    avril 2020 modifié

    J'ai réussi à afficher mes articles sur 2 colonnes de façon élégantes avec seulement le premier article de chaque page en pleine largeur.
    Et j'ai réussi à créer ma condition pour "si première page" :

    <?php if ($urlPage == $plxShow->catUrl($plxShow->catId()) OR $urlPage == $plxShow->catUrl($plxShow->catId()).'/page1') {
    
    }
    

    avec

    $urlPage = une construction de $_SERVER['HTTP_HOST'] (et https) et $_SERVER['REQUEST_URI']
    

    Pour en savoir plus, voir https://forum.pluxml.org/discussion/6722/recuperer-le-numero-de-page-dans-template-frontend/p1?new=1

    Il me reste maintenant à trouver comment faire

    <?php if ($urlPage == $plxShow->catUrl($plxShow->catId()) OR $urlPage == $plxShow->catUrl($plxShow->catId()).'/page1') {
        affiche un article de plus que sur les autres pages;   //ça je ne sais pas encore faire.
        }
        } else {
        affiche le nombre d'article décidé dans les paramètres;
        }
    

    Comment faire?

    Enfin, pourquoi PluXml éprouve le besoin de m'afficher tout à la fin (en dernière page) les articles 3 et 2 (si 1 est le plus ancien), je ne comprends pas mais ce sera pour ma part, un bug acceptable [mais pourquoi 3 et 2 et pas 2 et 1???? mystère].

  • HarukaHaruka PluXml Project Manager

    Oui c'est une bonne idée, je note.

  • assodefisassodefis Member
    avril 2020 modifié

    Je crois que je viens de comprendre ton commentaire @bazooka07
    "
    Et si tu veux afficher les articles sur plusieurs colonnes sauf pour le premier article qui prendra toute la largeur, il faut faire un petit calcul pour connaitre l'indice du premier article à afficher dans la fonction plxMotor::getArticles(). Là il faudra créer un nouveau paramètre dans la configuration avancée de PluXml pour définir le nombre de colonnes (1, 2, 3, 4, ...)
    "
    Bon, ben, du coup, je crois que mon histoire de if etc, ça ne sert à rien. A moins que... On ne pourrait pas donner un argument à plxRecord_arts pour qu'il modifie la valeur de bypage? Auquel cas, on pourrait mettre dans un if.

  • bazooka07bazooka07 PluXml Lead Developer, Moderator

    A y réfléchir à nouveau, c'est un peu plus compliqué
    Si PluXml est en mode article, le 1er article, article suivante, article affiché, article suivant,et dernier article dans le tableau $result correspondent bien avec 1er, 2ème, avant-dernière cellule et dernière cellule du tableau correspondent bien aux articles. Et la taille du tableau est égale à 5 puisqu'un seul article affiché.

    Par contre dans les autres modes home, catégorie, archive, tag il y a plusieurs articles affichés. Donc la taille du tableau doit être supérieure ou égale à 5.
    La première cellule doit donc contenir l'adresse de la 1ère page, la deuxième la page précèdente, l'avant dernière la page suivante et la dernière la dernière page.
    Et donc si fait l'adresse de la page précèdente nulle, on peut considérer qu'on est sur la 1ère page et qu'on affiche le 1er article.
    Pour pouvoir gérer le CSS3, il faut à l'intérieur de la boucle "$plxShow-<plxMotor-<plxRecord_arts-<loop())" ajouter une class supplémentaire à <article> pour dire d'afficher cet article sur toute la largeur.

    On pourrait également mettre des balises <link> avec prev et next dans le <head> de la page

  • ... si tu le dis. J'avoue ne pas tout comprendre malheureusement.

    [En revanche, j'ai fait une première contribution très modeste sur github pour offrir le choix que le thumb d'un article soit cliquable pour ouvrir l'article plutôt que de pointer vers elle même. C'est utile pour qui veut faire un template de type gallerie.]

    @bazooka07 est-ce que tu accepterais de me pointer vers la branche (me donner les droits de lecture) sur laquelle tu travailles sur ces sujets. Je serais curieux de voir si je comprends les modifications que tu fais. Ça m'aiderait sans doute à mieux comprendre comment tout ça fonctionne.

  • bazooka07bazooka07 PluXml Lead Developer, Moderator

    Pour ta contribution cela ne va pas passer
    On peut pas modifier l'ordre des paramètres nommés dans une fonction
    Si quelqu'un met à jour PluXml et pas son thème, il y a une forte chance que cela bogue.
    Et j'entends déjà les grincheux râler "c'était mieux avant !"

    Donc les nouveaux paramètres doivent être rajouter à la fin et avoir une valeur par défaut. Et il faudra préciser obligatoirement la valeur des paramètres précédents à chaque fois qu'on utilisera la fonction. Et quand on regarde &dollar;format c'est pas cool.

    La première chose à faire est de remplacer la valeur de celui-ci par une constante de class.

    2ème point, il serait logique que ce que tu demandes soit le comportement par défaut.

    Ensuite, il vaut mieux baser tes propositions sur la branche master.

    Donc plxShow::artThumbnail() peut s'écrire :

    class plxShow {
    
        const ART_THUMBNAIL_FORMAT = '<a href="#img_url"><img class="art_thumbnail" src="#img_thumb_url" alt="#img_alt" title="#img_title" /></a>';
    
        public $plxMotor = false; # Objet plxMotor
        private $lang; # fichier de traduction du theme
    #   ......
        /**
         * Méthode qui affiche l'image d'accroche d'un article
         *
         * @param   format  format d'affichage (variables: #img_url, #img_thumb_url, #img_alt, #img_title)
         *                  par défaut: '<a href="#img_url"><img class="art_thumbnail" src="#img_thumb_url" alt="#img_alt" title="#img_title" /></a>'
         * @param   echo    si à VRAI affichage à l'écran
         * @param   arturl  si vrai cliquer sur la vignette affiche l'article
         * @scope   home,categorie,article,tags,archives
         * @author  Stephane F, J.P. Pourrez
         **/
        public function artThumbnail($format=self::ART_THUMBNAIL_FORMAT, $echo=true, $arturl=true) {
    
            $filename = trim($this->plxMotor->plxRecord_arts->f('thumbnail'));
            if(!empty($filename)) {
                $img_url = $this->plxMotor->urlRewrite($filename);
                $img_thumb = plxUtils::thumbName($filename);
                $result = strtr($format, array(
                    '#img_url'          => $arturl ? $this->artUrl(false) : $img_url,
                    '#img_thumb_url'    => (file_exists(PLX_ROOT.$img_thumb)) ? $this->plxMotor->urlRewrite($img_thumb) : $img_url,
                    '#img_title'        => plxUtils::strCheck($this->plxMotor->plxRecord_arts->f('thumbnail_title')),
                    '#img_alt'          => $this->plxMotor->plxRecord_arts->f('thumbnail_alt')
                ));
                if($echo)
                    echo $result;
                else
                    return $result;
            } elseif(!$echo) {
                return false;
            }
    
        }
    

    ART_THUMBNAIL_FORMAT est une constante de class. Elle a une portée globale.

    Voir la branche "plxShow-artThumbnail-2024" sur mon dépôt github

    Par contre, je découvre un autre souci. Si &dollar;filename est vide, on affiche rien ! Pas cool.

    Je pense qu'il faut qu'on puisse paramètrer PluXml pour afficher une vignette par défaut si elle n'existe pas pour un article ou une catégorie. A défaut, on affiche le logo de PluXml. Cela évitera de casser la mise en page côté site.
    Je vais regarder cela d'ici la fin de semaine.

    Pour en revenir aux articles précèdent et suivant, cela reste au niveau de l'idée, même si c'est très clair pour moi.
    Il faut que je code cela pour tester.

    Par contre, tout le code que je t'ai déjà anvoyé est sur mon dépôt Framagit et je ne l'ai pas encore cloné sur mon dépôt Github.

  • bazooka07bazooka07 PluXml Lead Developer, Moderator
  • assodefisassodefis Member
    avril 2020 modifié

    Ok, merci pour tes remarques. Elles sont importantes.
    Ton code est aussi plus élégant. Merci.
    Je vais le mettre à jour dans mon projet. Par contre, n'ayant pas besoin de plxShow::catThumbnail(..) dans l’immédiat, je vais laisser comme c'est en attendant une mise à jour de PluXml.

    La fonction article précèdent/suivant, ce serait top. Ce sera comme une mise à jour....

  • assodefisassodefis Member
    avril 2020 modifié

    Du coup, pour éviter des surprises à ceux qui ont des habitudes avec PluXml, il vaudrait mieux mettre $arturl=false par défaut, non?
    Pour l'affichage du Thumbnail dans une catégorie, ma demande est logique mais pour l'affichage du thumbnail dans l'article lui même, ça n'a pas de sens de renvoyer vers l'article puisqu'on y est, donc le fonctionnement originel est logique.
    Ainsi, Avec

    public function artThumbnail($format=self::ART_THUMBNAIL_FORMAT, $echo=true, $arturl=false) {
    ...
    }
    

    On garde le fonctionnement originel, dans un article quand on clique sur le thumbnail, ça ouvre l'image en grand.
    Si on veut, dans une catégorie, appeler la fonction artThumbnail() et qu'en cliquant sur l'image, ça ouvre l'article, il suffit d'écrire

    artThumbnail($plxShow::ART_THUMBNAIL_FORMAT, true, true);
    

    n'est-ce pas?

    Autre toute petite modif
    * @param echo si à VRAI affichage à l'écran
    devient
    * @param echo si vrai, affichage à l'écran

  • bazooka07bazooka07 PluXml Lead Developer, Moderator
    avril 2020 modifié

    Ok, on va laisser par défaut l'ancien comportement.
    Même dans une catégorie l'ancien comportement se défend si on veut utiliser un diaporama (slide show). Par ex sur ce site.
    Au final, le principal intérêt sera d'afficher coûte que coûte une vignette pour un article plutôt qu'un texte alternatif,
    Egalement on peut choisir dans les médias le logo à afficher sur la page d'authentification. Et même sur le thème si je rajoute une petite fonction plxShow::logo().

  • Pas mal le slideshow. Tu sais comment il est fait?
    Pour l'instant, je n'ai aucun js sur mon site et si jamais les boutons prev et next sont dispo, je pense ne pas en avoir besoin.

  • Avec https://forum.pluxml.org/discussion/comment/60423 et https://forum.pluxml.org/discussion/comment/60427/#Comment_60427 étant résolu, il ne me manque que ces deux navPrevious et navNext pour terminer ma maquette de site. Je suis super content et satisfait de PluXml. C'est super léger et simple. Merci pour tout le travail qui a été réalisé. Je suis curieux de suivre l’évolution.

  • Bonjour tout le monde,

    J'ai travaillé à une solution, certes insatisfaisantes car elle fonctionne en se basant sur l'ordre des artID et pas sur l'ordre de publication, mais qui, en attendant le sans aucun doute excellent travail de @bazooka07 , peut servir de preuve de travail. En voici une démo : https://mini-site.defis.info/article11/premiere-realisation

    et voici mes modifications de code apportées à lastArtList() et mes trois créations de fonctions qui en découlent PreviousPage(), PreviousArt() et enfin NextArt() :

      /**
         * Méthode qui affiche la liste des $max derniers articles ou calcul le nombre d'articles plus récent ou plus ancien qu'artID
         * Si la variable $cat_id est renseignée, seuls les articles de cette catégorie sont retournés.
         * On tient compte si la catégorie est active
         *
         * @param   format  format du texte pour chaque article
         * @param   max     nombre d'articles maximum
         * @param   cat_id  ids des catégories cible (numérique ou urls) : séparés par des |
         * @param   ending  texte à ajouter en fin de ligne
         * @param   sort    tri de l'affichage des articles (sort|rsort|alpha|random)
       * @param artID   id de l'article étudié
       * @param recent calcul du nombre d'article plus récent (true) ou plus ancien (false) que artID
         * @scope   global
         * @author  Florent MONTHEL, Stephane F, Cyril MAGUIRE, Thomas Ingles, Thatoo
         **/
        public function lastArtList($format='', $max=5, $cat_id='', $ending='', $sort='rsort', $artID=false, $recent=true) {
    
            $capture = '';
    
            $format = empty($format)? '<li><a href="#art_url" title="#art_title">#art_title</a></li>': $format; # V5.8 format par defaut si vide
    
            # Hook Plugins
            if(eval($this->plxMotor->plxPlugins->callHook('plxShowLastArtList'))) return;
    
            # Génération de notre motif
            $all = (isset($all)? $all: empty($cat_id)); # pour le hook : si $all = TRUE, n'y passe pas
            $cats = $this->plxMotor->activeCats . '|home'; # toutes les categories active
            if(!$all) {
                if(is_numeric($cat_id)) # inclusion à partir de l'id de la categorie
                    $cats = str_pad($cat_id,3,'0',STR_PAD_LEFT);
                else { # inclusion à partir de url de la categorie
                    $cat_id .= '|';
                    foreach ($this->plxMotor->aCats as $key => $value) {
                        if(strpos($cat_id,$value['url'].'|') !== false) {
                            $cats = explode('|',$cat_id);
                            if (in_array($value['url'], $cats)) {
                                $cat_id = str_replace($value['url'].'|',$key.'|',$cat_id);
                            }
                        }
                    }
                    $cat_id = substr($cat_id,0,-1);
                    if (empty($cat_id)) {
                        $all = true;
                    }else{
                        $cats = $cat_id;
                    }
                }
            }
            if(empty($motif)){# pour le hook. motif par defaut s'il n'a point créé cette variable
                if($all)
                    $motif = '/^[0-9]{4}.(?:[0-9]|home|,)*(?:'.$cats.')(?:[0-9]|home|,)*.[0-9]{3}.[0-9]{12}.[a-z0-9-]+.xml$/';
                else
                    $motif = '/^[0-9]{4}.((?:[0-9]|home|,)*(?:'.$cats.')(?:[0-9]|home|,)*).[0-9]{3}.[0-9]{12}.[a-z0-9-]+.xml$/';
            }
    
            # Nouvel objet plxGlob et récupération des fichiers
            $plxGlob_arts = clone $this->plxMotor->plxGlob_arts;
        $nbarts=0;
            if($aFiles = $plxGlob_arts->query($motif,'art',$sort,0,$max,'before')) {
                foreach($aFiles as $v) { # On parcourt tous les fichiers
                    $art = $this->plxMotor->parseArticle(PLX_ROOT.$this->plxMotor->aConf['racine_articles'].$v);
            if ($recent == false AND $art['numero'] < $artID OR $recent == true AND $art['numero'] > $artID) {
                    $num = intval($art['numero']);
                    $date = $art['date'];
                    if(($this->plxMotor->mode == 'article') AND ($art['numero'] == $this->plxMotor->cible))
                        $status = 'active';
                    else
                        $status = 'noactive';
    
                    # Mise en forme de la liste des catégories
                    $catList = array();
                    $catIds = explode(',', $art['categorie']);
                    foreach ($catIds as $idx => $catId) {
                        if(isset($this->plxMotor->aCats[$catId])) { # La catégorie existe
                            $catName = plxUtils::strCheck($this->plxMotor->aCats[$catId]['name']);
                            $catUrl = $this->plxMotor->aCats[$catId]['url'];
                            $catList[] = '<a title="'.$catName.'" href="'.$this->plxMotor->urlRewrite('?categorie'.intval($catId).'/'.$catUrl).'">'.$catName.'</a>';
                        } else {
                            $catList[] = L_UNCLASSIFIED;
                        }
                    }
    
                    # On modifie nos motifs
                    $row = str_replace('#art_id',$num,$format);
                    $row = str_replace('#cat_list', implode(', ',$catList),$row);
                    $row = str_replace('#art_url',$this->plxMotor->urlRewrite('?article'.$num.'/'.$art['url']),$row);
                    $row = str_replace('#art_status',$status,$row);
                    $author = plxUtils::getValue($this->plxMotor->aUsers[$art['author']]['name']);
                    $row = str_replace('#art_author',plxUtils::strCheck($author),$row);
                    $row = str_replace('#art_title',plxUtils::strCheck($art['title']),$row);
                    $strlength = preg_match('/#art_chapo\(([0-9]+)\)/',$row,$capture) ? $capture[1] : '100';
                    $chapo = plxUtils::truncate($art['chapo'],$strlength,$ending,true,true);
                    $row = str_replace('#art_chapo('.$strlength.')','#art_chapo',$row);
                    $row = str_replace('#art_chapo',$chapo,$row);
                    $strlength = preg_match('/#art_content\(([0-9]+)\)/',$row,$capture) ? $capture[1] : '100';
                    $content = plxUtils::truncate($art['content'],$strlength,$ending,true,true);
                    $row = str_replace('#art_content('.$strlength.')','#art_content',$row);
                    $row = str_replace('#art_content',$content,$row);
                    $row = str_replace('#art_date',plxDate::formatDate($date,'#num_day/#num_month/#num_year(4)'),$row);
                    $row = str_replace('#art_hour',plxDate::formatDate($date,'#hour:#minute'),$row);
                    $row = str_replace('#art_time',plxDate::formatDate($date,'#time'),$row);
                    $row = plxDate::formatDate($date,$row);
                    $row = str_replace('#art_nbcoms',$art['nb_com'],$row);
                    $row = str_replace('#art_thumbnail', '<img class="art_thumbnail" src="#img_url" alt="#img_alt" title="#img_title" />',$row);
                    $row = str_replace('#img_url',$this->plxMotor->urlRewrite($art['thumbnail']),$row);
                    $row = str_replace('#img_title',$art['thumbnail_title'],$row);
                    $row = str_replace('#img_alt',$art['thumbnail_alt'],$row);
    
                    # Hook plugin
                    eval($this->plxMotor->plxPlugins->callHook('plxShowLastArtListContent'));
    
                    # On genère notre ligne
              if ($artID == false) {
                echo $row;
              }
              $nbarts++;
            }
          }
          if (!$artID == false) {
            return $nbarts;
          }
            }
        }
    
      public function PreviousPage() {
      $cat = '00'.$this->catId();
      $artID = $this->artId();
      $previous_page = ceil(($this->lastArtList('', false, $cat,'','rsort', $artID)+1) / $this->plxMotor->aCats[$cat]['bypage']);
      return $previous_page;
    }
    
    public function PreviousArt() {
      $cat = '00'.$this->catId();
      $nbArticles = $this->plxMotor->nbArticles('(?:home,|\d{3},)*' . $cat . '(?:,\d{3}|,home)*', '\d{3}', '', 'before');
      $artID = $this->artId();
      $nbarts_p = $this->lastArtList('', false, $cat,'','rsort', $artID, false);
      if ($nbarts_p == 0) {
        return false;
      } else {
        for ($i=0; $i < $nbArticles; $i++) {
          $artID--;
          $nbarts_p_i = $this->lastArtList('', false, $cat,'','rsort', $artID, false);
          $artInfo = $this->plxMotor->artInfoFromFilename($this->plxMotor->plxGlob_arts->aFiles['00'.$artID]);
          if ($nbarts_p_i == ($nbarts_p - 1) AND $artInfo['catId']== $cat) {
            return $this->plxMotor->urlRewrite('?article'.$artID.'/'.$artInfo['artUrl']);
          }
        }
      }
    }
    
    public function NextArt() {
      $cat = '00'.$this->catId();
      $nbArticles = $this->plxMotor->nbArticles('(?:home,|\d{3},)*' . $cat . '(?:,\d{3}|,home)*', '\d{3}', '', 'before');
      $artID = $this->artId();
      $nbarts_n = $this->lastArtList('', false, $cat,'','rsort', $artID);
      if ($nbarts_n == 0) {
        return false;
      } else {
        for ($i=0; $i < $nbArticles; $i++) {
          $artID++;
          $nbarts_n_i = $this->lastArtList('', false, $cat,'','rsort', $artID);
          $artInfo = $this->plxMotor->artInfoFromFilename($this->plxMotor->plxGlob_arts->aFiles['00'.$artID]);
          if ($nbarts_n_i == ($nbarts_n - 1) AND $artInfo['catId']== $cat) {
            return $this->plxMotor->urlRewrite('?article'.$artID.'/'.$artInfo['artUrl']);
          }
        }
      }
    }
    

    @bazooka07 dans mon dépot gitlab, la branche master est à jour avec ces modifications, prenant en compte le choix du dépot master de PluXml quant à artThumbnail($type='', etc...) plutôt que ta proposition, prenant en compte tes remarques de design quant au panneau admin (n'hésites pas à m'en refaire, je cherche toujours à m'améliorer), avec le .htaccess que j'ai publié sur le forum et avec les plugins kzcontact et share_me installés et modifiés par mes soins (utilisation de Placeholders plutôt que de labels dans kzcontact, mise à jour des icones de share_me, les originaux sont un peu vintages:-), ainsi que correction de la ligne 457 de share_me.php de

    echo "<!--\n".$staticUrl."\n-->\n>";
    

    à

    echo "<!--\n".$staticUrl."\n-->";
    

    ).

    N'hésitez pas à me faire des retours sur mon travail. J'apprécie toutes vos remarques. Je me rends compte en écrivant ici que j'ai changé les noms de fonctions... navPrevious() et navNext() c'était peut-être mieux que PreviousArt() et NextArt()...

    Après vos retours et quelques finalisations, je rendrai notre code public.

  • bazooka07bazooka07 PluXml Lead Developer, Moderator
    mai 2020 modifié

    Bonjour,
    Je viens d'envoyer un Pull-Request qui fait le taf. Voici le lien :
    https://github.com/pluxml/PluXml/pull/447
    En bref :
    Dans la fonction plxMotor::demarrage :
    si on est en mode categorie, tag, home, archives, on stocke dans une variable de session le mode, la cible, le motif pour filtrer les articles et le tri.
    Si on est en mode article, on exploite les informations stockés précèdemment pour récupérer les premier, précèdent, suivant et dernier articles par rapport à l'article demandé et on stocke leurs noms de fichiers.
    Pour exploiter tout cela, on a une nouvelle fonction plxShow::artPagination qui affiche dans la page de l'article sélectionné , les liens de ces articles selon le format demandé. Soit dans la balise <body> soit dans la balise <head>.
    Il y a également une fonction plxShow::artNavigationRange qui affiche la position de l'article et le nombre d'articles dans la série (catégorie, mot-clé, archives, accueil).
    Il y a également une fonction plxShow::canonical pour avoir l'adresse canonique de la page
    Quand on est dans une page article, on a également un lien pour revenir dans la série et à la bonne page si on a navigué d'article en article.

  • Bonjour et merci mille fois pour ce travail. Je vais l'essayer prochainement et faire mes retours (si il y a).

  • Je viens d'essayer et tout fonctionne super bien (cf imprim'écran ici https://github.com/pluxml/PluXml/pull/447#issuecomment-630898206).

    Bien que les boutons soient inscrit dans le code, est-ce possible de les changer avec du CSS et la police Fontello?

    const ART_DIRECTIONS_EMOJIS = array(
        'first' => '⏪', // :rewind:
        'prev'  => '◀️', // :arrow_backward:
        'next'  => '▶️', // :arrow_forward:
        'last'  => '⏩', // :fast_forward:
        'up'    => '⏫', // :arrow_double_up:
    );
    

    Surtout, est-ce possible de séparer les boutons?

    • Ne pas afficher first et last par exemple.
    • Afficher prev et next de part et d'autre d'une photo comme j'ai pu le faire sur mon site (voir les bouton gris de part et d'autre de la photo dans l'imprim'écran sur github)?

    Est-ce que, par exemple, $format='

    #icon' ne devrait pas être composé dans la fonction artNavigation($rel='all') avec $rel pouvant être "all" ou "first" ou "prev" etc... ?

    Ainsi on pourrait écrire
    <?php $plxShow->artNavigation($rel='prev'); ?>
    image
    <?php $plxShow->artNavigation($rel='next'); ?>

    Qu'en penses-tu @bazooka07 ?
    Si j'ai raté un truc, je veux bien que tu m'expliques.

  • bazooka07bazooka07 PluXml Lead Developer, Moderator

    Le plus simple est de modifier la signature de la fonction comme suit :

    public function artNavigation(
          $format='<li><a href="#url" rel="#dir" title="#title">#icon</a></li>',
          $buttons='first prev next last up'
    ) { ... }
    

    Cela laisse la liberté pour choisir la façon dont sont affichés les boutons et les boutons qu'on veut afficher et leur ordre.
    Par défaut, on affiche tous les boutons.
    On peut comme cela mettre des balise <link> dans le <header>.

  • bazooka07bazooka07 PluXml Lead Developer, Moderator

    J'ai mis le Pull-Request à jour.
    Pour afficher seulement les boutons précèdent suivant, il suffit de faire :

    $plxShow->artNavigation('<li><a href="#url" rel="#dir" title="#title">#icon</a></li>', 'prev next');
    
  • Super, ça avance bien. Merci @bazooka07
    Il y a cependant un problème, si j'affiche seulement les boutons "précèdent" et "suivant", alors, il est impossible d'aller sur le dernier et le premier article car lorsqu'on se trouve sur le second article, "précédent" ne s'affiche pas puisque dans la fonction, seul "first" est censé s'afficher et lorsqu'on se trouve sur l'avant dernier article, "suivant" ne s'affiche pas puisque dans la fonction, seul "last" est censé s'afficher.

  • bazooka07bazooka07 PluXml Lead Developer, Moderator

    Effectivement j'ai juste envisagé le cas où tous les boutons étaient affichés comme dans la page d'accueil.
    Je vais regarder cela dès que possible.
    As-tu récupérer la branche master sur le dépôt Github de PluXml ?
    https://github.com/pluxml/PluXml
    Il doit y avoir ces boutons de navigation.

  • oui, merci, je travaille avec les modifications "merged".

  • bazooka07bazooka07 PluXml Lead Developer, Moderator
    mai 2020 modifié

    Dans le fichier core/class.plx.motor.php, modifie la boucle foreach($aFiles as $key=>$value) dans la fonction artNavigation() en inversant les tests first et prev d'une part, et entre next et last d'autre part (ligne 429), comme suit :

                # Gestion des articles précédent, suivant, dans le mode précèdent (home, categorie, archives, tags)
                if(!empty($_SESSION['previous'])) {
                    # On récupère un tableau indexé des articles
                    $aFiles = $this->plxGlob_arts->query($_SESSION['previous']['motif'], 'art', $_SESSION['previous']['tri'], 0, false, 'before');
                    $artIds = array();
                    foreach($aFiles as $key=>$value) {
                        if(substr($value, 0, 4) == $this->cible) {
                            if($key > 0) {
                                if($key > 1) { $artIds['first'] = $aFiles[0]; }
                                $artIds['prev'] = $aFiles[$key - 1];
                            }
                            if($key < count($aFiles) - 1) {
                                if($key < count($aFiles) - 2) { $artIds['last'] = $aFiles[count($aFiles) - 1]; }
                                $artIds['next'] = $aFiles[$key + 1];
                            }
                            $_SESSION['previous']['position'] = $key + 1;
                            $_SESSION['previous']['count'] = count($aFiles);
                            break;
                        }
                    }
                    $_SESSION['previous']['artIds'] = $artIds;
                }
    

    Je ferai un pull request ultérieurement.

  • Ça fonctionne parfaitement maintenant!
    Merci!

  • krockroc Member

    Super boulôt, cette fonctionnalité est vraiment utile pour un CMS.
    J'espère qu'elle pourra être intégrée dans une prochaine version.

  • HarukaHaruka PluXml Project Manager

    Hello, cette fonctionnalité sera bien présente dans la prochaine version, j'y ai déjà ajouté le code de @bazooka07, merci à lui.

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